diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 8709638aa0..84aa87b406 100755 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -230,15 +230,25 @@ include_directories(DEINDUGens/include) BUILD_PLUGIN(JPverb "DEINDUGens/JPverbRaw.cpp" "" "DEINDUGens") - set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") - set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS mydsp=JPVERB) - set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) + set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") + set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS mydsp=JPVERB) + set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) +if (SUPERNOVA) + set_property(TARGET JPverb_supernova APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") + set_property(TARGET JPverb_supernova APPEND PROPERTY COMPILE_DEFINITIONS mydsp=JPVERB) + set_property(TARGET JPverb_supernova APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) +endif() BUILD_PLUGIN(Greyhole "DEINDUGens/GreyholeRaw.cpp" "" "DEINDUGens") - set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") - set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS mydsp=GREYHOLE) - set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) + set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") + set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS mydsp=GREYHOLE) + set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) +if (SUPERNOVA) + set_property(TARGET Greyhole_supernova APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") + set_property(TARGET Greyhole_supernova APPEND PROPERTY COMPILE_DEFINITIONS mydsp=GREYHOLE) + set_property(TARGET Greyhole_supernova APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) +endif() # MembraneUGens BUILD_PLUGIN(MembraneUGens "MembraneUGens/Membrane_shape.c;MembraneUGens/Membrane.cpp" diff --git a/source/DEINDUGens/GreyholeRaw.cpp b/source/DEINDUGens/GreyholeRaw.cpp index aacd64ef89..3768a3c379 100644 --- a/source/DEINDUGens/GreyholeRaw.cpp +++ b/source/DEINDUGens/GreyholeRaw.cpp @@ -1,20 +1,15 @@ -//---------------------------------------------------------- -// version: "1.0" -// author: "Julian Parker, bug fixes by Till Bovermann" -// license: "GPL2+" -// name: "GreyholeRaw" -// copyright: "(c) Julian Parker 2013" -// -// Code generated with Faust 0.9.98 (http://faust.grame.fr) -//---------------------------------------------------------- +/* ------------------------------------------------------------ +author: "Julian Parker, bug fixes by Till Bovermann" +copyright: "(c) Julian Parker 2013" +license: "GPL2+" +name: "GreyholeRaw" +version: "1.0" +Code generated with Faust 2.15.11 (https://faust.grame.fr) +Compilation options: -vec -lv 0 -vs 8 -ftz 0 -mcd 16 +------------------------------------------------------------ */ -/* link with : "primes" */ -#include -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -36,6 +31,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + #include #include #include @@ -48,9 +48,15 @@ using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -82,7 +88,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -111,6 +117,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -178,8 +186,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -209,842 +218,5078 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +/* link with : "primes" */ +#include +#include +#include +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - float fVec0[2]; - int iVec1[2]; - float fConst0; - float fConst1; - FAUSTFLOAT fslider1; - float fVec2[2]; - float fConst2; - FAUSTFLOAT fslider2; - float fVec3[2]; - float fRec39[2]; - float fRec40[2]; - int IOTA; - float fVec4[131072]; - FAUSTFLOAT fslider3; - float fRec41[2]; - float fRec42[2]; - float fRec43[2]; - float fRec44[2]; - FAUSTFLOAT fslider4; - float fVec5[2]; - float fVec6[131072]; - float fVec7[16384]; - FAUSTFLOAT fslider5; - float fRec45[2]; - float fRec38[2]; - float fRec36[2]; - float fVec8[16384]; - float fRec47[2]; - float fRec46[2]; - float fRec37[2]; - float fVec9[16384]; - float fRec48[2]; - float fRec35[2]; - float fRec33[2]; - float fVec10[16384]; - float fRec50[2]; - float fRec49[2]; - float fRec34[2]; - float fVec11[16384]; - float fRec51[2]; - float fRec32[2]; - float fRec30[2]; - float fVec12[16384]; - float fRec53[2]; - float fRec52[2]; - float fRec31[2]; - float fVec13[16384]; - float fRec54[2]; - float fRec29[2]; - float fRec27[2]; - float fVec14[16384]; - float fRec56[2]; - float fRec55[2]; - float fRec28[2]; - float fVec15[16384]; - float fRec57[2]; - float fRec26[2]; - float fRec24[2]; - float fVec16[16384]; - float fRec59[2]; - float fRec58[2]; - float fRec25[2]; - float fVec17[16384]; - float fRec60[2]; - float fRec23[2]; - float fRec21[2]; - float fVec18[16384]; - float fRec62[2]; - float fRec61[2]; - float fRec22[2]; - float fVec19[16384]; - float fRec63[2]; - float fRec20[2]; - float fRec18[2]; - float fVec20[16384]; - float fRec65[2]; - float fRec64[2]; - float fRec19[2]; - float fVec21[16384]; - float fRec66[2]; - float fRec17[2]; - float fRec15[2]; - float fVec22[16384]; - float fRec68[2]; - float fRec67[2]; - float fRec16[2]; - float fVec23[16384]; - float fRec69[2]; - float fRec14[2]; - float fRec12[2]; - float fVec24[16384]; - float fRec71[2]; - float fRec70[2]; - float fRec13[2]; - float fVec25[16384]; - float fRec72[2]; - float fRec11[2]; - float fRec9[2]; - float fVec26[16384]; - float fRec74[2]; - float fRec73[2]; - float fRec10[2]; - float fVec27[16384]; - float fRec75[2]; - float fRec8[2]; - float fRec6[2]; - float fVec28[16384]; - float fRec77[2]; - float fRec76[2]; - float fRec7[2]; - float fVec29[16384]; - float fRec78[2]; - float fRec5[2]; - float fRec3[2]; - float fVec30[16384]; - float fRec80[2]; - float fRec79[2]; - float fRec4[2]; - FAUSTFLOAT fslider6; - float fVec31[2]; - float fRec2[2]; - float fRec0[1024]; - float fRec81[2]; - float fRec1[1024]; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("version", "1.0"); + float fConst0; + FAUSTFLOAT fHslider0; + float fRec39_perm[4]; + float fRec40_perm[4]; + float fRec41_perm[4]; + float fRec42_perm[4]; + float fConst1; + FAUSTFLOAT fHslider1; + float fVec0_perm[4]; + float fRec43_perm[4]; + int iVec1_perm[4]; + float fRec44_perm[4]; + FAUSTFLOAT fHslider2; + float fRec45_perm[4]; + FAUSTFLOAT fHslider3; + float fVec2_perm[4]; + FAUSTFLOAT fHslider4; + float fVec3_perm[4]; + float fConst2; + FAUSTFLOAT fHslider5; + float fVec4_perm[4]; + float fYec0[131072]; + int fYec0_idx; + int fYec0_idx_save; + float fYec1[16384]; + int fYec1_idx; + int fYec1_idx_save; + float fYec2_perm[4]; + float fRec38_perm[4]; + float fRec36_perm[4]; + float fRec47_perm[4]; + float fYec3[131072]; + int fYec3_idx; + int fYec3_idx_save; + float fYec4[16384]; + int fYec4_idx; + int fYec4_idx_save; + float fYec5_perm[4]; + float fRec46_perm[4]; + float fRec37_perm[4]; + float fRec48_perm[4]; + float fYec6[16384]; + int fYec6_idx; + int fYec6_idx_save; + float fYec7_perm[4]; + float fRec35_perm[4]; + float fRec33_perm[4]; + float fRec50_perm[4]; + float fYec8[16384]; + int fYec8_idx; + int fYec8_idx_save; + float fYec9_perm[4]; + float fRec49_perm[4]; + float fRec34_perm[4]; + float fRec51_perm[4]; + float fYec10[16384]; + int fYec10_idx; + int fYec10_idx_save; + float fYec11_perm[4]; + float fRec32_perm[4]; + float fRec30_perm[4]; + float fRec53_perm[4]; + float fYec12[16384]; + int fYec12_idx; + int fYec12_idx_save; + float fYec13_perm[4]; + float fRec52_perm[4]; + float fRec31_perm[4]; + float fRec54_perm[4]; + float fYec14[16384]; + int fYec14_idx; + int fYec14_idx_save; + float fYec15_perm[4]; + float fRec29_perm[4]; + float fRec27_perm[4]; + float fRec56_perm[4]; + float fYec16[16384]; + int fYec16_idx; + int fYec16_idx_save; + float fYec17_perm[4]; + float fRec55_perm[4]; + float fRec28_perm[4]; + float fRec57_perm[4]; + float fYec18[16384]; + int fYec18_idx; + int fYec18_idx_save; + float fYec19_perm[4]; + float fRec26_perm[4]; + float fRec24_perm[4]; + float fRec59_perm[4]; + float fYec20[16384]; + int fYec20_idx; + int fYec20_idx_save; + float fYec21_perm[4]; + float fRec58_perm[4]; + float fRec25_perm[4]; + float fRec60_perm[4]; + float fYec22[16384]; + int fYec22_idx; + int fYec22_idx_save; + float fYec23_perm[4]; + float fRec23_perm[4]; + float fRec21_perm[4]; + float fRec62_perm[4]; + float fYec24[16384]; + int fYec24_idx; + int fYec24_idx_save; + float fYec25_perm[4]; + float fRec61_perm[4]; + float fRec22_perm[4]; + float fRec63_perm[4]; + float fYec26[16384]; + int fYec26_idx; + int fYec26_idx_save; + float fYec27_perm[4]; + float fRec20_perm[4]; + float fRec18_perm[4]; + float fRec65_perm[4]; + float fYec28[16384]; + int fYec28_idx; + int fYec28_idx_save; + float fYec29_perm[4]; + float fRec64_perm[4]; + float fRec19_perm[4]; + float fRec66_perm[4]; + float fYec30[16384]; + int fYec30_idx; + int fYec30_idx_save; + float fYec31_perm[4]; + float fRec17_perm[4]; + float fRec15_perm[4]; + float fRec68_perm[4]; + float fYec32[16384]; + int fYec32_idx; + int fYec32_idx_save; + float fYec33_perm[4]; + float fRec67_perm[4]; + float fRec16_perm[4]; + float fRec69_perm[4]; + float fYec34[16384]; + int fYec34_idx; + int fYec34_idx_save; + float fYec35_perm[4]; + float fRec14_perm[4]; + float fRec12_perm[4]; + float fRec71_perm[4]; + float fYec36[16384]; + int fYec36_idx; + int fYec36_idx_save; + float fYec37_perm[4]; + float fRec70_perm[4]; + float fRec13_perm[4]; + float fRec72_perm[4]; + float fYec38[16384]; + int fYec38_idx; + int fYec38_idx_save; + float fYec39_perm[4]; + float fRec11_perm[4]; + float fRec9_perm[4]; + float fRec74_perm[4]; + float fYec40[16384]; + int fYec40_idx; + int fYec40_idx_save; + float fYec41_perm[4]; + float fRec73_perm[4]; + float fRec10_perm[4]; + float fRec75_perm[4]; + float fYec42[16384]; + int fYec42_idx; + int fYec42_idx_save; + float fYec43_perm[4]; + float fRec8_perm[4]; + float fRec6_perm[4]; + float fRec77_perm[4]; + float fYec44[16384]; + int fYec44_idx; + int fYec44_idx_save; + float fYec45_perm[4]; + float fRec76_perm[4]; + float fRec7_perm[4]; + float fRec78_perm[4]; + float fYec46[16384]; + int fYec46_idx; + int fYec46_idx_save; + float fYec47_perm[4]; + float fRec5_perm[4]; + float fRec3_perm[4]; + float fRec80_perm[4]; + float fYec48[16384]; + int fYec48_idx; + int fYec48_idx_save; + float fYec49_perm[4]; + float fRec79_perm[4]; + float fRec4_perm[4]; + FAUSTFLOAT fHslider6; + float fVec5_perm[4]; + float fRec2_perm[4]; + float fRec0[1024]; + int fRec0_idx; + int fRec0_idx_save; + float fRec81_perm[4]; + float fRec1[1024]; + int fRec1_idx; + int fRec1_idx_save; + + public: + + void metadata(Meta* m) { m->declare("author", "Julian Parker, bug fixes by Till Bovermann"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Julian Parker 2013"); + m->declare("delays.lib/name", "Faust Delay Library"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "GreyholeRaw"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); m->declare("license", "GPL2+"); - m->declare("name", "GreyholeRaw"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); - m->declare("copyright", "(c) Julian Parker 2013"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "GreyholeRaw"); m->declare("oscillators.lib/name", "Faust Oscillator Library"); m->declare("oscillators.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 2; } + virtual int getNumInputs() { + return 2; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 0; + break; + } + case 1: { + rate = 0; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05f, max(1e+03f, (float)fSamplingFreq)); - fConst1 = (0.00056689343f * fConst0); - fConst2 = (3.1415927f / fConst0); + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + fConst1 = (3.14159274f / fConst0); + fConst2 = (0.000566893432f * fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.5f; - fslider1 = 0.1f; - fslider2 = 2.0f; - fslider3 = 0.2f; - fslider4 = 0.9f; - fslider5 = 1.0f; - fslider6 = 0.0f; + fHslider0 = FAUSTFLOAT(0.20000000000000001f); + fHslider1 = FAUSTFLOAT(2.0f); + fHslider2 = FAUSTFLOAT(1.0f); + fHslider3 = FAUSTFLOAT(0.5f); + fHslider4 = FAUSTFLOAT(0.90000000000000002f); + fHslider5 = FAUSTFLOAT(0.10000000000000001f); + fHslider6 = FAUSTFLOAT(0.0f); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) iVec1[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - IOTA = 0; - for (int i=0; i<131072; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fVec5[i] = 0; - for (int i=0; i<131072; i++) fVec6[i] = 0; - for (int i=0; i<16384; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<16384; i++) fVec8[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<16384; i++) fVec9[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<16384; i++) fVec10[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<16384; i++) fVec11[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<16384; i++) fVec12[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<16384; i++) fVec13[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<16384; i++) fVec14[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<16384; i++) fVec15[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<16384; i++) fVec16[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<16384; i++) fVec17[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<16384; i++) fVec18[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<16384; i++) fVec19[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<16384; i++) fVec20[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<16384; i++) fVec21[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<16384; i++) fVec22[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<16384; i++) fVec23[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<16384; i++) fVec24[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<16384; i++) fVec25[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<16384; i++) fVec26[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<16384; i++) fVec27[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<16384; i++) fVec28[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<16384; i++) fVec29[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<16384; i++) fVec30[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fVec31[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<1024; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<1024; i++) fRec1[i] = 0; + for (int l0 = 0; (l0 < 4); l0 = (l0 + 1)) { + fRec39_perm[l0] = 0.0f; + + } + for (int l1 = 0; (l1 < 4); l1 = (l1 + 1)) { + fRec40_perm[l1] = 0.0f; + + } + for (int l2 = 0; (l2 < 4); l2 = (l2 + 1)) { + fRec41_perm[l2] = 0.0f; + + } + for (int l3 = 0; (l3 < 4); l3 = (l3 + 1)) { + fRec42_perm[l3] = 0.0f; + + } + for (int l4 = 0; (l4 < 4); l4 = (l4 + 1)) { + fVec0_perm[l4] = 0.0f; + + } + for (int l5 = 0; (l5 < 4); l5 = (l5 + 1)) { + fRec43_perm[l5] = 0.0f; + + } + for (int l6 = 0; (l6 < 4); l6 = (l6 + 1)) { + iVec1_perm[l6] = 0; + + } + for (int l7 = 0; (l7 < 4); l7 = (l7 + 1)) { + fRec44_perm[l7] = 0.0f; + + } + for (int l8 = 0; (l8 < 4); l8 = (l8 + 1)) { + fRec45_perm[l8] = 0.0f; + + } + for (int l9 = 0; (l9 < 4); l9 = (l9 + 1)) { + fVec2_perm[l9] = 0.0f; + + } + for (int l10 = 0; (l10 < 4); l10 = (l10 + 1)) { + fVec3_perm[l10] = 0.0f; + + } + for (int l11 = 0; (l11 < 4); l11 = (l11 + 1)) { + fVec4_perm[l11] = 0.0f; + + } + for (int l12 = 0; (l12 < 131072); l12 = (l12 + 1)) { + fYec0[l12] = 0.0f; + + } + fYec0_idx = 0; + fYec0_idx_save = 0; + for (int l13 = 0; (l13 < 16384); l13 = (l13 + 1)) { + fYec1[l13] = 0.0f; + + } + fYec1_idx = 0; + fYec1_idx_save = 0; + for (int l14 = 0; (l14 < 4); l14 = (l14 + 1)) { + fYec2_perm[l14] = 0.0f; + + } + for (int l15 = 0; (l15 < 4); l15 = (l15 + 1)) { + fRec38_perm[l15] = 0.0f; + + } + for (int l16 = 0; (l16 < 4); l16 = (l16 + 1)) { + fRec36_perm[l16] = 0.0f; + + } + for (int l17 = 0; (l17 < 4); l17 = (l17 + 1)) { + fRec47_perm[l17] = 0.0f; + + } + for (int l18 = 0; (l18 < 131072); l18 = (l18 + 1)) { + fYec3[l18] = 0.0f; + + } + fYec3_idx = 0; + fYec3_idx_save = 0; + for (int l19 = 0; (l19 < 16384); l19 = (l19 + 1)) { + fYec4[l19] = 0.0f; + + } + fYec4_idx = 0; + fYec4_idx_save = 0; + for (int l20 = 0; (l20 < 4); l20 = (l20 + 1)) { + fYec5_perm[l20] = 0.0f; + + } + for (int l21 = 0; (l21 < 4); l21 = (l21 + 1)) { + fRec46_perm[l21] = 0.0f; + + } + for (int l22 = 0; (l22 < 4); l22 = (l22 + 1)) { + fRec37_perm[l22] = 0.0f; + + } + for (int l23 = 0; (l23 < 4); l23 = (l23 + 1)) { + fRec48_perm[l23] = 0.0f; + + } + for (int l24 = 0; (l24 < 16384); l24 = (l24 + 1)) { + fYec6[l24] = 0.0f; + + } + fYec6_idx = 0; + fYec6_idx_save = 0; + for (int l25 = 0; (l25 < 4); l25 = (l25 + 1)) { + fYec7_perm[l25] = 0.0f; + + } + for (int l26 = 0; (l26 < 4); l26 = (l26 + 1)) { + fRec35_perm[l26] = 0.0f; + + } + for (int l27 = 0; (l27 < 4); l27 = (l27 + 1)) { + fRec33_perm[l27] = 0.0f; + + } + for (int l28 = 0; (l28 < 4); l28 = (l28 + 1)) { + fRec50_perm[l28] = 0.0f; + + } + for (int l29 = 0; (l29 < 16384); l29 = (l29 + 1)) { + fYec8[l29] = 0.0f; + + } + fYec8_idx = 0; + fYec8_idx_save = 0; + for (int l30 = 0; (l30 < 4); l30 = (l30 + 1)) { + fYec9_perm[l30] = 0.0f; + + } + for (int l31 = 0; (l31 < 4); l31 = (l31 + 1)) { + fRec49_perm[l31] = 0.0f; + + } + for (int l32 = 0; (l32 < 4); l32 = (l32 + 1)) { + fRec34_perm[l32] = 0.0f; + + } + for (int l33 = 0; (l33 < 4); l33 = (l33 + 1)) { + fRec51_perm[l33] = 0.0f; + + } + for (int l34 = 0; (l34 < 16384); l34 = (l34 + 1)) { + fYec10[l34] = 0.0f; + + } + fYec10_idx = 0; + fYec10_idx_save = 0; + for (int l35 = 0; (l35 < 4); l35 = (l35 + 1)) { + fYec11_perm[l35] = 0.0f; + + } + for (int l36 = 0; (l36 < 4); l36 = (l36 + 1)) { + fRec32_perm[l36] = 0.0f; + + } + for (int l37 = 0; (l37 < 4); l37 = (l37 + 1)) { + fRec30_perm[l37] = 0.0f; + + } + for (int l38 = 0; (l38 < 4); l38 = (l38 + 1)) { + fRec53_perm[l38] = 0.0f; + + } + for (int l39 = 0; (l39 < 16384); l39 = (l39 + 1)) { + fYec12[l39] = 0.0f; + + } + fYec12_idx = 0; + fYec12_idx_save = 0; + for (int l40 = 0; (l40 < 4); l40 = (l40 + 1)) { + fYec13_perm[l40] = 0.0f; + + } + for (int l41 = 0; (l41 < 4); l41 = (l41 + 1)) { + fRec52_perm[l41] = 0.0f; + + } + for (int l42 = 0; (l42 < 4); l42 = (l42 + 1)) { + fRec31_perm[l42] = 0.0f; + + } + for (int l43 = 0; (l43 < 4); l43 = (l43 + 1)) { + fRec54_perm[l43] = 0.0f; + + } + for (int l44 = 0; (l44 < 16384); l44 = (l44 + 1)) { + fYec14[l44] = 0.0f; + + } + fYec14_idx = 0; + fYec14_idx_save = 0; + for (int l45 = 0; (l45 < 4); l45 = (l45 + 1)) { + fYec15_perm[l45] = 0.0f; + + } + for (int l46 = 0; (l46 < 4); l46 = (l46 + 1)) { + fRec29_perm[l46] = 0.0f; + + } + for (int l47 = 0; (l47 < 4); l47 = (l47 + 1)) { + fRec27_perm[l47] = 0.0f; + + } + for (int l48 = 0; (l48 < 4); l48 = (l48 + 1)) { + fRec56_perm[l48] = 0.0f; + + } + for (int l49 = 0; (l49 < 16384); l49 = (l49 + 1)) { + fYec16[l49] = 0.0f; + + } + fYec16_idx = 0; + fYec16_idx_save = 0; + for (int l50 = 0; (l50 < 4); l50 = (l50 + 1)) { + fYec17_perm[l50] = 0.0f; + + } + for (int l51 = 0; (l51 < 4); l51 = (l51 + 1)) { + fRec55_perm[l51] = 0.0f; + + } + for (int l52 = 0; (l52 < 4); l52 = (l52 + 1)) { + fRec28_perm[l52] = 0.0f; + + } + for (int l53 = 0; (l53 < 4); l53 = (l53 + 1)) { + fRec57_perm[l53] = 0.0f; + + } + for (int l54 = 0; (l54 < 16384); l54 = (l54 + 1)) { + fYec18[l54] = 0.0f; + + } + fYec18_idx = 0; + fYec18_idx_save = 0; + for (int l55 = 0; (l55 < 4); l55 = (l55 + 1)) { + fYec19_perm[l55] = 0.0f; + + } + for (int l56 = 0; (l56 < 4); l56 = (l56 + 1)) { + fRec26_perm[l56] = 0.0f; + + } + for (int l57 = 0; (l57 < 4); l57 = (l57 + 1)) { + fRec24_perm[l57] = 0.0f; + + } + for (int l58 = 0; (l58 < 4); l58 = (l58 + 1)) { + fRec59_perm[l58] = 0.0f; + + } + for (int l59 = 0; (l59 < 16384); l59 = (l59 + 1)) { + fYec20[l59] = 0.0f; + + } + fYec20_idx = 0; + fYec20_idx_save = 0; + for (int l60 = 0; (l60 < 4); l60 = (l60 + 1)) { + fYec21_perm[l60] = 0.0f; + + } + for (int l61 = 0; (l61 < 4); l61 = (l61 + 1)) { + fRec58_perm[l61] = 0.0f; + + } + for (int l62 = 0; (l62 < 4); l62 = (l62 + 1)) { + fRec25_perm[l62] = 0.0f; + + } + for (int l63 = 0; (l63 < 4); l63 = (l63 + 1)) { + fRec60_perm[l63] = 0.0f; + + } + for (int l64 = 0; (l64 < 16384); l64 = (l64 + 1)) { + fYec22[l64] = 0.0f; + + } + fYec22_idx = 0; + fYec22_idx_save = 0; + for (int l65 = 0; (l65 < 4); l65 = (l65 + 1)) { + fYec23_perm[l65] = 0.0f; + + } + for (int l66 = 0; (l66 < 4); l66 = (l66 + 1)) { + fRec23_perm[l66] = 0.0f; + + } + for (int l67 = 0; (l67 < 4); l67 = (l67 + 1)) { + fRec21_perm[l67] = 0.0f; + + } + for (int l68 = 0; (l68 < 4); l68 = (l68 + 1)) { + fRec62_perm[l68] = 0.0f; + + } + for (int l69 = 0; (l69 < 16384); l69 = (l69 + 1)) { + fYec24[l69] = 0.0f; + + } + fYec24_idx = 0; + fYec24_idx_save = 0; + for (int l70 = 0; (l70 < 4); l70 = (l70 + 1)) { + fYec25_perm[l70] = 0.0f; + + } + for (int l71 = 0; (l71 < 4); l71 = (l71 + 1)) { + fRec61_perm[l71] = 0.0f; + + } + for (int l72 = 0; (l72 < 4); l72 = (l72 + 1)) { + fRec22_perm[l72] = 0.0f; + + } + for (int l73 = 0; (l73 < 4); l73 = (l73 + 1)) { + fRec63_perm[l73] = 0.0f; + + } + for (int l74 = 0; (l74 < 16384); l74 = (l74 + 1)) { + fYec26[l74] = 0.0f; + + } + fYec26_idx = 0; + fYec26_idx_save = 0; + for (int l75 = 0; (l75 < 4); l75 = (l75 + 1)) { + fYec27_perm[l75] = 0.0f; + + } + for (int l76 = 0; (l76 < 4); l76 = (l76 + 1)) { + fRec20_perm[l76] = 0.0f; + + } + for (int l77 = 0; (l77 < 4); l77 = (l77 + 1)) { + fRec18_perm[l77] = 0.0f; + + } + for (int l78 = 0; (l78 < 4); l78 = (l78 + 1)) { + fRec65_perm[l78] = 0.0f; + + } + for (int l79 = 0; (l79 < 16384); l79 = (l79 + 1)) { + fYec28[l79] = 0.0f; + + } + fYec28_idx = 0; + fYec28_idx_save = 0; + for (int l80 = 0; (l80 < 4); l80 = (l80 + 1)) { + fYec29_perm[l80] = 0.0f; + + } + for (int l81 = 0; (l81 < 4); l81 = (l81 + 1)) { + fRec64_perm[l81] = 0.0f; + + } + for (int l82 = 0; (l82 < 4); l82 = (l82 + 1)) { + fRec19_perm[l82] = 0.0f; + + } + for (int l83 = 0; (l83 < 4); l83 = (l83 + 1)) { + fRec66_perm[l83] = 0.0f; + + } + for (int l84 = 0; (l84 < 16384); l84 = (l84 + 1)) { + fYec30[l84] = 0.0f; + + } + fYec30_idx = 0; + fYec30_idx_save = 0; + for (int l85 = 0; (l85 < 4); l85 = (l85 + 1)) { + fYec31_perm[l85] = 0.0f; + + } + for (int l86 = 0; (l86 < 4); l86 = (l86 + 1)) { + fRec17_perm[l86] = 0.0f; + + } + for (int l87 = 0; (l87 < 4); l87 = (l87 + 1)) { + fRec15_perm[l87] = 0.0f; + + } + for (int l88 = 0; (l88 < 4); l88 = (l88 + 1)) { + fRec68_perm[l88] = 0.0f; + + } + for (int l89 = 0; (l89 < 16384); l89 = (l89 + 1)) { + fYec32[l89] = 0.0f; + + } + fYec32_idx = 0; + fYec32_idx_save = 0; + for (int l90 = 0; (l90 < 4); l90 = (l90 + 1)) { + fYec33_perm[l90] = 0.0f; + + } + for (int l91 = 0; (l91 < 4); l91 = (l91 + 1)) { + fRec67_perm[l91] = 0.0f; + + } + for (int l92 = 0; (l92 < 4); l92 = (l92 + 1)) { + fRec16_perm[l92] = 0.0f; + + } + for (int l93 = 0; (l93 < 4); l93 = (l93 + 1)) { + fRec69_perm[l93] = 0.0f; + + } + for (int l94 = 0; (l94 < 16384); l94 = (l94 + 1)) { + fYec34[l94] = 0.0f; + + } + fYec34_idx = 0; + fYec34_idx_save = 0; + for (int l95 = 0; (l95 < 4); l95 = (l95 + 1)) { + fYec35_perm[l95] = 0.0f; + + } + for (int l96 = 0; (l96 < 4); l96 = (l96 + 1)) { + fRec14_perm[l96] = 0.0f; + + } + for (int l97 = 0; (l97 < 4); l97 = (l97 + 1)) { + fRec12_perm[l97] = 0.0f; + + } + for (int l98 = 0; (l98 < 4); l98 = (l98 + 1)) { + fRec71_perm[l98] = 0.0f; + + } + for (int l99 = 0; (l99 < 16384); l99 = (l99 + 1)) { + fYec36[l99] = 0.0f; + + } + fYec36_idx = 0; + fYec36_idx_save = 0; + for (int l100 = 0; (l100 < 4); l100 = (l100 + 1)) { + fYec37_perm[l100] = 0.0f; + + } + for (int l101 = 0; (l101 < 4); l101 = (l101 + 1)) { + fRec70_perm[l101] = 0.0f; + + } + for (int l102 = 0; (l102 < 4); l102 = (l102 + 1)) { + fRec13_perm[l102] = 0.0f; + + } + for (int l103 = 0; (l103 < 4); l103 = (l103 + 1)) { + fRec72_perm[l103] = 0.0f; + + } + for (int l104 = 0; (l104 < 16384); l104 = (l104 + 1)) { + fYec38[l104] = 0.0f; + + } + fYec38_idx = 0; + fYec38_idx_save = 0; + for (int l105 = 0; (l105 < 4); l105 = (l105 + 1)) { + fYec39_perm[l105] = 0.0f; + + } + for (int l106 = 0; (l106 < 4); l106 = (l106 + 1)) { + fRec11_perm[l106] = 0.0f; + + } + for (int l107 = 0; (l107 < 4); l107 = (l107 + 1)) { + fRec9_perm[l107] = 0.0f; + + } + for (int l108 = 0; (l108 < 4); l108 = (l108 + 1)) { + fRec74_perm[l108] = 0.0f; + + } + for (int l109 = 0; (l109 < 16384); l109 = (l109 + 1)) { + fYec40[l109] = 0.0f; + + } + fYec40_idx = 0; + fYec40_idx_save = 0; + for (int l110 = 0; (l110 < 4); l110 = (l110 + 1)) { + fYec41_perm[l110] = 0.0f; + + } + for (int l111 = 0; (l111 < 4); l111 = (l111 + 1)) { + fRec73_perm[l111] = 0.0f; + + } + for (int l112 = 0; (l112 < 4); l112 = (l112 + 1)) { + fRec10_perm[l112] = 0.0f; + + } + for (int l113 = 0; (l113 < 4); l113 = (l113 + 1)) { + fRec75_perm[l113] = 0.0f; + + } + for (int l114 = 0; (l114 < 16384); l114 = (l114 + 1)) { + fYec42[l114] = 0.0f; + + } + fYec42_idx = 0; + fYec42_idx_save = 0; + for (int l115 = 0; (l115 < 4); l115 = (l115 + 1)) { + fYec43_perm[l115] = 0.0f; + + } + for (int l116 = 0; (l116 < 4); l116 = (l116 + 1)) { + fRec8_perm[l116] = 0.0f; + + } + for (int l117 = 0; (l117 < 4); l117 = (l117 + 1)) { + fRec6_perm[l117] = 0.0f; + + } + for (int l118 = 0; (l118 < 4); l118 = (l118 + 1)) { + fRec77_perm[l118] = 0.0f; + + } + for (int l119 = 0; (l119 < 16384); l119 = (l119 + 1)) { + fYec44[l119] = 0.0f; + + } + fYec44_idx = 0; + fYec44_idx_save = 0; + for (int l120 = 0; (l120 < 4); l120 = (l120 + 1)) { + fYec45_perm[l120] = 0.0f; + + } + for (int l121 = 0; (l121 < 4); l121 = (l121 + 1)) { + fRec76_perm[l121] = 0.0f; + + } + for (int l122 = 0; (l122 < 4); l122 = (l122 + 1)) { + fRec7_perm[l122] = 0.0f; + + } + for (int l123 = 0; (l123 < 4); l123 = (l123 + 1)) { + fRec78_perm[l123] = 0.0f; + + } + for (int l124 = 0; (l124 < 16384); l124 = (l124 + 1)) { + fYec46[l124] = 0.0f; + + } + fYec46_idx = 0; + fYec46_idx_save = 0; + for (int l125 = 0; (l125 < 4); l125 = (l125 + 1)) { + fYec47_perm[l125] = 0.0f; + + } + for (int l126 = 0; (l126 < 4); l126 = (l126 + 1)) { + fRec5_perm[l126] = 0.0f; + + } + for (int l127 = 0; (l127 < 4); l127 = (l127 + 1)) { + fRec3_perm[l127] = 0.0f; + + } + for (int l128 = 0; (l128 < 4); l128 = (l128 + 1)) { + fRec80_perm[l128] = 0.0f; + + } + for (int l129 = 0; (l129 < 16384); l129 = (l129 + 1)) { + fYec48[l129] = 0.0f; + + } + fYec48_idx = 0; + fYec48_idx_save = 0; + for (int l130 = 0; (l130 < 4); l130 = (l130 + 1)) { + fYec49_perm[l130] = 0.0f; + + } + for (int l131 = 0; (l131 < 4); l131 = (l131 + 1)) { + fRec79_perm[l131] = 0.0f; + + } + for (int l132 = 0; (l132 < 4); l132 = (l132 + 1)) { + fRec4_perm[l132] = 0.0f; + + } + for (int l133 = 0; (l133 < 4); l133 = (l133 + 1)) { + fVec5_perm[l133] = 0.0f; + + } + for (int l134 = 0; (l134 < 4); l134 = (l134 + 1)) { + fRec2_perm[l134] = 0.0f; + + } + for (int l135 = 0; (l135 < 1024); l135 = (l135 + 1)) { + fRec0[l135] = 0.0f; + + } + fRec0_idx = 0; + fRec0_idx_save = 0; + for (int l136 = 0; (l136 < 4); l136 = (l136 + 1)) { + fRec81_perm[l136] = 0.0f; + + } + for (int l137 = 0; (l137 < 1024); l137 = (l137 + 1)) { + fRec1[l137] = 0.0f; + + } + fRec1_idx = 0; + fRec1_idx_save = 0; + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); } + virtual void instanceInit(int samplingFreq) { instanceConstants(samplingFreq); instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->addHorizontalSlider("damping", &fslider6, 0.0f, 0.0f, 0.99f, 0.001f); - ui_interface->addHorizontalSlider("delayTime", &fslider3, 0.2f, 0.001f, 1.45f, 0.0001f); - ui_interface->addHorizontalSlider("diffusion", &fslider0, 0.5f, 0.0f, 0.99f, 0.0001f); - ui_interface->addHorizontalSlider("feedback", &fslider4, 0.9f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("modDepth", &fslider1, 0.1f, 0.0f, 1.0f, 0.001f); - ui_interface->addHorizontalSlider("modFreq", &fslider2, 2.0f, 0.0f, 1e+01f, 0.01f); - ui_interface->addHorizontalSlider("size", &fslider5, 1.0f, 0.5f, 3.0f, 0.0001f); + ui_interface->openVerticalBox("GreyholeRaw"); + ui_interface->addHorizontalSlider("damping", &fHslider6, 0.0f, 0.0f, 0.99000001f, 0.00100000005f); + ui_interface->addHorizontalSlider("delayTime", &fHslider0, 0.200000003f, 0.00100000005f, 1.45000005f, 9.99999975e-05f); + ui_interface->addHorizontalSlider("diffusion", &fHslider3, 0.5f, 0.0f, 0.99000001f, 9.99999975e-05f); + ui_interface->addHorizontalSlider("feedback", &fHslider4, 0.899999976f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("modDepth", &fHslider5, 0.100000001f, 0.0f, 1.0f, 0.00100000005f); + ui_interface->addHorizontalSlider("modFreq", &fHslider1, 2.0f, 0.0f, 10.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("size", &fHslider2, 1.0f, 0.5f, 3.0f, 9.99999975e-05f); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - float fSlow0 = float(fslider0); - float fSlow1 = float(fslider1); - float fSlow2 = float(fslider2); - float fSlow3 = floorf(min((float)65533, (fConst0 * float(fslider3)))); - float fSlow4 = float(fslider4); - float fSlow5 = float(fslider5); - float fSlow6 = (49 * fSlow5); - int iSlow7 = primes(fSlow6); - float fSlow8 = (0.0001f * iSlow7); - int iSlow9 = primes((fSlow6 + 10)); - float fSlow10 = (0.0001f * iSlow9); - float fSlow11 = (36 * fSlow5); - int iSlow12 = primes(fSlow11); - float fSlow13 = (0.001f * iSlow12); - int iSlow14 = primes((fSlow11 + 10)); - float fSlow15 = (0.001f * iSlow14); - float fSlow16 = (23 * fSlow5); - int iSlow17 = primes(fSlow16); - float fSlow18 = (0.001f * iSlow17); - int iSlow19 = primes((fSlow16 + 10)); - float fSlow20 = (0.001f * iSlow19); - int iSlow21 = primes((10 * fSlow5)); - float fSlow22 = (0.001f * iSlow21); - int iSlow23 = primes((10 * (fSlow5 + 1))); - float fSlow24 = (0.001f * iSlow23); - float fSlow25 = (68 * fSlow5); - int iSlow26 = primes(fSlow25); - float fSlow27 = (0.0001f * iSlow26); - int iSlow28 = primes((fSlow25 + 10)); - float fSlow29 = (0.0001f * iSlow28); - float fSlow30 = (55 * fSlow5); - int iSlow31 = primes(fSlow30); - float fSlow32 = (0.001f * iSlow31); - int iSlow33 = primes((fSlow30 + 10)); - float fSlow34 = (0.001f * iSlow33); - float fSlow35 = (42 * fSlow5); - int iSlow36 = primes(fSlow35); - float fSlow37 = (0.001f * iSlow36); - int iSlow38 = primes((fSlow35 + 10)); - float fSlow39 = (0.001f * iSlow38); - float fSlow40 = (29 * fSlow5); - int iSlow41 = primes(fSlow40); - float fSlow42 = (0.001f * iSlow41); - int iSlow43 = primes((fSlow40 + 10)); - float fSlow44 = (0.001f * iSlow43); - float fSlow45 = (87 * fSlow5); - int iSlow46 = primes(fSlow45); - float fSlow47 = (0.0001f * iSlow46); - int iSlow48 = primes((fSlow45 + 10)); - float fSlow49 = (0.0001f * iSlow48); - float fSlow50 = (74 * fSlow5); - int iSlow51 = primes(fSlow50); - float fSlow52 = (0.001f * iSlow51); - int iSlow53 = primes((fSlow50 + 10)); - float fSlow54 = (0.001f * iSlow53); - float fSlow55 = (61 * fSlow5); - int iSlow56 = primes(fSlow55); - float fSlow57 = (0.001f * iSlow56); - int iSlow58 = primes((fSlow55 + 10)); - float fSlow59 = (0.001f * iSlow58); - float fSlow60 = (48 * fSlow5); - int iSlow61 = primes(fSlow60); - float fSlow62 = (0.001f * iSlow61); - int iSlow63 = primes((fSlow60 + 10)); - float fSlow64 = (0.001f * iSlow63); - float fSlow65 = float(fslider6); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - for (int i=0; i 0.0f) & (fRec42[1] < 1.0f))))?fRec41[1]:0):((int(((fRec42[1] == 0.0f) & (fSlow3 != fRec43[1]))))?4.5351473e-05f:((int(((fRec42[1] == 1.0f) & (fSlow3 != fRec44[1]))))?-4.5351473e-05f:0))); - fRec41[0] = fTemp23; - fRec42[0] = max(0.0f, min(1.0f, (fRec42[1] + fTemp23))); - fRec43[0] = ((int(((fRec42[1] >= 1.0f) & (fRec44[1] != fSlow3))))?fSlow3:fRec43[1]); - fRec44[0] = ((int(((fRec42[1] <= 0.0f) & (fRec43[1] != fSlow3))))?fSlow3:fRec44[1]); - int iTemp24 = int(min((float)65536, max((float)0, fRec43[0]))); - float fTemp25 = (1.0f - fRec42[0]); - int iTemp26 = int(min((float)65536, max((float)0, fRec44[0]))); - fVec5[0] = fSlow4; - float fTemp27 = (fSlow4 + fVec5[1]); - float fTemp28 = ((float)input0[i] + (0.5f * (((fVec4[(IOTA-iTemp24)&131071] * fTemp25) + (fVec4[(IOTA-iTemp26)&131071] * fRec42[0])) * fTemp27))); - float fTemp29 = ((fRec27[1] * fTemp7) + (fTemp1 * fTemp28)); - float fTemp30 = ((fRec30[1] * fTemp7) + (fTemp1 * fTemp29)); - float fTemp31 = ((fRec33[1] * fTemp7) + (fTemp1 * fTemp30)); - float fTemp32 = ((fRec36[1] * fTemp7) + (fTemp1 * fTemp31)); - float fTemp33 = (fConst1 * (fTemp8 * (fRec39[0] + 1.0f))); - float fTemp34 = (fTemp33 + 8.500005f); - int iTemp35 = int(fTemp34); - float fTemp36 = floorf(fTemp34); - float fTemp37 = (fTemp33 + (9.0f - fTemp36)); - float fTemp38 = (fTemp33 + (8.0f - fTemp36)); - float fTemp39 = (fTemp33 + (7.0f - fTemp36)); - float fTemp40 = (fTemp33 + (6.0f - fTemp36)); - float fTemp41 = (fTemp37 * fTemp38); - float fTemp42 = (((((fRec1[(IOTA-int((int(min(512, max(0, iTemp35))) + 1)))&1023] * (0 - fTemp37)) * (0 - (0.5f * fTemp38))) * (0 - (0.33333334f * fTemp39))) * (0 - (0.25f * fTemp40))) + ((fTemp33 + (1e+01f - fTemp36)) * ((((((fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 1)))) + 1)))&1023] * (0 - fTemp38)) * (0 - (0.5f * fTemp39))) * (0 - (0.33333334f * fTemp40))) + (0.5f * (((fTemp37 * fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 2)))) + 1)))&1023]) * (0 - fTemp39)) * (0 - (0.5f * fTemp40))))) + (0.16666667f * ((fTemp41 * fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 3)))) + 1)))&1023]) * (0 - fTemp40)))) + (0.041666668f * ((fTemp41 * fTemp39) * fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 4)))) + 1)))&1023]))))); - fVec6[IOTA&131071] = fTemp42; - float fTemp43 = ((float)input1[i] + (0.5f * (fTemp27 * ((fVec6[(IOTA-iTemp26)&131071] * fRec42[0]) + (fVec6[(IOTA-iTemp24)&131071] * fTemp25))))); - float fTemp44 = ((fRec28[1] * fTemp7) + (fTemp1 * fTemp43)); - float fTemp45 = ((fRec31[1] * fTemp7) + (fTemp1 * fTemp44)); - float fTemp46 = ((fRec34[1] * fTemp7) + (fTemp1 * fTemp45)); - float fTemp47 = ((fRec37[1] * fTemp7) + (fTemp1 * fTemp46)); - float fTemp48 = ((6.123234e-17f * fTemp32) - fTemp47); - fVec7[IOTA&16383] = fTemp48; - fRec45[0] = (fSlow8 + (0.9999f * ((iSlow7 * iTemp12) + fRec45[1]))); - float fTemp49 = (fRec45[0] + -1.49999f); - int iTemp50 = int(min(8192, max(0, int(fTemp49)))); - float fTemp51 = floorf(fTemp49); - float fTemp52 = (fTemp51 + (2.0f - fRec45[0])); - float fTemp53 = (fRec45[0] - fTemp51); - fRec38[0] = (fVec7[(IOTA-int((iTemp50 + 1)))&16383] + ((fRec38[1] * (0 - (fTemp52 / fTemp53))) + ((fTemp52 * fVec7[(IOTA-iTemp50)&16383]) / fTemp53))); - fRec36[0] = fRec38[0]; - float fTemp54 = (fTemp32 + (6.123234e-17f * fTemp47)); - fVec8[IOTA&16383] = fTemp54; - fRec47[0] = (fSlow10 + (0.9999f * ((iSlow9 * iTemp12) + fRec47[1]))); - float fTemp55 = (fRec47[0] + -1.49999f); - int iTemp56 = int(min(8192, max(0, int(fTemp55)))); - float fTemp57 = floorf(fTemp55); - float fTemp58 = (fTemp57 + (2.0f - fRec47[0])); - float fTemp59 = (fRec47[0] - fTemp57); - fRec46[0] = (fVec8[(IOTA-int((iTemp56 + 1)))&16383] + ((fRec46[1] * (0 - (fTemp58 / fTemp59))) + ((fTemp58 * fVec8[(IOTA-iTemp56)&16383]) / fTemp59))); - fRec37[0] = fRec46[0]; - float fTemp60 = ((fRec36[1] * fTemp1) + (fTemp31 * fTemp6)); - float fTemp61 = ((fTemp1 * fRec37[1]) + (fTemp46 * fTemp6)); - float fTemp62 = ((6.123234e-17f * fTemp60) - fTemp61); - fVec9[IOTA&16383] = fTemp62; - fRec48[0] = (fSlow13 + (0.999f * ((iSlow12 * iTemp12) + fRec48[1]))); - float fTemp63 = (fRec48[0] + -1.49999f); - int iTemp64 = int(min(8192, max(0, int(fTemp63)))); - float fTemp65 = floorf(fTemp63); - float fTemp66 = (fTemp65 + (2.0f - fRec48[0])); - float fTemp67 = (fRec48[0] - fTemp65); - fRec35[0] = (fVec9[(IOTA-int((iTemp64 + 1)))&16383] + ((fRec35[1] * (0 - (fTemp66 / fTemp67))) + ((fTemp66 * fVec9[(IOTA-iTemp64)&16383]) / fTemp67))); - fRec33[0] = fRec35[0]; - float fTemp68 = ((6.123234e-17f * fTemp61) + fTemp60); - fVec10[IOTA&16383] = fTemp68; - fRec50[0] = (fSlow15 + (0.999f * ((iSlow14 * iTemp12) + fRec50[1]))); - float fTemp69 = (fRec50[0] + -1.49999f); - int iTemp70 = int(min(8192, max(0, int(fTemp69)))); - float fTemp71 = floorf(fTemp69); - float fTemp72 = (fTemp71 + (2.0f - fRec50[0])); - float fTemp73 = (fRec50[0] - fTemp71); - fRec49[0] = ((((fVec10[(IOTA-iTemp70)&16383] * fTemp72) / fTemp73) + fVec10[(IOTA-int((iTemp70 + 1)))&16383]) + (fRec49[1] * (0 - (fTemp72 / fTemp73)))); - fRec34[0] = fRec49[0]; - float fTemp74 = ((fRec33[1] * fTemp1) + (fTemp30 * fTemp6)); - float fTemp75 = ((fTemp1 * fRec34[1]) + (fTemp45 * fTemp6)); - float fTemp76 = ((6.123234e-17f * fTemp74) - fTemp75); - fVec11[IOTA&16383] = fTemp76; - fRec51[0] = (fSlow18 + (0.999f * ((iSlow17 * iTemp12) + fRec51[1]))); - float fTemp77 = (fRec51[0] + -1.49999f); - int iTemp78 = int(min(8192, max(0, int(fTemp77)))); - float fTemp79 = floorf(fTemp77); - float fTemp80 = (fTemp79 + (2.0f - fRec51[0])); - float fTemp81 = (fRec51[0] - fTemp79); - fRec32[0] = (fVec11[(IOTA-int((iTemp78 + 1)))&16383] + ((fRec32[1] * (0 - (fTemp80 / fTemp81))) + ((fTemp80 * fVec11[(IOTA-iTemp78)&16383]) / fTemp81))); - fRec30[0] = fRec32[0]; - float fTemp82 = (fTemp74 + (6.123234e-17f * fTemp75)); - fVec12[IOTA&16383] = fTemp82; - fRec53[0] = (fSlow20 + (0.999f * ((iSlow19 * iTemp12) + fRec53[1]))); - float fTemp83 = (fRec53[0] + -1.49999f); - int iTemp84 = int(min(8192, max(0, int(fTemp83)))); - float fTemp85 = floorf(fTemp83); - float fTemp86 = (fTemp85 + (2.0f - fRec53[0])); - float fTemp87 = (fRec53[0] - fTemp85); - fRec52[0] = (fVec12[(IOTA-int((iTemp84 + 1)))&16383] + ((fRec52[1] * (0 - (fTemp86 / fTemp87))) + ((fTemp86 * fVec12[(IOTA-iTemp84)&16383]) / fTemp87))); - fRec31[0] = fRec52[0]; - float fTemp88 = ((fRec30[1] * fTemp1) + (fTemp29 * fTemp6)); - float fTemp89 = ((fTemp1 * fRec31[1]) + (fTemp44 * fTemp6)); - float fTemp90 = ((6.123234e-17f * fTemp88) - fTemp89); - fVec13[IOTA&16383] = fTemp90; - fRec54[0] = (fSlow22 + (0.999f * ((iSlow21 * iTemp12) + fRec54[1]))); - float fTemp91 = (fRec54[0] + -1.49999f); - int iTemp92 = int(min(8192, max(0, int(fTemp91)))); - float fTemp93 = floorf(fTemp91); - float fTemp94 = (fTemp93 + (2.0f - fRec54[0])); - float fTemp95 = (fRec54[0] - fTemp93); - fRec29[0] = (fVec13[(IOTA-int((iTemp92 + 1)))&16383] + ((fRec29[1] * (0 - (fTemp94 / fTemp95))) + ((fTemp94 * fVec13[(IOTA-iTemp92)&16383]) / fTemp95))); - fRec27[0] = fRec29[0]; - float fTemp96 = (fTemp88 + (6.123234e-17f * fTemp89)); - fVec14[IOTA&16383] = fTemp96; - fRec56[0] = (fSlow24 + (0.999f * ((iSlow23 * iTemp12) + fRec56[1]))); - float fTemp97 = (fRec56[0] + -1.49999f); - int iTemp98 = int(min(8192, max(0, int(fTemp97)))); - float fTemp99 = floorf(fTemp97); - float fTemp100 = (fTemp99 + (2.0f - fRec56[0])); - float fTemp101 = (fRec56[0] - fTemp99); - fRec55[0] = (fVec14[(IOTA-int((iTemp98 + 1)))&16383] + ((fRec55[1] * (0 - (fTemp100 / fTemp101))) + ((fTemp100 * fVec14[(IOTA-iTemp98)&16383]) / fTemp101))); - fRec28[0] = fRec55[0]; - float fTemp102 = ((fRec27[1] * fTemp1) + (fTemp28 * fTemp6)); - float fTemp103 = ((fTemp4 * fRec15[1]) + (fTemp102 * fTemp5)); - float fTemp104 = ((fTemp4 * fRec18[1]) + (fTemp5 * fTemp103)); - float fTemp105 = ((fTemp4 * fRec21[1]) + (fTemp5 * fTemp104)); - float fTemp106 = ((fRec24[1] * fTemp4) + (fTemp5 * fTemp105)); - float fTemp107 = ((fTemp1 * fRec28[1]) + (fTemp43 * fTemp6)); - float fTemp108 = ((fTemp4 * fRec16[1]) + (fTemp5 * fTemp107)); - float fTemp109 = ((fTemp4 * fRec19[1]) + (fTemp5 * fTemp108)); - float fTemp110 = ((fTemp4 * fRec22[1]) + (fTemp5 * fTemp109)); - float fTemp111 = ((fTemp4 * fRec25[1]) + (fTemp5 * fTemp110)); - float fTemp112 = ((6.123234e-17f * fTemp106) - fTemp111); - fVec15[IOTA&16383] = fTemp112; - fRec57[0] = (fSlow27 + (0.9999f * ((iSlow26 * iTemp12) + fRec57[1]))); - float fTemp113 = (fRec57[0] + -1.49999f); - int iTemp114 = int(min(8192, max(0, int(fTemp113)))); - float fTemp115 = floorf(fTemp113); - float fTemp116 = (fTemp115 + (2.0f - fRec57[0])); - float fTemp117 = (fRec57[0] - fTemp115); - fRec26[0] = (fVec15[(IOTA-int((iTemp114 + 1)))&16383] + ((fRec26[1] * (0 - (fTemp116 / fTemp117))) + ((fTemp116 * fVec15[(IOTA-iTemp114)&16383]) / fTemp117))); - fRec24[0] = fRec26[0]; - float fTemp118 = (fTemp106 + (6.123234e-17f * fTemp111)); - fVec16[IOTA&16383] = fTemp118; - fRec59[0] = (fSlow29 + (0.9999f * ((iSlow28 * iTemp12) + fRec59[1]))); - float fTemp119 = (fRec59[0] + -1.49999f); - int iTemp120 = int(min(8192, max(0, int(fTemp119)))); - float fTemp121 = floorf(fTemp119); - float fTemp122 = (fTemp121 + (2.0f - fRec59[0])); - float fTemp123 = (fRec59[0] - fTemp121); - fRec58[0] = (fVec16[(IOTA-int((iTemp120 + 1)))&16383] + ((fRec58[1] * (0 - (fTemp122 / fTemp123))) + ((fTemp122 * fVec16[(IOTA-iTemp120)&16383]) / fTemp123))); - fRec25[0] = fRec58[0]; - float fTemp124 = ((fRec24[1] * fTemp5) + (fTemp3 * fTemp105)); - float fTemp125 = ((fTemp5 * fRec25[1]) + (fTemp3 * fTemp110)); - float fTemp126 = ((6.123234e-17f * fTemp124) - fTemp125); - fVec17[IOTA&16383] = fTemp126; - fRec60[0] = (fSlow32 + (0.999f * ((iSlow31 * iTemp12) + fRec60[1]))); - float fTemp127 = (fRec60[0] + -1.49999f); - int iTemp128 = int(min(8192, max(0, int(fTemp127)))); - float fTemp129 = floorf(fTemp127); - float fTemp130 = (fTemp129 + (2.0f - fRec60[0])); - float fTemp131 = (fRec60[0] - fTemp129); - fRec23[0] = (fVec17[(IOTA-int((iTemp128 + 1)))&16383] + (((0 - (fTemp130 / fTemp131)) * fRec23[1]) + ((fVec17[(IOTA-iTemp128)&16383] * fTemp130) / fTemp131))); - fRec21[0] = fRec23[0]; - float fTemp132 = (fTemp124 + (6.123234e-17f * fTemp125)); - fVec18[IOTA&16383] = fTemp132; - fRec62[0] = (fSlow34 + (0.999f * ((iSlow33 * iTemp12) + fRec62[1]))); - float fTemp133 = (fRec62[0] + -1.49999f); - int iTemp134 = int(min(8192, max(0, int(fTemp133)))); - float fTemp135 = floorf(fTemp133); - float fTemp136 = (fTemp135 + (2.0f - fRec62[0])); - float fTemp137 = (fRec62[0] - fTemp135); - fRec61[0] = (fVec18[(IOTA-int((iTemp134 + 1)))&16383] + ((fRec61[1] * (0 - (fTemp136 / fTemp137))) + ((fTemp136 * fVec18[(IOTA-iTemp134)&16383]) / fTemp137))); - fRec22[0] = fRec61[0]; - float fTemp138 = ((fRec21[1] * fTemp5) + (fTemp3 * fTemp104)); - float fTemp139 = ((fTemp5 * fRec22[1]) + (fTemp3 * fTemp109)); - float fTemp140 = ((6.123234e-17f * fTemp138) - fTemp139); - fVec19[IOTA&16383] = fTemp140; - fRec63[0] = (fSlow37 + (0.999f * ((iSlow36 * iTemp12) + fRec63[1]))); - float fTemp141 = (fRec63[0] + -1.49999f); - int iTemp142 = int(min(8192, max(0, int(fTemp141)))); - float fTemp143 = floorf(fTemp141); - float fTemp144 = (fTemp143 + (2.0f - fRec63[0])); - float fTemp145 = (fRec63[0] - fTemp143); - fRec20[0] = ((((fVec19[(IOTA-iTemp142)&16383] * fTemp144) / fTemp145) + fVec19[(IOTA-int((iTemp142 + 1)))&16383]) + (fRec20[1] * (0 - (fTemp144 / fTemp145)))); - fRec18[0] = fRec20[0]; - float fTemp146 = (fTemp138 + (6.123234e-17f * fTemp139)); - fVec20[IOTA&16383] = fTemp146; - fRec65[0] = (fSlow39 + (0.999f * ((iSlow38 * iTemp12) + fRec65[1]))); - float fTemp147 = (fRec65[0] + -1.49999f); - int iTemp148 = int(min(8192, max(0, int(fTemp147)))); - float fTemp149 = floorf(fTemp147); - float fTemp150 = (fTemp149 + (2.0f - fRec65[0])); - float fTemp151 = (fRec65[0] - fTemp149); - fRec64[0] = (fVec20[(IOTA-int((iTemp148 + 1)))&16383] + ((fRec64[1] * (0 - (fTemp150 / fTemp151))) + ((fTemp150 * fVec20[(IOTA-iTemp148)&16383]) / fTemp151))); - fRec19[0] = fRec64[0]; - float fTemp152 = ((fRec18[1] * fTemp5) + (fTemp3 * fTemp103)); - float fTemp153 = ((fTemp5 * fRec19[1]) + (fTemp3 * fTemp108)); - float fTemp154 = ((6.123234e-17f * fTemp152) - fTemp153); - fVec21[IOTA&16383] = fTemp154; - fRec66[0] = (fSlow42 + (0.999f * ((iSlow41 * iTemp12) + fRec66[1]))); - float fTemp155 = (fRec66[0] + -1.49999f); - int iTemp156 = int(min(8192, max(0, int(fTemp155)))); - float fTemp157 = floorf(fTemp155); - float fTemp158 = (fTemp157 + (2.0f - fRec66[0])); - float fTemp159 = (fRec66[0] - fTemp157); - fRec17[0] = ((((fVec21[(IOTA-iTemp156)&16383] * fTemp158) / fTemp159) + fVec21[(IOTA-int((iTemp156 + 1)))&16383]) + (fRec17[1] * (0 - (fTemp158 / fTemp159)))); - fRec15[0] = fRec17[0]; - float fTemp160 = (fTemp152 + (6.123234e-17f * fTemp153)); - fVec22[IOTA&16383] = fTemp160; - fRec68[0] = (fSlow44 + (0.999f * ((iSlow43 * iTemp12) + fRec68[1]))); - float fTemp161 = (fRec68[0] + -1.49999f); - int iTemp162 = int(min(8192, max(0, int(fTemp161)))); - float fTemp163 = floorf(fTemp161); - float fTemp164 = (fTemp163 + (2.0f - fRec68[0])); - float fTemp165 = (fRec68[0] - fTemp163); - fRec67[0] = (fVec22[(IOTA-int((iTemp162 + 1)))&16383] + ((fRec67[1] * (0 - (fTemp164 / fTemp165))) + ((fTemp164 * fVec22[(IOTA-iTemp162)&16383]) / fTemp165))); - fRec16[0] = fRec67[0]; - float fTemp166 = ((fRec15[1] * fTemp5) + (fTemp3 * fTemp102)); - float fTemp167 = ((fTemp1 * fTemp166) + (fTemp7 * fRec3[1])); - float fTemp168 = ((fTemp1 * fTemp167) + (fTemp7 * fRec6[1])); - float fTemp169 = ((fTemp1 * fTemp168) + (fTemp7 * fRec9[1])); - float fTemp170 = (fTemp1 * fTemp169); - float fTemp171 = (fRec12[1] * fTemp7); - float fTemp172 = ((fTemp5 * fRec16[1]) + (fTemp3 * fTemp107)); - float fTemp173 = ((fRec4[1] * fTemp7) + (fTemp1 * fTemp172)); - float fTemp174 = ((fRec7[1] * fTemp7) + (fTemp1 * fTemp173)); - float fTemp175 = ((fRec10[1] * fTemp7) + (fTemp1 * fTemp174)); - float fTemp176 = ((fRec13[1] * fTemp7) + (fTemp1 * fTemp175)); - float fTemp177 = ((6.123234e-17f * (fTemp170 + fTemp171)) - fTemp176); - fVec23[IOTA&16383] = fTemp177; - fRec69[0] = (fSlow47 + (0.9999f * ((iSlow46 * iTemp12) + fRec69[1]))); - float fTemp178 = (fRec69[0] + -1.49999f); - int iTemp179 = int(min(8192, max(0, int(fTemp178)))); - float fTemp180 = floorf(fTemp178); - float fTemp181 = (fTemp180 + (2.0f - fRec69[0])); - float fTemp182 = (fRec69[0] - fTemp180); - fRec14[0] = ((((fVec23[(IOTA-iTemp179)&16383] * fTemp181) / fTemp182) + fVec23[(IOTA-int((iTemp179 + 1)))&16383]) + (fRec14[1] * (0 - (fTemp181 / fTemp182)))); - fRec12[0] = fRec14[0]; - float fTemp183 = ((fTemp170 + (6.123234e-17f * fTemp176)) + fTemp171); - fVec24[IOTA&16383] = fTemp183; - fRec71[0] = (fSlow49 + (0.9999f * ((iSlow48 * iTemp12) + fRec71[1]))); - float fTemp184 = (fRec71[0] + -1.49999f); - int iTemp185 = int(min(8192, max(0, int(fTemp184)))); - float fTemp186 = floorf(fTemp184); - float fTemp187 = (fTemp186 + (2.0f - fRec71[0])); - float fTemp188 = (fRec71[0] - fTemp186); - fRec70[0] = (fVec24[(IOTA-int((iTemp185 + 1)))&16383] + ((fRec70[1] * (0 - (fTemp187 / fTemp188))) + ((fTemp187 * fVec24[(IOTA-iTemp185)&16383]) / fTemp188))); - fRec13[0] = fRec70[0]; - float fTemp189 = ((fTemp1 * fRec12[1]) + (fTemp169 * fTemp6)); - float fTemp190 = ((fTemp1 * fRec13[1]) + (fTemp175 * fTemp6)); - float fTemp191 = ((6.123234e-17f * fTemp189) - fTemp190); - fVec25[IOTA&16383] = fTemp191; - fRec72[0] = (fSlow52 + (0.999f * ((iSlow51 * iTemp12) + fRec72[1]))); - float fTemp192 = (fRec72[0] + -1.49999f); - int iTemp193 = int(min(8192, max(0, int(fTemp192)))); - float fTemp194 = floorf(fTemp192); - float fTemp195 = (fTemp194 + (2.0f - fRec72[0])); - float fTemp196 = (fRec72[0] - fTemp194); - fRec11[0] = ((((fVec25[(IOTA-iTemp193)&16383] * fTemp195) / fTemp196) + fVec25[(IOTA-int((iTemp193 + 1)))&16383]) + (fRec11[1] * (0 - (fTemp195 / fTemp196)))); - fRec9[0] = fRec11[0]; - float fTemp197 = (fTemp189 + (6.123234e-17f * fTemp190)); - fVec26[IOTA&16383] = fTemp197; - fRec74[0] = (fSlow54 + (0.999f * ((iSlow53 * iTemp12) + fRec74[1]))); - float fTemp198 = (fRec74[0] + -1.49999f); - int iTemp199 = int(min(8192, max(0, int(fTemp198)))); - float fTemp200 = floorf(fTemp198); - float fTemp201 = (fTemp200 + (2.0f - fRec74[0])); - float fTemp202 = (fRec74[0] - fTemp200); - fRec73[0] = (fVec26[(IOTA-int((iTemp199 + 1)))&16383] + ((fRec73[1] * (0 - (fTemp201 / fTemp202))) + ((fTemp201 * fVec26[(IOTA-iTemp199)&16383]) / fTemp202))); - fRec10[0] = fRec73[0]; - float fTemp203 = ((fTemp1 * fRec9[1]) + (fTemp168 * fTemp6)); - float fTemp204 = ((fTemp1 * fRec10[1]) + (fTemp174 * fTemp6)); - float fTemp205 = ((6.123234e-17f * fTemp203) - fTemp204); - fVec27[IOTA&16383] = fTemp205; - fRec75[0] = (fSlow57 + (0.999f * ((iSlow56 * iTemp12) + fRec75[1]))); - float fTemp206 = (fRec75[0] + -1.49999f); - int iTemp207 = int(min(8192, max(0, int(fTemp206)))); - float fTemp208 = floorf(fTemp206); - float fTemp209 = (fTemp208 + (2.0f - fRec75[0])); - float fTemp210 = (fRec75[0] - fTemp208); - fRec8[0] = ((((fVec27[(IOTA-iTemp207)&16383] * fTemp209) / fTemp210) + fVec27[(IOTA-int((iTemp207 + 1)))&16383]) + (fRec8[1] * (0 - (fTemp209 / fTemp210)))); - fRec6[0] = fRec8[0]; - float fTemp211 = (fTemp203 + (6.123234e-17f * fTemp204)); - fVec28[IOTA&16383] = fTemp211; - fRec77[0] = (fSlow59 + (0.999f * ((iSlow58 * iTemp12) + fRec77[1]))); - float fTemp212 = (fRec77[0] + -1.49999f); - int iTemp213 = int(min(8192, max(0, int(fTemp212)))); - float fTemp214 = floorf(fTemp212); - float fTemp215 = (fTemp214 + (2.0f - fRec77[0])); - float fTemp216 = (fRec77[0] - fTemp214); - fRec76[0] = (fVec28[(IOTA-int((iTemp213 + 1)))&16383] + ((fRec76[1] * (0 - (fTemp215 / fTemp216))) + ((fTemp215 * fVec28[(IOTA-iTemp213)&16383]) / fTemp216))); - fRec7[0] = fRec76[0]; - float fTemp217 = ((fTemp1 * fRec6[1]) + (fTemp167 * fTemp6)); - float fTemp218 = ((fTemp1 * fRec7[1]) + (fTemp173 * fTemp6)); - float fTemp219 = ((6.123234e-17f * fTemp217) - fTemp218); - fVec29[IOTA&16383] = fTemp219; - fRec78[0] = (fSlow62 + (0.999f * ((iSlow61 * iTemp12) + fRec78[1]))); - float fTemp220 = (fRec78[0] + -1.49999f); - int iTemp221 = int(min(8192, max(0, int(fTemp220)))); - float fTemp222 = floorf(fTemp220); - float fTemp223 = (fTemp222 + (2.0f - fRec78[0])); - float fTemp224 = (fRec78[0] - fTemp222); - fRec5[0] = ((((fVec29[(IOTA-iTemp221)&16383] * fTemp223) / fTemp224) + fVec29[(IOTA-int((iTemp221 + 1)))&16383]) + (fRec5[1] * (0 - (fTemp223 / fTemp224)))); - fRec3[0] = fRec5[0]; - float fTemp225 = (fTemp217 + (6.123234e-17f * fTemp218)); - fVec30[IOTA&16383] = fTemp225; - fRec80[0] = (fSlow64 + (0.999f * ((iSlow63 * iTemp12) + fRec80[1]))); - float fTemp226 = (fRec80[0] + -1.49999f); - int iTemp227 = int(min(8192, max(0, int(fTemp226)))); - float fTemp228 = floorf(fTemp226); - float fTemp229 = (fTemp228 + (2.0f - fRec80[0])); - float fTemp230 = (fRec80[0] - fTemp228); - fRec79[0] = (fVec30[(IOTA-int((iTemp227 + 1)))&16383] + ((fRec79[1] * (0 - (fTemp229 / fTemp230))) + ((fTemp229 * fVec30[(IOTA-iTemp227)&16383]) / fTemp230))); - fRec4[0] = fRec79[0]; - fVec31[0] = fSlow65; - float fTemp231 = (fSlow65 + fVec31[1]); - float fTemp232 = (1.0f - (0.5f * fTemp231)); - fRec2[0] = ((((fTemp1 * fRec3[1]) + (fTemp166 * fTemp6)) * fTemp232) + (0.5f * (fTemp231 * fRec2[1]))); - fRec0[IOTA&1023] = fRec2[0]; - fRec81[0] = ((0.5f * (fTemp231 * fRec81[1])) + (fTemp232 * ((fTemp172 * fTemp6) + (fTemp1 * fRec4[1])))); - fRec1[IOTA&1023] = fRec81[0]; - output0[i] = (FAUSTFLOAT)fRec0[(IOTA-0)&1023]; - output1[i] = (FAUSTFLOAT)fRec1[(IOTA-0)&1023]; - // post processing - fRec81[1] = fRec81[0]; - fRec2[1] = fRec2[0]; - fVec31[1] = fVec31[0]; - fRec4[1] = fRec4[0]; - fRec79[1] = fRec79[0]; - fRec80[1] = fRec80[0]; - fRec3[1] = fRec3[0]; - fRec5[1] = fRec5[0]; - fRec78[1] = fRec78[0]; - fRec7[1] = fRec7[0]; - fRec76[1] = fRec76[0]; - fRec77[1] = fRec77[0]; - fRec6[1] = fRec6[0]; - fRec8[1] = fRec8[0]; - fRec75[1] = fRec75[0]; - fRec10[1] = fRec10[0]; - fRec73[1] = fRec73[0]; - fRec74[1] = fRec74[0]; - fRec9[1] = fRec9[0]; - fRec11[1] = fRec11[0]; - fRec72[1] = fRec72[0]; - fRec13[1] = fRec13[0]; - fRec70[1] = fRec70[0]; - fRec71[1] = fRec71[0]; - fRec12[1] = fRec12[0]; - fRec14[1] = fRec14[0]; - fRec69[1] = fRec69[0]; - fRec16[1] = fRec16[0]; - fRec67[1] = fRec67[0]; - fRec68[1] = fRec68[0]; - fRec15[1] = fRec15[0]; - fRec17[1] = fRec17[0]; - fRec66[1] = fRec66[0]; - fRec19[1] = fRec19[0]; - fRec64[1] = fRec64[0]; - fRec65[1] = fRec65[0]; - fRec18[1] = fRec18[0]; - fRec20[1] = fRec20[0]; - fRec63[1] = fRec63[0]; - fRec22[1] = fRec22[0]; - fRec61[1] = fRec61[0]; - fRec62[1] = fRec62[0]; - fRec21[1] = fRec21[0]; - fRec23[1] = fRec23[0]; - fRec60[1] = fRec60[0]; - fRec25[1] = fRec25[0]; - fRec58[1] = fRec58[0]; - fRec59[1] = fRec59[0]; - fRec24[1] = fRec24[0]; - fRec26[1] = fRec26[0]; - fRec57[1] = fRec57[0]; - fRec28[1] = fRec28[0]; - fRec55[1] = fRec55[0]; - fRec56[1] = fRec56[0]; - fRec27[1] = fRec27[0]; - fRec29[1] = fRec29[0]; - fRec54[1] = fRec54[0]; - fRec31[1] = fRec31[0]; - fRec52[1] = fRec52[0]; - fRec53[1] = fRec53[0]; - fRec30[1] = fRec30[0]; - fRec32[1] = fRec32[0]; - fRec51[1] = fRec51[0]; - fRec34[1] = fRec34[0]; - fRec49[1] = fRec49[0]; - fRec50[1] = fRec50[0]; - fRec33[1] = fRec33[0]; - fRec35[1] = fRec35[0]; - fRec48[1] = fRec48[0]; - fRec37[1] = fRec37[0]; - fRec46[1] = fRec46[0]; - fRec47[1] = fRec47[0]; - fRec36[1] = fRec36[0]; - fRec38[1] = fRec38[0]; - fRec45[1] = fRec45[0]; - fVec5[1] = fVec5[0]; - fRec44[1] = fRec44[0]; - fRec43[1] = fRec43[0]; - fRec42[1] = fRec42[0]; - fRec41[1] = fRec41[0]; - IOTA = IOTA+1; - fRec40[1] = fRec40[0]; - fRec39[1] = fRec39[0]; - fVec3[1] = fVec3[0]; - fVec2[1] = fVec2[0]; - iVec1[1] = iVec1[0]; - fVec0[1] = fVec0[0]; + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0_ptr = inputs[0]; + FAUSTFLOAT* input1_ptr = inputs[1]; + FAUSTFLOAT* output0_ptr = outputs[0]; + FAUSTFLOAT* output1_ptr = outputs[1]; + float fSlow0 = std::floor(std::min(65533.0f, (fConst0 * float(fHslider0)))); + float fZec0[8]; + float fRec39_tmp[12]; + float* fRec39 = &fRec39_tmp[4]; + float fRec40_tmp[12]; + float* fRec40 = &fRec40_tmp[4]; + float fRec41_tmp[12]; + float* fRec41 = &fRec41_tmp[4]; + float fRec42_tmp[12]; + float* fRec42 = &fRec42_tmp[4]; + float fSlow1 = float(fHslider1); + float fVec0_tmp[12]; + float* fVec0 = &fVec0_tmp[4]; + float fZec1[8]; + float fZec2[8]; + float fZec3[8]; + float fRec43_tmp[12]; + float* fRec43 = &fRec43_tmp[4]; + int iVec1_tmp[12]; + int* iVec1 = &iVec1_tmp[4]; + int iZec4[8]; + float fRec44_tmp[12]; + float* fRec44 = &fRec44_tmp[4]; + float fSlow2 = float(fHslider2); + float fSlow3 = (49.0f * fSlow2); + int iSlow4 = int(primes(int(fSlow3))); + float fSlow5 = (9.99999975e-05f * float(iSlow4)); + float fRec45_tmp[12]; + float* fRec45 = &fRec45_tmp[4]; + float fSlow6 = float(fHslider3); + float fVec2_tmp[12]; + float* fVec2 = &fVec2_tmp[4]; + float fZec5[8]; + float fZec6[8]; + float fSlow7 = float(fHslider4); + float fVec3_tmp[12]; + float* fVec3 = &fVec3_tmp[4]; + float fZec7[8]; + float fZec8[8]; + float fSlow8 = float(fHslider5); + float fVec4_tmp[12]; + float* fVec4 = &fVec4_tmp[4]; + float fZec9[8]; + float fZec10[8]; + float fZec11[8]; + int iZec12[8]; + float fZec13[8]; + float fZec14[8]; + float fZec15[8]; + float fZec16[8]; + float fZec17[8]; + float fZec18[8]; + int iZec19[8]; + int iZec20[8]; + float fZec21[8]; + float fZec22[8]; + float fZec23[8]; + float fZec24[8]; + float fZec25[8]; + float fZec26[8]; + float fYec2_tmp[12]; + float* fYec2 = &fYec2_tmp[4]; + float fZec27[8]; + float fRec38_tmp[12]; + float* fRec38 = &fRec38_tmp[4]; + float fRec36_tmp[12]; + float* fRec36 = &fRec36_tmp[4]; + int iSlow9 = int(primes(int((fSlow3 + 10.0f)))); + float fSlow10 = (9.99999975e-05f * float(iSlow9)); + float fRec47_tmp[12]; + float* fRec47 = &fRec47_tmp[4]; + float fZec28[8]; + float fZec29[8]; + int iZec30[8]; + float fZec31[8]; + float fZec32[8]; + float fZec33[8]; + float fZec34[8]; + float fZec35[8]; + float fZec36[8]; + float fZec37[8]; + float fZec38[8]; + float fZec39[8]; + float fZec40[8]; + float fZec41[8]; + float fYec5_tmp[12]; + float* fYec5 = &fYec5_tmp[4]; + float fZec42[8]; + float fRec46_tmp[12]; + float* fRec46 = &fRec46_tmp[4]; + float fRec37_tmp[12]; + float* fRec37 = &fRec37_tmp[4]; + float fSlow11 = (36.0f * fSlow2); + int iSlow12 = int(primes(int(fSlow11))); + float fSlow13 = (0.00100000005f * float(iSlow12)); + float fRec48_tmp[12]; + float* fRec48 = &fRec48_tmp[4]; + float fZec43[8]; + float fYec7_tmp[12]; + float* fYec7 = &fYec7_tmp[4]; + float fZec44[8]; + float fRec35_tmp[12]; + float* fRec35 = &fRec35_tmp[4]; + float fRec33_tmp[12]; + float* fRec33 = &fRec33_tmp[4]; + int iSlow14 = int(primes(int((fSlow11 + 10.0f)))); + float fSlow15 = (0.00100000005f * float(iSlow14)); + float fRec50_tmp[12]; + float* fRec50 = &fRec50_tmp[4]; + float fZec45[8]; + float fYec9_tmp[12]; + float* fYec9 = &fYec9_tmp[4]; + float fZec46[8]; + float fRec49_tmp[12]; + float* fRec49 = &fRec49_tmp[4]; + float fRec34_tmp[12]; + float* fRec34 = &fRec34_tmp[4]; + float fSlow16 = (23.0f * fSlow2); + int iSlow17 = int(primes(int(fSlow16))); + float fSlow18 = (0.00100000005f * float(iSlow17)); + float fRec51_tmp[12]; + float* fRec51 = &fRec51_tmp[4]; + float fZec47[8]; + float fYec11_tmp[12]; + float* fYec11 = &fYec11_tmp[4]; + float fZec48[8]; + float fRec32_tmp[12]; + float* fRec32 = &fRec32_tmp[4]; + float fRec30_tmp[12]; + float* fRec30 = &fRec30_tmp[4]; + int iSlow19 = int(primes(int((fSlow16 + 10.0f)))); + float fSlow20 = (0.00100000005f * float(iSlow19)); + float fRec53_tmp[12]; + float* fRec53 = &fRec53_tmp[4]; + float fZec49[8]; + float fYec13_tmp[12]; + float* fYec13 = &fYec13_tmp[4]; + float fZec50[8]; + float fRec52_tmp[12]; + float* fRec52 = &fRec52_tmp[4]; + float fRec31_tmp[12]; + float* fRec31 = &fRec31_tmp[4]; + int iSlow21 = int(primes(int((10.0f * fSlow2)))); + float fSlow22 = (0.00100000005f * float(iSlow21)); + float fRec54_tmp[12]; + float* fRec54 = &fRec54_tmp[4]; + float fZec51[8]; + float fYec15_tmp[12]; + float* fYec15 = &fYec15_tmp[4]; + float fZec52[8]; + float fRec29_tmp[12]; + float* fRec29 = &fRec29_tmp[4]; + float fRec27_tmp[12]; + float* fRec27 = &fRec27_tmp[4]; + int iSlow23 = int(primes(int((10.0f * (fSlow2 + 1.0f))))); + float fSlow24 = (0.00100000005f * float(iSlow23)); + float fRec56_tmp[12]; + float* fRec56 = &fRec56_tmp[4]; + float fZec53[8]; + float fYec17_tmp[12]; + float* fYec17 = &fYec17_tmp[4]; + float fZec54[8]; + float fRec55_tmp[12]; + float* fRec55 = &fRec55_tmp[4]; + float fRec28_tmp[12]; + float* fRec28 = &fRec28_tmp[4]; + float fSlow25 = (68.0f * fSlow2); + int iSlow26 = int(primes(int(fSlow25))); + float fSlow27 = (9.99999975e-05f * float(iSlow26)); + float fRec57_tmp[12]; + float* fRec57 = &fRec57_tmp[4]; + float fZec55[8]; + float fZec56[8]; + float fZec57[8]; + float fZec58[8]; + float fZec59[8]; + float fZec60[8]; + float fZec61[8]; + float fZec62[8]; + float fYec19_tmp[12]; + float* fYec19 = &fYec19_tmp[4]; + float fZec63[8]; + float fRec26_tmp[12]; + float* fRec26 = &fRec26_tmp[4]; + float fRec24_tmp[12]; + float* fRec24 = &fRec24_tmp[4]; + int iSlow28 = int(primes(int((fSlow25 + 10.0f)))); + float fSlow29 = (9.99999975e-05f * float(iSlow28)); + float fRec59_tmp[12]; + float* fRec59 = &fRec59_tmp[4]; + float fZec64[8]; + float fZec65[8]; + float fZec66[8]; + float fZec67[8]; + float fZec68[8]; + float fYec21_tmp[12]; + float* fYec21 = &fYec21_tmp[4]; + float fZec69[8]; + float fRec58_tmp[12]; + float* fRec58 = &fRec58_tmp[4]; + float fRec25_tmp[12]; + float* fRec25 = &fRec25_tmp[4]; + float fSlow30 = (55.0f * fSlow2); + int iSlow31 = int(primes(int(fSlow30))); + float fSlow32 = (0.00100000005f * float(iSlow31)); + float fRec60_tmp[12]; + float* fRec60 = &fRec60_tmp[4]; + float fZec70[8]; + float fYec23_tmp[12]; + float* fYec23 = &fYec23_tmp[4]; + float fZec71[8]; + float fRec23_tmp[12]; + float* fRec23 = &fRec23_tmp[4]; + float fRec21_tmp[12]; + float* fRec21 = &fRec21_tmp[4]; + int iSlow33 = int(primes(int((fSlow30 + 10.0f)))); + float fSlow34 = (0.00100000005f * float(iSlow33)); + float fRec62_tmp[12]; + float* fRec62 = &fRec62_tmp[4]; + float fZec72[8]; + float fYec25_tmp[12]; + float* fYec25 = &fYec25_tmp[4]; + float fZec73[8]; + float fRec61_tmp[12]; + float* fRec61 = &fRec61_tmp[4]; + float fRec22_tmp[12]; + float* fRec22 = &fRec22_tmp[4]; + float fSlow35 = (42.0f * fSlow2); + int iSlow36 = int(primes(int(fSlow35))); + float fSlow37 = (0.00100000005f * float(iSlow36)); + float fRec63_tmp[12]; + float* fRec63 = &fRec63_tmp[4]; + float fZec74[8]; + float fYec27_tmp[12]; + float* fYec27 = &fYec27_tmp[4]; + float fZec75[8]; + float fRec20_tmp[12]; + float* fRec20 = &fRec20_tmp[4]; + float fRec18_tmp[12]; + float* fRec18 = &fRec18_tmp[4]; + int iSlow38 = int(primes(int((fSlow35 + 10.0f)))); + float fSlow39 = (0.00100000005f * float(iSlow38)); + float fRec65_tmp[12]; + float* fRec65 = &fRec65_tmp[4]; + float fZec76[8]; + float fYec29_tmp[12]; + float* fYec29 = &fYec29_tmp[4]; + float fZec77[8]; + float fRec64_tmp[12]; + float* fRec64 = &fRec64_tmp[4]; + float fRec19_tmp[12]; + float* fRec19 = &fRec19_tmp[4]; + float fSlow40 = (29.0f * fSlow2); + int iSlow41 = int(primes(int(fSlow40))); + float fSlow42 = (0.00100000005f * float(iSlow41)); + float fRec66_tmp[12]; + float* fRec66 = &fRec66_tmp[4]; + float fZec78[8]; + float fYec31_tmp[12]; + float* fYec31 = &fYec31_tmp[4]; + float fZec79[8]; + float fRec17_tmp[12]; + float* fRec17 = &fRec17_tmp[4]; + float fRec15_tmp[12]; + float* fRec15 = &fRec15_tmp[4]; + int iSlow43 = int(primes(int((fSlow40 + 10.0f)))); + float fSlow44 = (0.00100000005f * float(iSlow43)); + float fRec68_tmp[12]; + float* fRec68 = &fRec68_tmp[4]; + float fZec80[8]; + float fYec33_tmp[12]; + float* fYec33 = &fYec33_tmp[4]; + float fZec81[8]; + float fRec67_tmp[12]; + float* fRec67 = &fRec67_tmp[4]; + float fRec16_tmp[12]; + float* fRec16 = &fRec16_tmp[4]; + float fSlow45 = (87.0f * fSlow2); + int iSlow46 = int(primes(int(fSlow45))); + float fSlow47 = (9.99999975e-05f * float(iSlow46)); + float fRec69_tmp[12]; + float* fRec69 = &fRec69_tmp[4]; + float fZec82[8]; + float fZec83[8]; + float fZec84[8]; + float fZec85[8]; + float fZec86[8]; + float fYec35_tmp[12]; + float* fYec35 = &fYec35_tmp[4]; + float fZec87[8]; + float fRec14_tmp[12]; + float* fRec14 = &fRec14_tmp[4]; + float fRec12_tmp[12]; + float* fRec12 = &fRec12_tmp[4]; + int iSlow48 = int(primes(int((fSlow45 + 10.0f)))); + float fSlow49 = (9.99999975e-05f * float(iSlow48)); + float fRec71_tmp[12]; + float* fRec71 = &fRec71_tmp[4]; + float fZec88[8]; + float fZec89[8]; + float fZec90[8]; + float fZec91[8]; + float fZec92[8]; + float fYec37_tmp[12]; + float* fYec37 = &fYec37_tmp[4]; + float fZec93[8]; + float fRec70_tmp[12]; + float* fRec70 = &fRec70_tmp[4]; + float fRec13_tmp[12]; + float* fRec13 = &fRec13_tmp[4]; + float fSlow50 = (74.0f * fSlow2); + int iSlow51 = int(primes(int(fSlow50))); + float fSlow52 = (0.00100000005f * float(iSlow51)); + float fRec72_tmp[12]; + float* fRec72 = &fRec72_tmp[4]; + float fZec94[8]; + float fYec39_tmp[12]; + float* fYec39 = &fYec39_tmp[4]; + float fZec95[8]; + float fRec11_tmp[12]; + float* fRec11 = &fRec11_tmp[4]; + float fRec9_tmp[12]; + float* fRec9 = &fRec9_tmp[4]; + int iSlow53 = int(primes(int((fSlow50 + 10.0f)))); + float fSlow54 = (0.00100000005f * float(iSlow53)); + float fRec74_tmp[12]; + float* fRec74 = &fRec74_tmp[4]; + float fZec96[8]; + float fYec41_tmp[12]; + float* fYec41 = &fYec41_tmp[4]; + float fZec97[8]; + float fRec73_tmp[12]; + float* fRec73 = &fRec73_tmp[4]; + float fRec10_tmp[12]; + float* fRec10 = &fRec10_tmp[4]; + float fSlow55 = (61.0f * fSlow2); + int iSlow56 = int(primes(int(fSlow55))); + float fSlow57 = (0.00100000005f * float(iSlow56)); + float fRec75_tmp[12]; + float* fRec75 = &fRec75_tmp[4]; + float fZec98[8]; + float fYec43_tmp[12]; + float* fYec43 = &fYec43_tmp[4]; + float fZec99[8]; + float fRec8_tmp[12]; + float* fRec8 = &fRec8_tmp[4]; + float fRec6_tmp[12]; + float* fRec6 = &fRec6_tmp[4]; + int iSlow58 = int(primes(int((fSlow55 + 10.0f)))); + float fSlow59 = (0.00100000005f * float(iSlow58)); + float fRec77_tmp[12]; + float* fRec77 = &fRec77_tmp[4]; + float fZec100[8]; + float fYec45_tmp[12]; + float* fYec45 = &fYec45_tmp[4]; + float fZec101[8]; + float fRec76_tmp[12]; + float* fRec76 = &fRec76_tmp[4]; + float fRec7_tmp[12]; + float* fRec7 = &fRec7_tmp[4]; + float fSlow60 = (48.0f * fSlow2); + int iSlow61 = int(primes(int(fSlow60))); + float fSlow62 = (0.00100000005f * float(iSlow61)); + float fRec78_tmp[12]; + float* fRec78 = &fRec78_tmp[4]; + float fZec102[8]; + float fYec47_tmp[12]; + float* fYec47 = &fYec47_tmp[4]; + float fZec103[8]; + float fRec5_tmp[12]; + float* fRec5 = &fRec5_tmp[4]; + float fRec3_tmp[12]; + float* fRec3 = &fRec3_tmp[4]; + int iSlow63 = int(primes(int((fSlow60 + 10.0f)))); + float fSlow64 = (0.00100000005f * float(iSlow63)); + float fRec80_tmp[12]; + float* fRec80 = &fRec80_tmp[4]; + float fZec104[8]; + float fYec49_tmp[12]; + float* fYec49 = &fYec49_tmp[4]; + float fZec105[8]; + float fRec79_tmp[12]; + float* fRec79 = &fRec79_tmp[4]; + float fRec4_tmp[12]; + float* fRec4 = &fRec4_tmp[4]; + float fSlow65 = float(fHslider6); + float fVec5_tmp[12]; + float* fVec5 = &fVec5_tmp[4]; + float fZec106[8]; + float fZec107[8]; + float fRec2_tmp[12]; + float* fRec2 = &fRec2_tmp[4]; + float fRec81_tmp[12]; + float* fRec81 = &fRec81_tmp[4]; + int vindex = 0; + /* Main loop */ + for (vindex = 0; (vindex <= (count - 8)); vindex = (vindex + 8)) { + FAUSTFLOAT* input0 = &input0_ptr[vindex]; + FAUSTFLOAT* input1 = &input1_ptr[vindex]; + FAUSTFLOAT* output0 = &output0_ptr[vindex]; + FAUSTFLOAT* output1 = &output1_ptr[vindex]; + int vsize = 8; + /* Vectorizable loop 0 */ + /* Pre code */ + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fVec0_tmp[j8] = fVec0_perm[j8]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec0[i] = fSlow1; + + } + /* Post code */ + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fVec0_perm[j9] = fVec0_tmp[(vsize + j9)]; + + } + /* Vectorizable loop 1 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = (fConst1 * (fSlow1 + fVec0[(i - 1)])); + + } + /* Vectorizable loop 2 */ + /* Pre code */ + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + iVec1_tmp[j12] = iVec1_perm[j12]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iVec1[i] = 1; + + } + /* Post code */ + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + iVec1_perm[j13] = iVec1_tmp[(vsize + j13)]; + + } + /* Vectorizable loop 3 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec2[i] = std::sin(fZec1[i]); + + } + /* Vectorizable loop 4 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec3[i] = std::cos(fZec1[i]); + + } + /* Vectorizable loop 5 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec4[i] = (1 - iVec1[(i - 1)]); + + } + /* Vectorizable loop 6 */ + /* Pre code */ + for (int j22 = 0; (j22 < 4); j22 = (j22 + 1)) { + fVec4_tmp[j22] = fVec4_perm[j22]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec4[i] = fSlow8; + + } + /* Post code */ + for (int j23 = 0; (j23 < 4); j23 = (j23 + 1)) { + fVec4_perm[j23] = fVec4_tmp[(vsize + j23)]; + + } + /* Recursive loop 7 */ + /* Pre code */ + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec43_tmp[j10] = fRec43_perm[j10]; + + } + for (int j14 = 0; (j14 < 4); j14 = (j14 + 1)) { + fRec44_tmp[j14] = fRec44_perm[j14]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec43[i] = ((fRec44[(i - 1)] * fZec2[i]) + (fRec43[(i - 1)] * fZec3[i])); + fRec44[i] = ((float(iZec4[i]) + (fRec44[(i - 1)] * fZec3[i])) - (fRec43[(i - 1)] * fZec2[i])); + + } + /* Post code */ + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec43_perm[j11] = fRec43_tmp[(vsize + j11)]; + + } + for (int j15 = 0; (j15 < 4); j15 = (j15 + 1)) { + fRec44_perm[j15] = fRec44_tmp[(vsize + j15)]; + + } + /* Vectorizable loop 8 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec9[i] = (fSlow8 + fVec4[(i - 1)]); + + } + /* Vectorizable loop 9 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec10[i] = (fConst2 * ((fRec43[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 10 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec28[i] = (fConst2 * ((fRec44[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 11 */ + /* Pre code */ + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fVec2_tmp[j18] = fVec2_perm[j18]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec2[i] = fSlow6; + + } + /* Post code */ + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fVec2_perm[j19] = fVec2_tmp[(vsize + j19)]; + + } + /* Vectorizable loop 12 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec11[i] = (fZec10[i] + 8.50000477f); + + } + /* Vectorizable loop 13 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec29[i] = (fZec28[i] + 8.50000477f); + + } + /* Recursive loop 14 */ + /* Pre code */ + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fRec45_tmp[j16] = fRec45_perm[j16]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec45[i] = (fSlow5 + (0.999899983f * (fRec45[(i - 1)] + float((iSlow4 * iZec4[i]))))); + + } + /* Post code */ + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fRec45_perm[j17] = fRec45_tmp[(vsize + j17)]; + + } + /* Vectorizable loop 15 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec5[i] = (0.5f * (fSlow6 + fVec2[(i - 1)])); + + } + /* Vectorizable loop 16 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec13[i] = std::floor(fZec11[i]); + + } + /* Recursive loop 17 */ + /* Pre code */ + for (int j30 = 0; (j30 < 4); j30 = (j30 + 1)) { + fRec47_tmp[j30] = fRec47_perm[j30]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec47[i] = (fSlow10 + (0.999899983f * (fRec47[(i - 1)] + float((iSlow9 * iZec4[i]))))); + + } + /* Post code */ + for (int j31 = 0; (j31 < 4); j31 = (j31 + 1)) { + fRec47_perm[j31] = fRec47_tmp[(vsize + j31)]; + + } + /* Vectorizable loop 18 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec31[i] = std::floor(fZec29[i]); + + } + /* Recursive loop 19 */ + /* Pre code */ + for (int j38 = 0; (j38 < 4); j38 = (j38 + 1)) { + fRec48_tmp[j38] = fRec48_perm[j38]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec48[i] = (fSlow13 + (0.999000013f * (fRec48[(i - 1)] + float((iSlow12 * iZec4[i]))))); + + } + /* Post code */ + for (int j39 = 0; (j39 < 4); j39 = (j39 + 1)) { + fRec48_perm[j39] = fRec48_tmp[(vsize + j39)]; + + } + /* Recursive loop 20 */ + /* Pre code */ + for (int j46 = 0; (j46 < 4); j46 = (j46 + 1)) { + fRec50_tmp[j46] = fRec50_perm[j46]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec50[i] = (fSlow15 + (0.999000013f * (fRec50[(i - 1)] + float((iSlow14 * iZec4[i]))))); + + } + /* Post code */ + for (int j47 = 0; (j47 < 4); j47 = (j47 + 1)) { + fRec50_perm[j47] = fRec50_tmp[(vsize + j47)]; + + } + /* Recursive loop 21 */ + /* Pre code */ + for (int j54 = 0; (j54 < 4); j54 = (j54 + 1)) { + fRec51_tmp[j54] = fRec51_perm[j54]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec51[i] = (fSlow18 + (0.999000013f * (fRec51[(i - 1)] + float((iSlow17 * iZec4[i]))))); + + } + /* Post code */ + for (int j55 = 0; (j55 < 4); j55 = (j55 + 1)) { + fRec51_perm[j55] = fRec51_tmp[(vsize + j55)]; + + } + /* Recursive loop 22 */ + /* Pre code */ + for (int j62 = 0; (j62 < 4); j62 = (j62 + 1)) { + fRec53_tmp[j62] = fRec53_perm[j62]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec53[i] = (fSlow20 + (0.999000013f * (fRec53[(i - 1)] + float((iSlow19 * iZec4[i]))))); + + } + /* Post code */ + for (int j63 = 0; (j63 < 4); j63 = (j63 + 1)) { + fRec53_perm[j63] = fRec53_tmp[(vsize + j63)]; + + } + /* Recursive loop 23 */ + /* Pre code */ + for (int j70 = 0; (j70 < 4); j70 = (j70 + 1)) { + fRec54_tmp[j70] = fRec54_perm[j70]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec54[i] = (fSlow22 + (0.999000013f * (fRec54[(i - 1)] + float((iSlow21 * iZec4[i]))))); + + } + /* Post code */ + for (int j71 = 0; (j71 < 4); j71 = (j71 + 1)) { + fRec54_perm[j71] = fRec54_tmp[(vsize + j71)]; + + } + /* Recursive loop 24 */ + /* Pre code */ + for (int j78 = 0; (j78 < 4); j78 = (j78 + 1)) { + fRec56_tmp[j78] = fRec56_perm[j78]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec56[i] = (fSlow24 + (0.999000013f * (fRec56[(i - 1)] + float((iSlow23 * iZec4[i]))))); + + } + /* Post code */ + for (int j79 = 0; (j79 < 4); j79 = (j79 + 1)) { + fRec56_perm[j79] = fRec56_tmp[(vsize + j79)]; + + } + /* Recursive loop 25 */ + /* Pre code */ + for (int j86 = 0; (j86 < 4); j86 = (j86 + 1)) { + fRec57_tmp[j86] = fRec57_perm[j86]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec57[i] = (fSlow27 + (0.999899983f * (fRec57[(i - 1)] + float((iSlow26 * iZec4[i]))))); + + } + /* Post code */ + for (int j87 = 0; (j87 < 4); j87 = (j87 + 1)) { + fRec57_perm[j87] = fRec57_tmp[(vsize + j87)]; + + } + /* Recursive loop 26 */ + /* Pre code */ + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fRec59_tmp[j94] = fRec59_perm[j94]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec59[i] = (fSlow29 + (0.999899983f * (fRec59[(i - 1)] + float((iSlow28 * iZec4[i]))))); + + } + /* Post code */ + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fRec59_perm[j95] = fRec59_tmp[(vsize + j95)]; + + } + /* Recursive loop 27 */ + /* Pre code */ + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec60_tmp[j102] = fRec60_perm[j102]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec60[i] = (fSlow32 + (0.999000013f * (fRec60[(i - 1)] + float((iSlow31 * iZec4[i]))))); + + } + /* Post code */ + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec60_perm[j103] = fRec60_tmp[(vsize + j103)]; + + } + /* Recursive loop 28 */ + /* Pre code */ + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec62_tmp[j110] = fRec62_perm[j110]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec62[i] = (fSlow34 + (0.999000013f * (fRec62[(i - 1)] + float((iSlow33 * iZec4[i]))))); + + } + /* Post code */ + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec62_perm[j111] = fRec62_tmp[(vsize + j111)]; + + } + /* Recursive loop 29 */ + /* Pre code */ + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec63_tmp[j118] = fRec63_perm[j118]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec63[i] = (fSlow37 + (0.999000013f * (fRec63[(i - 1)] + float((iSlow36 * iZec4[i]))))); + + } + /* Post code */ + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec63_perm[j119] = fRec63_tmp[(vsize + j119)]; + + } + /* Recursive loop 30 */ + /* Pre code */ + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec65_tmp[j126] = fRec65_perm[j126]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec65[i] = (fSlow39 + (0.999000013f * (fRec65[(i - 1)] + float((iSlow38 * iZec4[i]))))); + + } + /* Post code */ + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec65_perm[j127] = fRec65_tmp[(vsize + j127)]; + + } + /* Recursive loop 31 */ + /* Pre code */ + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec66_tmp[j134] = fRec66_perm[j134]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec66[i] = (fSlow42 + (0.999000013f * (fRec66[(i - 1)] + float((iSlow41 * iZec4[i]))))); + + } + /* Post code */ + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec66_perm[j135] = fRec66_tmp[(vsize + j135)]; + + } + /* Recursive loop 32 */ + /* Pre code */ + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec68_tmp[j142] = fRec68_perm[j142]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec68[i] = (fSlow44 + (0.999000013f * (fRec68[(i - 1)] + float((iSlow43 * iZec4[i]))))); + + } + /* Post code */ + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec68_perm[j143] = fRec68_tmp[(vsize + j143)]; + + } + /* Recursive loop 33 */ + /* Pre code */ + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec69_tmp[j150] = fRec69_perm[j150]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec69[i] = (fSlow47 + (0.999899983f * (fRec69[(i - 1)] + float((iSlow46 * iZec4[i]))))); + + } + /* Post code */ + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec69_perm[j151] = fRec69_tmp[(vsize + j151)]; + + } + /* Recursive loop 34 */ + /* Pre code */ + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec71_tmp[j158] = fRec71_perm[j158]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec71[i] = (fSlow49 + (0.999899983f * (fRec71[(i - 1)] + float((iSlow48 * iZec4[i]))))); + + } + /* Post code */ + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec71_perm[j159] = fRec71_tmp[(vsize + j159)]; + + } + /* Recursive loop 35 */ + /* Pre code */ + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec72_tmp[j166] = fRec72_perm[j166]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec72[i] = (fSlow52 + (0.999000013f * (fRec72[(i - 1)] + float((iSlow51 * iZec4[i]))))); + + } + /* Post code */ + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec72_perm[j167] = fRec72_tmp[(vsize + j167)]; + + } + /* Recursive loop 36 */ + /* Pre code */ + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec74_tmp[j174] = fRec74_perm[j174]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec74[i] = (fSlow54 + (0.999000013f * (fRec74[(i - 1)] + float((iSlow53 * iZec4[i]))))); + + } + /* Post code */ + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec74_perm[j175] = fRec74_tmp[(vsize + j175)]; + + } + /* Recursive loop 37 */ + /* Pre code */ + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec75_tmp[j182] = fRec75_perm[j182]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec75[i] = (fSlow57 + (0.999000013f * (fRec75[(i - 1)] + float((iSlow56 * iZec4[i]))))); + + } + /* Post code */ + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec75_perm[j183] = fRec75_tmp[(vsize + j183)]; + + } + /* Recursive loop 38 */ + /* Pre code */ + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec77_tmp[j190] = fRec77_perm[j190]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec77[i] = (fSlow59 + (0.999000013f * (fRec77[(i - 1)] + float((iSlow58 * iZec4[i]))))); + + } + /* Post code */ + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec77_perm[j191] = fRec77_tmp[(vsize + j191)]; + + } + /* Recursive loop 39 */ + /* Pre code */ + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fRec78_tmp[j198] = fRec78_perm[j198]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec78[i] = (fSlow62 + (0.999000013f * (fRec78[(i - 1)] + float((iSlow61 * iZec4[i]))))); + + } + /* Post code */ + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fRec78_perm[j199] = fRec78_tmp[(vsize + j199)]; + + } + /* Recursive loop 40 */ + /* Pre code */ + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec80_tmp[j206] = fRec80_perm[j206]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec80[i] = (fSlow64 + (0.999000013f * (fRec80[(i - 1)] + float((iSlow63 * iZec4[i]))))); + + } + /* Post code */ + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec80_perm[j207] = fRec80_tmp[(vsize + j207)]; + + } + /* Vectorizable loop 41 */ + /* Pre code */ + for (int j214 = 0; (j214 < 4); j214 = (j214 + 1)) { + fVec5_tmp[j214] = fVec5_perm[j214]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec5[i] = fSlow65; + + } + /* Post code */ + for (int j215 = 0; (j215 < 4); j215 = (j215 + 1)) { + fVec5_perm[j215] = fVec5_tmp[(vsize + j215)]; + + } + /* Recursive loop 42 */ + /* Pre code */ + for (int j0 = 0; (j0 < 4); j0 = (j0 + 1)) { + fRec39_tmp[j0] = fRec39_perm[j0]; + + } + for (int j2 = 0; (j2 < 4); j2 = (j2 + 1)) { + fRec40_tmp[j2] = fRec40_perm[j2]; + + } + for (int j4 = 0; (j4 < 4); j4 = (j4 + 1)) { + fRec41_tmp[j4] = fRec41_perm[j4]; + + } + for (int j6 = 0; (j6 < 4); j6 = (j6 + 1)) { + fRec42_tmp[j6] = fRec42_perm[j6]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec0[i] = ((fRec39[(i - 1)] != 0.0f)?(((fRec40[(i - 1)] > 0.0f) & (fRec40[(i - 1)] < 1.0f))?fRec39[(i - 1)]:0.0f):(((fRec40[(i - 1)] == 0.0f) & (fSlow0 != fRec41[(i - 1)]))?4.53514731e-05f:(((fRec40[(i - 1)] == 1.0f) & (fSlow0 != fRec42[(i - 1)]))?-4.53514731e-05f:0.0f))); + fRec39[i] = fZec0[i]; + fRec40[i] = std::max(0.0f, std::min(1.0f, (fRec40[(i - 1)] + fZec0[i]))); + fRec41[i] = (((fRec40[(i - 1)] >= 1.0f) & (fRec42[(i - 1)] != fSlow0))?fSlow0:fRec41[(i - 1)]); + fRec42[i] = (((fRec40[(i - 1)] <= 0.0f) & (fRec41[(i - 1)] != fSlow0))?fSlow0:fRec42[(i - 1)]); + + } + /* Post code */ + for (int j1 = 0; (j1 < 4); j1 = (j1 + 1)) { + fRec39_perm[j1] = fRec39_tmp[(vsize + j1)]; + + } + for (int j3 = 0; (j3 < 4); j3 = (j3 + 1)) { + fRec40_perm[j3] = fRec40_tmp[(vsize + j3)]; + + } + for (int j5 = 0; (j5 < 4); j5 = (j5 + 1)) { + fRec41_perm[j5] = fRec41_tmp[(vsize + j5)]; + + } + for (int j7 = 0; (j7 < 4); j7 = (j7 + 1)) { + fRec42_perm[j7] = fRec42_tmp[(vsize + j7)]; + + } + /* Vectorizable loop 43 */ + /* Pre code */ + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fVec3_tmp[j20] = fVec3_perm[j20]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec3[i] = fSlow7; + + } + /* Post code */ + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fVec3_perm[j21] = fVec3_tmp[(vsize + j21)]; + + } + /* Vectorizable loop 44 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec14[i] = (fZec10[i] + (9.0f - fZec13[i])); + + } + /* Vectorizable loop 45 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec15[i] = (fZec10[i] + (8.0f - fZec13[i])); + + } + /* Vectorizable loop 46 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec26[i] = (fRec45[i] + -1.49998999f); + + } + /* Vectorizable loop 47 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec32[i] = (fZec28[i] + (9.0f - fZec31[i])); + + } + /* Vectorizable loop 48 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec33[i] = (fZec28[i] + (8.0f - fZec31[i])); + + } + /* Vectorizable loop 49 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec41[i] = (fRec47[i] + -1.49998999f); + + } + /* Vectorizable loop 50 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec43[i] = (fRec48[i] + -1.49998999f); + + } + /* Vectorizable loop 51 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (fRec50[i] + -1.49998999f); + + } + /* Vectorizable loop 52 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (fRec51[i] + -1.49998999f); + + } + /* Vectorizable loop 53 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (fRec53[i] + -1.49998999f); + + } + /* Vectorizable loop 54 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (fRec54[i] + -1.49998999f); + + } + /* Vectorizable loop 55 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec53[i] = (fRec56[i] + -1.49998999f); + + } + /* Vectorizable loop 56 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - fZec5[i]); + + } + /* Vectorizable loop 57 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (fRec57[i] + -1.49998999f); + + } + /* Vectorizable loop 58 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec68[i] = (fRec59[i] + -1.49998999f); + + } + /* Vectorizable loop 59 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec70[i] = (fRec60[i] + -1.49998999f); + + } + /* Vectorizable loop 60 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec72[i] = (fRec62[i] + -1.49998999f); + + } + /* Vectorizable loop 61 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fRec63[i] + -1.49998999f); + + } + /* Vectorizable loop 62 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec76[i] = (fRec65[i] + -1.49998999f); + + } + /* Vectorizable loop 63 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec78[i] = (fRec66[i] + -1.49998999f); + + } + /* Vectorizable loop 64 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec80[i] = (fRec68[i] + -1.49998999f); + + } + /* Vectorizable loop 65 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec86[i] = (fRec69[i] + -1.49998999f); + + } + /* Vectorizable loop 66 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec92[i] = (fRec71[i] + -1.49998999f); + + } + /* Vectorizable loop 67 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec72[i] + -1.49998999f); + + } + /* Vectorizable loop 68 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec96[i] = (fRec74[i] + -1.49998999f); + + } + /* Vectorizable loop 69 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec98[i] = (fRec75[i] + -1.49998999f); + + } + /* Vectorizable loop 70 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = (fRec77[i] + -1.49998999f); + + } + /* Vectorizable loop 71 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec102[i] = (fRec78[i] + -1.49998999f); + + } + /* Vectorizable loop 72 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fRec80[i] + -1.49998999f); + + } + /* Vectorizable loop 73 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec106[i] = (fSlow65 + fVec5[(i - 1)]); + + } + /* Vectorizable loop 74 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec6[i] = std::cos(fZec5[i]); + + } + /* Vectorizable loop 75 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec7[i] = (fSlow7 + fVec3[(i - 1)]); + + } + /* Vectorizable loop 76 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec8[i] = (1.0f - fRec40[i]); + + } + /* Vectorizable loop 77 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec12[i] = int(fZec11[i]); + + } + /* Vectorizable loop 78 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec16[i] = (fZec10[i] + (7.0f - fZec13[i])); + + } + /* Vectorizable loop 79 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec17[i] = (fZec10[i] + (6.0f - fZec13[i])); + + } + /* Vectorizable loop 80 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec18[i] = (fZec14[i] * fZec15[i]); + + } + /* Vectorizable loop 81 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec22[i] = std::sin(fZec5[i]); + + } + /* Vectorizable loop 82 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec19[i] = int(std::min(65536.0f, std::max(0.0f, fRec41[i]))); + + } + /* Vectorizable loop 83 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec20[i] = int(std::min(65536.0f, std::max(0.0f, fRec42[i]))); + + } + /* Vectorizable loop 84 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec36[i] = (fZec32[i] * fZec33[i]); + + } + /* Vectorizable loop 85 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec27[i] = std::floor(fZec26[i]); + + } + /* Vectorizable loop 86 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec30[i] = int(fZec29[i]); + + } + /* Vectorizable loop 87 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec34[i] = (fZec28[i] + (7.0f - fZec31[i])); + + } + /* Vectorizable loop 88 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec35[i] = (fZec28[i] + (6.0f - fZec31[i])); + + } + /* Vectorizable loop 89 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec42[i] = std::floor(fZec41[i]); + + } + /* Vectorizable loop 90 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec44[i] = std::floor(fZec43[i]); + + } + /* Vectorizable loop 91 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec46[i] = std::floor(fZec45[i]); + + } + /* Vectorizable loop 92 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec48[i] = std::floor(fZec47[i]); + + } + /* Vectorizable loop 93 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec50[i] = std::floor(fZec49[i]); + + } + /* Vectorizable loop 94 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = std::floor(fZec51[i]); + + } + /* Vectorizable loop 95 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = std::floor(fZec53[i]); + + } + /* Vectorizable loop 96 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = std::cos(fZec55[i]); + + } + /* Vectorizable loop 97 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = std::sin(fZec55[i]); + + } + /* Vectorizable loop 98 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = std::floor(fZec62[i]); + + } + /* Vectorizable loop 99 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec69[i] = std::floor(fZec68[i]); + + } + /* Vectorizable loop 100 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec71[i] = std::floor(fZec70[i]); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = std::floor(fZec72[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = std::floor(fZec74[i]); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec79[i] = std::floor(fZec78[i]); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec87[i] = std::floor(fZec86[i]); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = std::floor(fZec92[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec95[i] = std::floor(fZec94[i]); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec97[i] = std::floor(fZec96[i]); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec99[i] = std::floor(fZec98[i]); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec101[i] = std::floor(fZec100[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec103[i] = std::floor(fZec102[i]); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = std::floor(fZec104[i]); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec107[i] = (1.0f - (0.5f * fZec106[i])); + + } + /* Recursive loop 115 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 131071); + fYec1_idx = ((fYec1_idx + fYec1_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec2_tmp[j24] = fYec2_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec38_tmp[j26] = fRec38_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec36_tmp[j28] = fRec36_perm[j28]; + + } + fYec3_idx = ((fYec3_idx + fYec3_idx_save) & 131071); + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec5_tmp[j32] = fYec5_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec46_tmp[j34] = fRec46_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec37_tmp[j36] = fRec37_perm[j36]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec7_tmp[j40] = fYec7_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec35_tmp[j42] = fRec35_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec33_tmp[j44] = fRec33_perm[j44]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec9_tmp[j48] = fYec9_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec49_tmp[j50] = fRec49_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec34_tmp[j52] = fRec34_perm[j52]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec11_tmp[j56] = fYec11_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec32_tmp[j58] = fRec32_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec30_tmp[j60] = fRec30_perm[j60]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec13_tmp[j64] = fYec13_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec52_tmp[j66] = fRec52_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec31_tmp[j68] = fRec31_perm[j68]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec15_tmp[j72] = fYec15_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec29_tmp[j74] = fRec29_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec27_tmp[j76] = fRec27_perm[j76]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec17_tmp[j80] = fYec17_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec55_tmp[j82] = fRec55_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec28_tmp[j84] = fRec28_perm[j84]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec19_tmp[j88] = fYec19_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec26_tmp[j90] = fRec26_perm[j90]; + + } + for (int j92 = 0; (j92 < 4); j92 = (j92 + 1)) { + fRec24_tmp[j92] = fRec24_perm[j92]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 16383); + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fYec21_tmp[j96] = fYec21_perm[j96]; + + } + for (int j98 = 0; (j98 < 4); j98 = (j98 + 1)) { + fRec58_tmp[j98] = fRec58_perm[j98]; + + } + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fRec25_tmp[j100] = fRec25_perm[j100]; + + } + fYec22_idx = ((fYec22_idx + fYec22_idx_save) & 16383); + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fYec23_tmp[j104] = fYec23_perm[j104]; + + } + for (int j106 = 0; (j106 < 4); j106 = (j106 + 1)) { + fRec23_tmp[j106] = fRec23_perm[j106]; + + } + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fRec21_tmp[j108] = fRec21_perm[j108]; + + } + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fYec25_tmp[j112] = fYec25_perm[j112]; + + } + for (int j114 = 0; (j114 < 4); j114 = (j114 + 1)) { + fRec61_tmp[j114] = fRec61_perm[j114]; + + } + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fRec22_tmp[j116] = fRec22_perm[j116]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fYec27_tmp[j120] = fYec27_perm[j120]; + + } + for (int j122 = 0; (j122 < 4); j122 = (j122 + 1)) { + fRec20_tmp[j122] = fRec20_perm[j122]; + + } + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fRec18_tmp[j124] = fRec18_perm[j124]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fYec29_tmp[j128] = fYec29_perm[j128]; + + } + for (int j130 = 0; (j130 < 4); j130 = (j130 + 1)) { + fRec64_tmp[j130] = fRec64_perm[j130]; + + } + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fRec19_tmp[j132] = fRec19_perm[j132]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fYec31_tmp[j136] = fYec31_perm[j136]; + + } + for (int j138 = 0; (j138 < 4); j138 = (j138 + 1)) { + fRec17_tmp[j138] = fRec17_perm[j138]; + + } + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fRec15_tmp[j140] = fRec15_perm[j140]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fYec33_tmp[j144] = fYec33_perm[j144]; + + } + for (int j146 = 0; (j146 < 4); j146 = (j146 + 1)) { + fRec67_tmp[j146] = fRec67_perm[j146]; + + } + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fRec16_tmp[j148] = fRec16_perm[j148]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fYec35_tmp[j152] = fYec35_perm[j152]; + + } + for (int j154 = 0; (j154 < 4); j154 = (j154 + 1)) { + fRec14_tmp[j154] = fRec14_perm[j154]; + + } + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fRec12_tmp[j156] = fRec12_perm[j156]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fYec37_tmp[j160] = fYec37_perm[j160]; + + } + for (int j162 = 0; (j162 < 4); j162 = (j162 + 1)) { + fRec70_tmp[j162] = fRec70_perm[j162]; + + } + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fRec13_tmp[j164] = fRec13_perm[j164]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fYec39_tmp[j168] = fYec39_perm[j168]; + + } + for (int j170 = 0; (j170 < 4); j170 = (j170 + 1)) { + fRec11_tmp[j170] = fRec11_perm[j170]; + + } + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fRec9_tmp[j172] = fRec9_perm[j172]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fYec41_tmp[j176] = fYec41_perm[j176]; + + } + for (int j178 = 0; (j178 < 4); j178 = (j178 + 1)) { + fRec73_tmp[j178] = fRec73_perm[j178]; + + } + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fRec10_tmp[j180] = fRec10_perm[j180]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fYec43_tmp[j184] = fYec43_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec8_tmp[j186] = fRec8_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec6_tmp[j188] = fRec6_perm[j188]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fYec45_tmp[j192] = fYec45_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec76_tmp[j194] = fRec76_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec7_tmp[j196] = fRec7_perm[j196]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fYec47_tmp[j200] = fYec47_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec5_tmp[j202] = fRec5_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec3_tmp[j204] = fRec3_perm[j204]; + + } + fYec48_idx = ((fYec48_idx + fYec48_idx_save) & 16383); + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fYec49_tmp[j208] = fYec49_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec79_tmp[j210] = fRec79_perm[j210]; + + } + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec4_tmp[j212] = fRec4_perm[j212]; + + } + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fRec2_tmp[j216] = fRec2_perm[j216]; + + } + fRec0_idx = ((fRec0_idx + fRec0_idx_save) & 1023); + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec81_tmp[j218] = fRec81_perm[j218]; + + } + fRec1_idx = ((fRec1_idx + fRec1_idx_save) & 1023); + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fYec0[((i + fYec0_idx) & 131071)] = (((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, iZec12[i])) + 1)) & 1023)] * (0.0f - fZec14[i])) * (0.0f - (0.5f * fZec15[i]))) * (0.0f - (0.333333343f * fZec16[i]))) * (0.0f - (0.25f * fZec17[i]))) + ((fZec10[i] + (10.0f - fZec13[i])) * ((((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 1))) + 1)) & 1023)] * (0.0f - fZec15[i])) * (0.0f - (0.5f * fZec16[i]))) * (0.0f - (0.333333343f * fZec17[i]))) + (0.5f * (((fZec14[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec16[i])) * (0.0f - (0.5f * fZec17[i]))))) + (0.166666672f * ((fZec18[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec17[i])))) + (0.0416666679f * ((fZec18[i] * fZec16[i]) * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 4))) + 1)) & 1023)]))))); + fZec21[i] = ((0.5f * (fZec7[i] * ((fZec8[i] * fYec0[(((i + fYec0_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec0[(((i + fYec0_idx) - iZec20[i]) & 131071)])))) + float(input1[i])); + fZec23[i] = ((fZec6[i] * fZec21[i]) - (fZec22[i] * fRec28[(i - 1)])); + fZec24[i] = ((fZec6[i] * fZec23[i]) - (fZec22[i] * fRec31[(i - 1)])); + fZec25[i] = ((fZec6[i] * fZec24[i]) - (fZec22[i] * fRec34[(i - 1)])); + fYec1[((i + fYec1_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec25[i]) - (fZec22[i] * fRec37[(i - 1)]))); + fYec2[i] = fYec1[(((i + fYec1_idx) - std::min(8192, std::max(0, int(fZec26[i])))) & 16383)]; + fRec38[i] = (fYec2[(i - 1)] - (((fZec27[i] + (2.0f - fRec45[i])) * (fRec38[(i - 1)] - fYec2[i])) / (fRec45[i] - fZec27[i]))); + fRec36[i] = fRec38[i]; + fYec3[((i + fYec3_idx) & 131071)] = (((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, iZec30[i])) + 1)) & 1023)] * (0.0f - fZec32[i])) * (0.0f - (0.5f * fZec33[i]))) * (0.0f - (0.333333343f * fZec34[i]))) * (0.0f - (0.25f * fZec35[i]))) + ((fZec28[i] + (10.0f - fZec31[i])) * ((((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 1))) + 1)) & 1023)] * (0.0f - fZec33[i])) * (0.0f - (0.5f * fZec34[i]))) * (0.0f - (0.333333343f * fZec35[i]))) + (0.5f * (((fZec32[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec34[i])) * (0.0f - (0.5f * fZec35[i]))))) + (0.166666672f * ((fZec36[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec35[i])))) + (0.0416666679f * ((fZec36[i] * fZec34[i]) * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 4))) + 1)) & 1023)]))))); + fZec37[i] = ((0.5f * (((fZec8[i] * fYec3[(((i + fYec3_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec3[(((i + fYec3_idx) - iZec20[i]) & 131071)])) * fZec7[i])) + float(input0[i])); + fZec38[i] = ((fZec37[i] * fZec6[i]) - (fZec22[i] * fRec27[(i - 1)])); + fZec39[i] = ((fZec6[i] * fZec38[i]) - (fZec22[i] * fRec30[(i - 1)])); + fZec40[i] = ((fZec6[i] * fZec39[i]) - (fZec22[i] * fRec33[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((fZec6[i] * fZec40[i]) - (fZec22[i] * fRec36[(i - 1)])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec41[i])))) & 16383)]; + fRec46[i] = (fYec5[(i - 1)] - (((fZec42[i] + (2.0f - fRec47[i])) * (fRec46[(i - 1)] - fYec5[i])) / (fRec47[i] - fZec42[i]))); + fRec37[i] = fRec46[i]; + fYec6[((i + fYec6_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec37[(i - 1)]) + (fZec22[i] * fZec25[i]))); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec43[i])))) & 16383)]; + fRec35[i] = (fYec7[(i - 1)] - (((fZec44[i] + (2.0f - fRec48[i])) * (fRec35[(i - 1)] - fYec7[i])) / (fRec48[i] - fZec44[i]))); + fRec33[i] = fRec35[i]; + fYec8[((i + fYec8_idx) & 16383)] = ((fRec36[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec40[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec45[i])))) & 16383)]; + fRec49[i] = (fYec9[(i - 1)] - (((fZec46[i] + (2.0f - fRec50[i])) * (fRec49[(i - 1)] - fYec9[i])) / (fRec50[i] - fZec46[i]))); + fRec34[i] = fRec49[i]; + fYec10[((i + fYec10_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec34[(i - 1)]) + (fZec22[i] * fZec24[i]))); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec47[i])))) & 16383)]; + fRec32[i] = (fYec11[(i - 1)] - (((fZec48[i] + (2.0f - fRec51[i])) * (fRec32[(i - 1)] - fYec11[i])) / (fRec51[i] - fZec48[i]))); + fRec30[i] = fRec32[i]; + fYec12[((i + fYec12_idx) & 16383)] = ((fRec33[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec39[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec49[i])))) & 16383)]; + fRec52[i] = (fYec13[(i - 1)] - (((fZec50[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec13[i])) / (fRec53[i] - fZec50[i]))); + fRec31[i] = fRec52[i]; + fYec14[((i + fYec14_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec31[(i - 1)]) + (fZec22[i] * fZec23[i]))); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec51[i])))) & 16383)]; + fRec29[i] = (fYec15[(i - 1)] - (((fZec52[i] + (2.0f - fRec54[i])) * (fRec29[(i - 1)] - fYec15[i])) / (fRec54[i] - fZec52[i]))); + fRec27[i] = fRec29[i]; + fYec16[((i + fYec16_idx) & 16383)] = ((fRec30[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec38[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec53[i])))) & 16383)]; + fRec55[i] = (fYec17[(i - 1)] - (((fZec54[i] + (2.0f - fRec56[i])) * (fRec55[(i - 1)] - fYec17[i])) / (fRec56[i] - fZec54[i]))); + fRec28[i] = fRec55[i]; + fZec57[i] = ((fZec6[i] * fRec28[(i - 1)]) + (fZec22[i] * fZec21[i])); + fZec59[i] = ((fZec56[i] * fZec57[i]) - (fZec58[i] * fRec16[(i - 1)])); + fZec60[i] = ((fZec56[i] * fZec59[i]) - (fZec58[i] * fRec19[(i - 1)])); + fZec61[i] = ((fZec56[i] * fZec60[i]) - (fZec58[i] * fRec22[(i - 1)])); + fYec18[((i + fYec18_idx) & 16383)] = (0.0f - ((fZec56[i] * fZec61[i]) - (fZec58[i] * fRec25[(i - 1)]))); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec62[i])))) & 16383)]; + fRec26[i] = (fYec19[(i - 1)] - (((fZec63[i] + (2.0f - fRec57[i])) * (fRec26[(i - 1)] - fYec19[i])) / (fRec57[i] - fZec63[i]))); + fRec24[i] = fRec26[i]; + fZec64[i] = ((fRec27[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec37[i])); + fZec65[i] = ((fZec64[i] * fZec56[i]) - (fZec58[i] * fRec15[(i - 1)])); + fZec66[i] = ((fZec56[i] * fZec65[i]) - (fZec58[i] * fRec18[(i - 1)])); + fZec67[i] = ((fZec56[i] * fZec66[i]) - (fZec58[i] * fRec21[(i - 1)])); + fYec20[((i + fYec20_idx) & 16383)] = ((fZec56[i] * fZec67[i]) - (fRec24[(i - 1)] * fZec58[i])); + fYec21[i] = fYec20[(((i + fYec20_idx) - std::min(8192, std::max(0, int(fZec68[i])))) & 16383)]; + fRec58[i] = (fYec21[(i - 1)] - (((fZec69[i] + (2.0f - fRec59[i])) * (fRec58[(i - 1)] - fYec21[i])) / (fRec59[i] - fZec69[i]))); + fRec25[i] = fRec58[i]; + fYec22[((i + fYec22_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec25[(i - 1)]) + (fZec58[i] * fZec61[i]))); + fYec23[i] = fYec22[(((i + fYec22_idx) - std::min(8192, std::max(0, int(fZec70[i])))) & 16383)]; + fRec23[i] = (fYec23[(i - 1)] - (((fZec71[i] + (2.0f - fRec60[i])) * (fRec23[(i - 1)] - fYec23[i])) / (fRec60[i] - fZec71[i]))); + fRec21[i] = fRec23[i]; + fYec24[((i + fYec24_idx) & 16383)] = ((fRec24[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec67[i])); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec72[i])))) & 16383)]; + fRec61[i] = (fYec25[(i - 1)] - (((fZec73[i] + (2.0f - fRec62[i])) * (fRec61[(i - 1)] - fYec25[i])) / (fRec62[i] - fZec73[i]))); + fRec22[i] = fRec61[i]; + fYec26[((i + fYec26_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec22[(i - 1)]) + (fZec58[i] * fZec60[i]))); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec74[i])))) & 16383)]; + fRec20[i] = (fYec27[(i - 1)] - (((fZec75[i] + (2.0f - fRec63[i])) * (fRec20[(i - 1)] - fYec27[i])) / (fRec63[i] - fZec75[i]))); + fRec18[i] = fRec20[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((fRec21[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec66[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec64[i] = (fYec29[(i - 1)] - (((fZec77[i] + (2.0f - fRec65[i])) * (fRec64[(i - 1)] - fYec29[i])) / (fRec65[i] - fZec77[i]))); + fRec19[i] = fRec64[i]; + fYec30[((i + fYec30_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec19[(i - 1)]) + (fZec58[i] * fZec59[i]))); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec78[i])))) & 16383)]; + fRec17[i] = (fYec31[(i - 1)] - (((fZec79[i] + (2.0f - fRec66[i])) * (fRec17[(i - 1)] - fYec31[i])) / (fRec66[i] - fZec79[i]))); + fRec15[i] = fRec17[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((fRec18[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec65[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec67[i] = (fYec33[(i - 1)] - (((fZec81[i] + (2.0f - fRec68[i])) * (fRec67[(i - 1)] - fYec33[i])) / (fRec68[i] - fZec81[i]))); + fRec16[i] = fRec67[i]; + fZec82[i] = ((fZec56[i] * fRec16[(i - 1)]) + (fZec58[i] * fZec57[i])); + fZec83[i] = ((fZec6[i] * fZec82[i]) - (fZec22[i] * fRec4[(i - 1)])); + fZec84[i] = ((fZec6[i] * fZec83[i]) - (fZec22[i] * fRec7[(i - 1)])); + fZec85[i] = ((fZec6[i] * fZec84[i]) - (fZec22[i] * fRec10[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec85[i]) - (fZec22[i] * fRec13[(i - 1)]))); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec86[i])))) & 16383)]; + fRec14[i] = (fYec35[(i - 1)] - (((fZec87[i] + (2.0f - fRec69[i])) * (fRec14[(i - 1)] - fYec35[i])) / (fRec69[i] - fZec87[i]))); + fRec12[i] = fRec14[i]; + fZec88[i] = ((fRec15[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec64[i])); + fZec89[i] = ((fZec6[i] * fZec88[i]) - (fZec22[i] * fRec3[(i - 1)])); + fZec90[i] = ((fZec6[i] * fZec89[i]) - (fZec22[i] * fRec6[(i - 1)])); + fZec91[i] = ((fZec6[i] * fZec90[i]) - (fZec22[i] * fRec9[(i - 1)])); + fYec36[((i + fYec36_idx) & 16383)] = ((fZec6[i] * fZec91[i]) - (fRec12[(i - 1)] * fZec22[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - std::min(8192, std::max(0, int(fZec92[i])))) & 16383)]; + fRec70[i] = (fYec37[(i - 1)] - (((fZec93[i] + (2.0f - fRec71[i])) * (fRec70[(i - 1)] - fYec37[i])) / (fRec71[i] - fZec93[i]))); + fRec13[i] = fRec70[i]; + fYec38[((i + fYec38_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec13[(i - 1)]) + (fZec22[i] * fZec85[i]))); + fYec39[i] = fYec38[(((i + fYec38_idx) - std::min(8192, std::max(0, int(fZec94[i])))) & 16383)]; + fRec11[i] = (fYec39[(i - 1)] - (((fZec95[i] + (2.0f - fRec72[i])) * (fRec11[(i - 1)] - fYec39[i])) / (fRec72[i] - fZec95[i]))); + fRec9[i] = fRec11[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((fRec12[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec91[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - std::min(8192, std::max(0, int(fZec96[i])))) & 16383)]; + fRec73[i] = (fYec41[(i - 1)] - (((fZec97[i] + (2.0f - fRec74[i])) * (fRec73[(i - 1)] - fYec41[i])) / (fRec74[i] - fZec97[i]))); + fRec10[i] = fRec73[i]; + fYec42[((i + fYec42_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec10[(i - 1)]) + (fZec22[i] * fZec84[i]))); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec98[i])))) & 16383)]; + fRec8[i] = (fYec43[(i - 1)] - (((fZec99[i] + (2.0f - fRec75[i])) * (fRec8[(i - 1)] - fYec43[i])) / (fRec75[i] - fZec99[i]))); + fRec6[i] = fRec8[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((fRec9[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec90[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - std::min(8192, std::max(0, int(fZec100[i])))) & 16383)]; + fRec76[i] = (fYec45[(i - 1)] - (((fZec101[i] + (2.0f - fRec77[i])) * (fRec76[(i - 1)] - fYec45[i])) / (fRec77[i] - fZec101[i]))); + fRec7[i] = fRec76[i]; + fYec46[((i + fYec46_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec7[(i - 1)]) + (fZec22[i] * fZec83[i]))); + fYec47[i] = fYec46[(((i + fYec46_idx) - std::min(8192, std::max(0, int(fZec102[i])))) & 16383)]; + fRec5[i] = (fYec47[(i - 1)] - (((fZec103[i] + (2.0f - fRec78[i])) * (fRec5[(i - 1)] - fYec47[i])) / (fRec78[i] - fZec103[i]))); + fRec3[i] = fRec5[i]; + fYec48[((i + fYec48_idx) & 16383)] = ((fRec6[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec89[i])); + fYec49[i] = fYec48[(((i + fYec48_idx) - std::min(8192, std::max(0, int(fZec104[i])))) & 16383)]; + fRec79[i] = (fYec49[(i - 1)] - (((fZec105[i] + (2.0f - fRec80[i])) * (fRec79[(i - 1)] - fYec49[i])) / (fRec80[i] - fZec105[i]))); + fRec4[i] = fRec79[i]; + fRec2[i] = ((0.5f * (fRec2[(i - 1)] * fZec106[i])) + (((fRec3[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec88[i])) * fZec107[i])); + fRec0[((i + fRec0_idx) & 1023)] = fRec2[i]; + fRec81[i] = ((0.5f * (fRec81[(i - 1)] * fZec106[i])) + (fZec107[i] * ((fZec6[i] * fRec4[(i - 1)]) + (fZec22[i] * fZec82[i])))); + fRec1[((i + fRec1_idx) & 1023)] = fRec81[i]; + + } + /* Post code */ + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec81_perm[j219] = fRec81_tmp[(vsize + j219)]; + + } + fYec48_idx_save = vsize; + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fYec49_perm[j209] = fYec49_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec79_perm[j211] = fRec79_tmp[(vsize + j211)]; + + } + fYec46_idx_save = vsize; + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fYec47_perm[j201] = fYec47_tmp[(vsize + j201)]; + + } + fYec44_idx_save = vsize; + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fYec45_perm[j193] = fYec45_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec76_perm[j195] = fRec76_tmp[(vsize + j195)]; + + } + fYec42_idx_save = vsize; + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fYec43_perm[j185] = fYec43_tmp[(vsize + j185)]; + + } + fYec40_idx_save = vsize; + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fYec41_perm[j177] = fYec41_tmp[(vsize + j177)]; + + } + for (int j179 = 0; (j179 < 4); j179 = (j179 + 1)) { + fRec73_perm[j179] = fRec73_tmp[(vsize + j179)]; + + } + fYec38_idx_save = vsize; + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fYec39_perm[j169] = fYec39_tmp[(vsize + j169)]; + + } + fYec36_idx_save = vsize; + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fYec37_perm[j161] = fYec37_tmp[(vsize + j161)]; + + } + for (int j163 = 0; (j163 < 4); j163 = (j163 + 1)) { + fRec70_perm[j163] = fRec70_tmp[(vsize + j163)]; + + } + fYec34_idx_save = vsize; + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fYec35_perm[j153] = fYec35_tmp[(vsize + j153)]; + + } + fYec32_idx_save = vsize; + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fYec33_perm[j145] = fYec33_tmp[(vsize + j145)]; + + } + for (int j147 = 0; (j147 < 4); j147 = (j147 + 1)) { + fRec67_perm[j147] = fRec67_tmp[(vsize + j147)]; + + } + fYec30_idx_save = vsize; + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fYec31_perm[j137] = fYec31_tmp[(vsize + j137)]; + + } + fYec28_idx_save = vsize; + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fYec29_perm[j129] = fYec29_tmp[(vsize + j129)]; + + } + for (int j131 = 0; (j131 < 4); j131 = (j131 + 1)) { + fRec64_perm[j131] = fRec64_tmp[(vsize + j131)]; + + } + fYec26_idx_save = vsize; + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fYec27_perm[j121] = fYec27_tmp[(vsize + j121)]; + + } + fYec24_idx_save = vsize; + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fYec25_perm[j113] = fYec25_tmp[(vsize + j113)]; + + } + for (int j115 = 0; (j115 < 4); j115 = (j115 + 1)) { + fRec61_perm[j115] = fRec61_tmp[(vsize + j115)]; + + } + fYec22_idx_save = vsize; + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fYec23_perm[j105] = fYec23_tmp[(vsize + j105)]; + + } + fYec20_idx_save = vsize; + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fYec21_perm[j97] = fYec21_tmp[(vsize + j97)]; + + } + for (int j99 = 0; (j99 < 4); j99 = (j99 + 1)) { + fRec58_perm[j99] = fRec58_tmp[(vsize + j99)]; + + } + fYec18_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec19_perm[j89] = fYec19_tmp[(vsize + j89)]; + + } + fYec16_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec17_perm[j81] = fYec17_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec55_perm[j83] = fRec55_tmp[(vsize + j83)]; + + } + fYec14_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec15_perm[j73] = fYec15_tmp[(vsize + j73)]; + + } + fYec12_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec13_perm[j65] = fYec13_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec52_perm[j67] = fRec52_tmp[(vsize + j67)]; + + } + fYec10_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec11_perm[j57] = fYec11_tmp[(vsize + j57)]; + + } + fYec8_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec9_perm[j49] = fYec9_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec49_perm[j51] = fRec49_tmp[(vsize + j51)]; + + } + fYec6_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec7_perm[j41] = fYec7_tmp[(vsize + j41)]; + + } + fYec3_idx_save = vsize; + fYec4_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec5_perm[j33] = fYec5_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec46_perm[j35] = fRec46_tmp[(vsize + j35)]; + + } + fYec0_idx_save = vsize; + fYec1_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec2_perm[j25] = fYec2_tmp[(vsize + j25)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec38_perm[j27] = fRec38_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec36_perm[j29] = fRec36_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec37_perm[j37] = fRec37_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec35_perm[j43] = fRec35_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec33_perm[j45] = fRec33_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec34_perm[j53] = fRec34_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec32_perm[j59] = fRec32_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec30_perm[j61] = fRec30_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec31_perm[j69] = fRec31_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec29_perm[j75] = fRec29_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec27_perm[j77] = fRec27_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec28_perm[j85] = fRec28_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec26_perm[j91] = fRec26_tmp[(vsize + j91)]; + + } + for (int j93 = 0; (j93 < 4); j93 = (j93 + 1)) { + fRec24_perm[j93] = fRec24_tmp[(vsize + j93)]; + + } + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fRec25_perm[j101] = fRec25_tmp[(vsize + j101)]; + + } + for (int j107 = 0; (j107 < 4); j107 = (j107 + 1)) { + fRec23_perm[j107] = fRec23_tmp[(vsize + j107)]; + + } + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fRec21_perm[j109] = fRec21_tmp[(vsize + j109)]; + + } + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fRec22_perm[j117] = fRec22_tmp[(vsize + j117)]; + + } + for (int j123 = 0; (j123 < 4); j123 = (j123 + 1)) { + fRec20_perm[j123] = fRec20_tmp[(vsize + j123)]; + + } + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fRec18_perm[j125] = fRec18_tmp[(vsize + j125)]; + + } + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fRec19_perm[j133] = fRec19_tmp[(vsize + j133)]; + + } + for (int j139 = 0; (j139 < 4); j139 = (j139 + 1)) { + fRec17_perm[j139] = fRec17_tmp[(vsize + j139)]; + + } + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fRec15_perm[j141] = fRec15_tmp[(vsize + j141)]; + + } + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fRec16_perm[j149] = fRec16_tmp[(vsize + j149)]; + + } + for (int j155 = 0; (j155 < 4); j155 = (j155 + 1)) { + fRec14_perm[j155] = fRec14_tmp[(vsize + j155)]; + + } + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fRec12_perm[j157] = fRec12_tmp[(vsize + j157)]; + + } + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fRec13_perm[j165] = fRec13_tmp[(vsize + j165)]; + + } + for (int j171 = 0; (j171 < 4); j171 = (j171 + 1)) { + fRec11_perm[j171] = fRec11_tmp[(vsize + j171)]; + + } + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fRec9_perm[j173] = fRec9_tmp[(vsize + j173)]; + + } + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fRec10_perm[j181] = fRec10_tmp[(vsize + j181)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec8_perm[j187] = fRec8_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec6_perm[j189] = fRec6_tmp[(vsize + j189)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec7_perm[j197] = fRec7_tmp[(vsize + j197)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec5_perm[j203] = fRec5_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec3_perm[j205] = fRec3_tmp[(vsize + j205)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec4_perm[j213] = fRec4_tmp[(vsize + j213)]; + + } + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fRec2_perm[j217] = fRec2_tmp[(vsize + j217)]; + + } + fRec0_idx_save = vsize; + fRec1_idx_save = vsize; + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[((i + fRec0_idx) & 1023)]); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[((i + fRec1_idx) & 1023)]); + + } + } + /* Remaining frames */ + if (vindex < count) { + FAUSTFLOAT* input0 = &input0_ptr[vindex]; + FAUSTFLOAT* input1 = &input1_ptr[vindex]; + FAUSTFLOAT* output0 = &output0_ptr[vindex]; + FAUSTFLOAT* output1 = &output1_ptr[vindex]; + int vsize = (count - vindex); + /* Vectorizable loop 0 */ + /* Pre code */ + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fVec0_tmp[j8] = fVec0_perm[j8]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec0[i] = fSlow1; + + } + /* Post code */ + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fVec0_perm[j9] = fVec0_tmp[(vsize + j9)]; + + } + /* Vectorizable loop 1 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = (fConst1 * (fSlow1 + fVec0[(i - 1)])); + + } + /* Vectorizable loop 2 */ + /* Pre code */ + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + iVec1_tmp[j12] = iVec1_perm[j12]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iVec1[i] = 1; + + } + /* Post code */ + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + iVec1_perm[j13] = iVec1_tmp[(vsize + j13)]; + + } + /* Vectorizable loop 3 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec2[i] = std::sin(fZec1[i]); + + } + /* Vectorizable loop 4 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec3[i] = std::cos(fZec1[i]); + + } + /* Vectorizable loop 5 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec4[i] = (1 - iVec1[(i - 1)]); + + } + /* Vectorizable loop 6 */ + /* Pre code */ + for (int j22 = 0; (j22 < 4); j22 = (j22 + 1)) { + fVec4_tmp[j22] = fVec4_perm[j22]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec4[i] = fSlow8; + + } + /* Post code */ + for (int j23 = 0; (j23 < 4); j23 = (j23 + 1)) { + fVec4_perm[j23] = fVec4_tmp[(vsize + j23)]; + + } + /* Recursive loop 7 */ + /* Pre code */ + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec43_tmp[j10] = fRec43_perm[j10]; + + } + for (int j14 = 0; (j14 < 4); j14 = (j14 + 1)) { + fRec44_tmp[j14] = fRec44_perm[j14]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec43[i] = ((fRec44[(i - 1)] * fZec2[i]) + (fRec43[(i - 1)] * fZec3[i])); + fRec44[i] = ((float(iZec4[i]) + (fRec44[(i - 1)] * fZec3[i])) - (fRec43[(i - 1)] * fZec2[i])); + + } + /* Post code */ + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec43_perm[j11] = fRec43_tmp[(vsize + j11)]; + + } + for (int j15 = 0; (j15 < 4); j15 = (j15 + 1)) { + fRec44_perm[j15] = fRec44_tmp[(vsize + j15)]; + + } + /* Vectorizable loop 8 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec9[i] = (fSlow8 + fVec4[(i - 1)]); + + } + /* Vectorizable loop 9 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec10[i] = (fConst2 * ((fRec43[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 10 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec28[i] = (fConst2 * ((fRec44[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 11 */ + /* Pre code */ + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fVec2_tmp[j18] = fVec2_perm[j18]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec2[i] = fSlow6; + + } + /* Post code */ + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fVec2_perm[j19] = fVec2_tmp[(vsize + j19)]; + + } + /* Vectorizable loop 12 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec11[i] = (fZec10[i] + 8.50000477f); + + } + /* Vectorizable loop 13 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec29[i] = (fZec28[i] + 8.50000477f); + + } + /* Recursive loop 14 */ + /* Pre code */ + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fRec45_tmp[j16] = fRec45_perm[j16]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec45[i] = (fSlow5 + (0.999899983f * (fRec45[(i - 1)] + float((iSlow4 * iZec4[i]))))); + + } + /* Post code */ + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fRec45_perm[j17] = fRec45_tmp[(vsize + j17)]; + + } + /* Vectorizable loop 15 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec5[i] = (0.5f * (fSlow6 + fVec2[(i - 1)])); + + } + /* Vectorizable loop 16 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec13[i] = std::floor(fZec11[i]); + + } + /* Recursive loop 17 */ + /* Pre code */ + for (int j30 = 0; (j30 < 4); j30 = (j30 + 1)) { + fRec47_tmp[j30] = fRec47_perm[j30]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec47[i] = (fSlow10 + (0.999899983f * (fRec47[(i - 1)] + float((iSlow9 * iZec4[i]))))); + + } + /* Post code */ + for (int j31 = 0; (j31 < 4); j31 = (j31 + 1)) { + fRec47_perm[j31] = fRec47_tmp[(vsize + j31)]; + + } + /* Vectorizable loop 18 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec31[i] = std::floor(fZec29[i]); + + } + /* Recursive loop 19 */ + /* Pre code */ + for (int j38 = 0; (j38 < 4); j38 = (j38 + 1)) { + fRec48_tmp[j38] = fRec48_perm[j38]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec48[i] = (fSlow13 + (0.999000013f * (fRec48[(i - 1)] + float((iSlow12 * iZec4[i]))))); + + } + /* Post code */ + for (int j39 = 0; (j39 < 4); j39 = (j39 + 1)) { + fRec48_perm[j39] = fRec48_tmp[(vsize + j39)]; + + } + /* Recursive loop 20 */ + /* Pre code */ + for (int j46 = 0; (j46 < 4); j46 = (j46 + 1)) { + fRec50_tmp[j46] = fRec50_perm[j46]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec50[i] = (fSlow15 + (0.999000013f * (fRec50[(i - 1)] + float((iSlow14 * iZec4[i]))))); + + } + /* Post code */ + for (int j47 = 0; (j47 < 4); j47 = (j47 + 1)) { + fRec50_perm[j47] = fRec50_tmp[(vsize + j47)]; + + } + /* Recursive loop 21 */ + /* Pre code */ + for (int j54 = 0; (j54 < 4); j54 = (j54 + 1)) { + fRec51_tmp[j54] = fRec51_perm[j54]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec51[i] = (fSlow18 + (0.999000013f * (fRec51[(i - 1)] + float((iSlow17 * iZec4[i]))))); + + } + /* Post code */ + for (int j55 = 0; (j55 < 4); j55 = (j55 + 1)) { + fRec51_perm[j55] = fRec51_tmp[(vsize + j55)]; + + } + /* Recursive loop 22 */ + /* Pre code */ + for (int j62 = 0; (j62 < 4); j62 = (j62 + 1)) { + fRec53_tmp[j62] = fRec53_perm[j62]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec53[i] = (fSlow20 + (0.999000013f * (fRec53[(i - 1)] + float((iSlow19 * iZec4[i]))))); + + } + /* Post code */ + for (int j63 = 0; (j63 < 4); j63 = (j63 + 1)) { + fRec53_perm[j63] = fRec53_tmp[(vsize + j63)]; + + } + /* Recursive loop 23 */ + /* Pre code */ + for (int j70 = 0; (j70 < 4); j70 = (j70 + 1)) { + fRec54_tmp[j70] = fRec54_perm[j70]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec54[i] = (fSlow22 + (0.999000013f * (fRec54[(i - 1)] + float((iSlow21 * iZec4[i]))))); + + } + /* Post code */ + for (int j71 = 0; (j71 < 4); j71 = (j71 + 1)) { + fRec54_perm[j71] = fRec54_tmp[(vsize + j71)]; + + } + /* Recursive loop 24 */ + /* Pre code */ + for (int j78 = 0; (j78 < 4); j78 = (j78 + 1)) { + fRec56_tmp[j78] = fRec56_perm[j78]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec56[i] = (fSlow24 + (0.999000013f * (fRec56[(i - 1)] + float((iSlow23 * iZec4[i]))))); + + } + /* Post code */ + for (int j79 = 0; (j79 < 4); j79 = (j79 + 1)) { + fRec56_perm[j79] = fRec56_tmp[(vsize + j79)]; + + } + /* Recursive loop 25 */ + /* Pre code */ + for (int j86 = 0; (j86 < 4); j86 = (j86 + 1)) { + fRec57_tmp[j86] = fRec57_perm[j86]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec57[i] = (fSlow27 + (0.999899983f * (fRec57[(i - 1)] + float((iSlow26 * iZec4[i]))))); + + } + /* Post code */ + for (int j87 = 0; (j87 < 4); j87 = (j87 + 1)) { + fRec57_perm[j87] = fRec57_tmp[(vsize + j87)]; + + } + /* Recursive loop 26 */ + /* Pre code */ + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fRec59_tmp[j94] = fRec59_perm[j94]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec59[i] = (fSlow29 + (0.999899983f * (fRec59[(i - 1)] + float((iSlow28 * iZec4[i]))))); + + } + /* Post code */ + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fRec59_perm[j95] = fRec59_tmp[(vsize + j95)]; + + } + /* Recursive loop 27 */ + /* Pre code */ + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec60_tmp[j102] = fRec60_perm[j102]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec60[i] = (fSlow32 + (0.999000013f * (fRec60[(i - 1)] + float((iSlow31 * iZec4[i]))))); + + } + /* Post code */ + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec60_perm[j103] = fRec60_tmp[(vsize + j103)]; + + } + /* Recursive loop 28 */ + /* Pre code */ + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec62_tmp[j110] = fRec62_perm[j110]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec62[i] = (fSlow34 + (0.999000013f * (fRec62[(i - 1)] + float((iSlow33 * iZec4[i]))))); + + } + /* Post code */ + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec62_perm[j111] = fRec62_tmp[(vsize + j111)]; + + } + /* Recursive loop 29 */ + /* Pre code */ + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec63_tmp[j118] = fRec63_perm[j118]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec63[i] = (fSlow37 + (0.999000013f * (fRec63[(i - 1)] + float((iSlow36 * iZec4[i]))))); + + } + /* Post code */ + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec63_perm[j119] = fRec63_tmp[(vsize + j119)]; + + } + /* Recursive loop 30 */ + /* Pre code */ + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec65_tmp[j126] = fRec65_perm[j126]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec65[i] = (fSlow39 + (0.999000013f * (fRec65[(i - 1)] + float((iSlow38 * iZec4[i]))))); + + } + /* Post code */ + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec65_perm[j127] = fRec65_tmp[(vsize + j127)]; + + } + /* Recursive loop 31 */ + /* Pre code */ + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec66_tmp[j134] = fRec66_perm[j134]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec66[i] = (fSlow42 + (0.999000013f * (fRec66[(i - 1)] + float((iSlow41 * iZec4[i]))))); + + } + /* Post code */ + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec66_perm[j135] = fRec66_tmp[(vsize + j135)]; + + } + /* Recursive loop 32 */ + /* Pre code */ + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec68_tmp[j142] = fRec68_perm[j142]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec68[i] = (fSlow44 + (0.999000013f * (fRec68[(i - 1)] + float((iSlow43 * iZec4[i]))))); + + } + /* Post code */ + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec68_perm[j143] = fRec68_tmp[(vsize + j143)]; + + } + /* Recursive loop 33 */ + /* Pre code */ + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec69_tmp[j150] = fRec69_perm[j150]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec69[i] = (fSlow47 + (0.999899983f * (fRec69[(i - 1)] + float((iSlow46 * iZec4[i]))))); + + } + /* Post code */ + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec69_perm[j151] = fRec69_tmp[(vsize + j151)]; + + } + /* Recursive loop 34 */ + /* Pre code */ + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec71_tmp[j158] = fRec71_perm[j158]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec71[i] = (fSlow49 + (0.999899983f * (fRec71[(i - 1)] + float((iSlow48 * iZec4[i]))))); + + } + /* Post code */ + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec71_perm[j159] = fRec71_tmp[(vsize + j159)]; + + } + /* Recursive loop 35 */ + /* Pre code */ + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec72_tmp[j166] = fRec72_perm[j166]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec72[i] = (fSlow52 + (0.999000013f * (fRec72[(i - 1)] + float((iSlow51 * iZec4[i]))))); + + } + /* Post code */ + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec72_perm[j167] = fRec72_tmp[(vsize + j167)]; + + } + /* Recursive loop 36 */ + /* Pre code */ + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec74_tmp[j174] = fRec74_perm[j174]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec74[i] = (fSlow54 + (0.999000013f * (fRec74[(i - 1)] + float((iSlow53 * iZec4[i]))))); + + } + /* Post code */ + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec74_perm[j175] = fRec74_tmp[(vsize + j175)]; + + } + /* Recursive loop 37 */ + /* Pre code */ + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec75_tmp[j182] = fRec75_perm[j182]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec75[i] = (fSlow57 + (0.999000013f * (fRec75[(i - 1)] + float((iSlow56 * iZec4[i]))))); + + } + /* Post code */ + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec75_perm[j183] = fRec75_tmp[(vsize + j183)]; + + } + /* Recursive loop 38 */ + /* Pre code */ + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec77_tmp[j190] = fRec77_perm[j190]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec77[i] = (fSlow59 + (0.999000013f * (fRec77[(i - 1)] + float((iSlow58 * iZec4[i]))))); + + } + /* Post code */ + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec77_perm[j191] = fRec77_tmp[(vsize + j191)]; + + } + /* Recursive loop 39 */ + /* Pre code */ + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fRec78_tmp[j198] = fRec78_perm[j198]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec78[i] = (fSlow62 + (0.999000013f * (fRec78[(i - 1)] + float((iSlow61 * iZec4[i]))))); + + } + /* Post code */ + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fRec78_perm[j199] = fRec78_tmp[(vsize + j199)]; + + } + /* Recursive loop 40 */ + /* Pre code */ + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec80_tmp[j206] = fRec80_perm[j206]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec80[i] = (fSlow64 + (0.999000013f * (fRec80[(i - 1)] + float((iSlow63 * iZec4[i]))))); + + } + /* Post code */ + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec80_perm[j207] = fRec80_tmp[(vsize + j207)]; + + } + /* Vectorizable loop 41 */ + /* Pre code */ + for (int j214 = 0; (j214 < 4); j214 = (j214 + 1)) { + fVec5_tmp[j214] = fVec5_perm[j214]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec5[i] = fSlow65; + + } + /* Post code */ + for (int j215 = 0; (j215 < 4); j215 = (j215 + 1)) { + fVec5_perm[j215] = fVec5_tmp[(vsize + j215)]; + + } + /* Recursive loop 42 */ + /* Pre code */ + for (int j0 = 0; (j0 < 4); j0 = (j0 + 1)) { + fRec39_tmp[j0] = fRec39_perm[j0]; + + } + for (int j2 = 0; (j2 < 4); j2 = (j2 + 1)) { + fRec40_tmp[j2] = fRec40_perm[j2]; + + } + for (int j4 = 0; (j4 < 4); j4 = (j4 + 1)) { + fRec41_tmp[j4] = fRec41_perm[j4]; + + } + for (int j6 = 0; (j6 < 4); j6 = (j6 + 1)) { + fRec42_tmp[j6] = fRec42_perm[j6]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec0[i] = ((fRec39[(i - 1)] != 0.0f)?(((fRec40[(i - 1)] > 0.0f) & (fRec40[(i - 1)] < 1.0f))?fRec39[(i - 1)]:0.0f):(((fRec40[(i - 1)] == 0.0f) & (fSlow0 != fRec41[(i - 1)]))?4.53514731e-05f:(((fRec40[(i - 1)] == 1.0f) & (fSlow0 != fRec42[(i - 1)]))?-4.53514731e-05f:0.0f))); + fRec39[i] = fZec0[i]; + fRec40[i] = std::max(0.0f, std::min(1.0f, (fRec40[(i - 1)] + fZec0[i]))); + fRec41[i] = (((fRec40[(i - 1)] >= 1.0f) & (fRec42[(i - 1)] != fSlow0))?fSlow0:fRec41[(i - 1)]); + fRec42[i] = (((fRec40[(i - 1)] <= 0.0f) & (fRec41[(i - 1)] != fSlow0))?fSlow0:fRec42[(i - 1)]); + + } + /* Post code */ + for (int j1 = 0; (j1 < 4); j1 = (j1 + 1)) { + fRec39_perm[j1] = fRec39_tmp[(vsize + j1)]; + + } + for (int j3 = 0; (j3 < 4); j3 = (j3 + 1)) { + fRec40_perm[j3] = fRec40_tmp[(vsize + j3)]; + + } + for (int j5 = 0; (j5 < 4); j5 = (j5 + 1)) { + fRec41_perm[j5] = fRec41_tmp[(vsize + j5)]; + + } + for (int j7 = 0; (j7 < 4); j7 = (j7 + 1)) { + fRec42_perm[j7] = fRec42_tmp[(vsize + j7)]; + + } + /* Vectorizable loop 43 */ + /* Pre code */ + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fVec3_tmp[j20] = fVec3_perm[j20]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec3[i] = fSlow7; + + } + /* Post code */ + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fVec3_perm[j21] = fVec3_tmp[(vsize + j21)]; + + } + /* Vectorizable loop 44 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec14[i] = (fZec10[i] + (9.0f - fZec13[i])); + + } + /* Vectorizable loop 45 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec15[i] = (fZec10[i] + (8.0f - fZec13[i])); + + } + /* Vectorizable loop 46 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec26[i] = (fRec45[i] + -1.49998999f); + + } + /* Vectorizable loop 47 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec32[i] = (fZec28[i] + (9.0f - fZec31[i])); + + } + /* Vectorizable loop 48 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec33[i] = (fZec28[i] + (8.0f - fZec31[i])); + + } + /* Vectorizable loop 49 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec41[i] = (fRec47[i] + -1.49998999f); + + } + /* Vectorizable loop 50 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec43[i] = (fRec48[i] + -1.49998999f); + + } + /* Vectorizable loop 51 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (fRec50[i] + -1.49998999f); + + } + /* Vectorizable loop 52 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (fRec51[i] + -1.49998999f); + + } + /* Vectorizable loop 53 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (fRec53[i] + -1.49998999f); + + } + /* Vectorizable loop 54 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (fRec54[i] + -1.49998999f); + + } + /* Vectorizable loop 55 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec53[i] = (fRec56[i] + -1.49998999f); + + } + /* Vectorizable loop 56 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - fZec5[i]); + + } + /* Vectorizable loop 57 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (fRec57[i] + -1.49998999f); + + } + /* Vectorizable loop 58 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec68[i] = (fRec59[i] + -1.49998999f); + + } + /* Vectorizable loop 59 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec70[i] = (fRec60[i] + -1.49998999f); + + } + /* Vectorizable loop 60 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec72[i] = (fRec62[i] + -1.49998999f); + + } + /* Vectorizable loop 61 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fRec63[i] + -1.49998999f); + + } + /* Vectorizable loop 62 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec76[i] = (fRec65[i] + -1.49998999f); + + } + /* Vectorizable loop 63 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec78[i] = (fRec66[i] + -1.49998999f); + + } + /* Vectorizable loop 64 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec80[i] = (fRec68[i] + -1.49998999f); + + } + /* Vectorizable loop 65 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec86[i] = (fRec69[i] + -1.49998999f); + + } + /* Vectorizable loop 66 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec92[i] = (fRec71[i] + -1.49998999f); + + } + /* Vectorizable loop 67 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec72[i] + -1.49998999f); + + } + /* Vectorizable loop 68 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec96[i] = (fRec74[i] + -1.49998999f); + + } + /* Vectorizable loop 69 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec98[i] = (fRec75[i] + -1.49998999f); + + } + /* Vectorizable loop 70 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = (fRec77[i] + -1.49998999f); + + } + /* Vectorizable loop 71 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec102[i] = (fRec78[i] + -1.49998999f); + + } + /* Vectorizable loop 72 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fRec80[i] + -1.49998999f); + + } + /* Vectorizable loop 73 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec106[i] = (fSlow65 + fVec5[(i - 1)]); + + } + /* Vectorizable loop 74 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec6[i] = std::cos(fZec5[i]); + + } + /* Vectorizable loop 75 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec7[i] = (fSlow7 + fVec3[(i - 1)]); + + } + /* Vectorizable loop 76 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec8[i] = (1.0f - fRec40[i]); + + } + /* Vectorizable loop 77 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec12[i] = int(fZec11[i]); + + } + /* Vectorizable loop 78 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec16[i] = (fZec10[i] + (7.0f - fZec13[i])); + + } + /* Vectorizable loop 79 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec17[i] = (fZec10[i] + (6.0f - fZec13[i])); + + } + /* Vectorizable loop 80 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec18[i] = (fZec14[i] * fZec15[i]); + + } + /* Vectorizable loop 81 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec22[i] = std::sin(fZec5[i]); + + } + /* Vectorizable loop 82 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec19[i] = int(std::min(65536.0f, std::max(0.0f, fRec41[i]))); + + } + /* Vectorizable loop 83 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec20[i] = int(std::min(65536.0f, std::max(0.0f, fRec42[i]))); + + } + /* Vectorizable loop 84 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec36[i] = (fZec32[i] * fZec33[i]); + + } + /* Vectorizable loop 85 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec27[i] = std::floor(fZec26[i]); + + } + /* Vectorizable loop 86 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec30[i] = int(fZec29[i]); + + } + /* Vectorizable loop 87 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec34[i] = (fZec28[i] + (7.0f - fZec31[i])); + + } + /* Vectorizable loop 88 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec35[i] = (fZec28[i] + (6.0f - fZec31[i])); + + } + /* Vectorizable loop 89 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec42[i] = std::floor(fZec41[i]); + + } + /* Vectorizable loop 90 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec44[i] = std::floor(fZec43[i]); + + } + /* Vectorizable loop 91 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec46[i] = std::floor(fZec45[i]); + + } + /* Vectorizable loop 92 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec48[i] = std::floor(fZec47[i]); + + } + /* Vectorizable loop 93 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec50[i] = std::floor(fZec49[i]); + + } + /* Vectorizable loop 94 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = std::floor(fZec51[i]); + + } + /* Vectorizable loop 95 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = std::floor(fZec53[i]); + + } + /* Vectorizable loop 96 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = std::cos(fZec55[i]); + + } + /* Vectorizable loop 97 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = std::sin(fZec55[i]); + + } + /* Vectorizable loop 98 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = std::floor(fZec62[i]); + + } + /* Vectorizable loop 99 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec69[i] = std::floor(fZec68[i]); + + } + /* Vectorizable loop 100 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec71[i] = std::floor(fZec70[i]); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = std::floor(fZec72[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = std::floor(fZec74[i]); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec79[i] = std::floor(fZec78[i]); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec87[i] = std::floor(fZec86[i]); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = std::floor(fZec92[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec95[i] = std::floor(fZec94[i]); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec97[i] = std::floor(fZec96[i]); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec99[i] = std::floor(fZec98[i]); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec101[i] = std::floor(fZec100[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec103[i] = std::floor(fZec102[i]); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = std::floor(fZec104[i]); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec107[i] = (1.0f - (0.5f * fZec106[i])); + + } + /* Recursive loop 115 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 131071); + fYec1_idx = ((fYec1_idx + fYec1_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec2_tmp[j24] = fYec2_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec38_tmp[j26] = fRec38_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec36_tmp[j28] = fRec36_perm[j28]; + + } + fYec3_idx = ((fYec3_idx + fYec3_idx_save) & 131071); + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec5_tmp[j32] = fYec5_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec46_tmp[j34] = fRec46_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec37_tmp[j36] = fRec37_perm[j36]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec7_tmp[j40] = fYec7_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec35_tmp[j42] = fRec35_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec33_tmp[j44] = fRec33_perm[j44]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec9_tmp[j48] = fYec9_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec49_tmp[j50] = fRec49_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec34_tmp[j52] = fRec34_perm[j52]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec11_tmp[j56] = fYec11_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec32_tmp[j58] = fRec32_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec30_tmp[j60] = fRec30_perm[j60]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec13_tmp[j64] = fYec13_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec52_tmp[j66] = fRec52_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec31_tmp[j68] = fRec31_perm[j68]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec15_tmp[j72] = fYec15_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec29_tmp[j74] = fRec29_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec27_tmp[j76] = fRec27_perm[j76]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec17_tmp[j80] = fYec17_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec55_tmp[j82] = fRec55_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec28_tmp[j84] = fRec28_perm[j84]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec19_tmp[j88] = fYec19_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec26_tmp[j90] = fRec26_perm[j90]; + + } + for (int j92 = 0; (j92 < 4); j92 = (j92 + 1)) { + fRec24_tmp[j92] = fRec24_perm[j92]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 16383); + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fYec21_tmp[j96] = fYec21_perm[j96]; + + } + for (int j98 = 0; (j98 < 4); j98 = (j98 + 1)) { + fRec58_tmp[j98] = fRec58_perm[j98]; + + } + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fRec25_tmp[j100] = fRec25_perm[j100]; + + } + fYec22_idx = ((fYec22_idx + fYec22_idx_save) & 16383); + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fYec23_tmp[j104] = fYec23_perm[j104]; + + } + for (int j106 = 0; (j106 < 4); j106 = (j106 + 1)) { + fRec23_tmp[j106] = fRec23_perm[j106]; + + } + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fRec21_tmp[j108] = fRec21_perm[j108]; + + } + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fYec25_tmp[j112] = fYec25_perm[j112]; + + } + for (int j114 = 0; (j114 < 4); j114 = (j114 + 1)) { + fRec61_tmp[j114] = fRec61_perm[j114]; + + } + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fRec22_tmp[j116] = fRec22_perm[j116]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fYec27_tmp[j120] = fYec27_perm[j120]; + + } + for (int j122 = 0; (j122 < 4); j122 = (j122 + 1)) { + fRec20_tmp[j122] = fRec20_perm[j122]; + + } + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fRec18_tmp[j124] = fRec18_perm[j124]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fYec29_tmp[j128] = fYec29_perm[j128]; + + } + for (int j130 = 0; (j130 < 4); j130 = (j130 + 1)) { + fRec64_tmp[j130] = fRec64_perm[j130]; + + } + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fRec19_tmp[j132] = fRec19_perm[j132]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fYec31_tmp[j136] = fYec31_perm[j136]; + + } + for (int j138 = 0; (j138 < 4); j138 = (j138 + 1)) { + fRec17_tmp[j138] = fRec17_perm[j138]; + + } + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fRec15_tmp[j140] = fRec15_perm[j140]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fYec33_tmp[j144] = fYec33_perm[j144]; + + } + for (int j146 = 0; (j146 < 4); j146 = (j146 + 1)) { + fRec67_tmp[j146] = fRec67_perm[j146]; + + } + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fRec16_tmp[j148] = fRec16_perm[j148]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fYec35_tmp[j152] = fYec35_perm[j152]; + + } + for (int j154 = 0; (j154 < 4); j154 = (j154 + 1)) { + fRec14_tmp[j154] = fRec14_perm[j154]; + + } + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fRec12_tmp[j156] = fRec12_perm[j156]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fYec37_tmp[j160] = fYec37_perm[j160]; + + } + for (int j162 = 0; (j162 < 4); j162 = (j162 + 1)) { + fRec70_tmp[j162] = fRec70_perm[j162]; + + } + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fRec13_tmp[j164] = fRec13_perm[j164]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fYec39_tmp[j168] = fYec39_perm[j168]; + + } + for (int j170 = 0; (j170 < 4); j170 = (j170 + 1)) { + fRec11_tmp[j170] = fRec11_perm[j170]; + + } + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fRec9_tmp[j172] = fRec9_perm[j172]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fYec41_tmp[j176] = fYec41_perm[j176]; + + } + for (int j178 = 0; (j178 < 4); j178 = (j178 + 1)) { + fRec73_tmp[j178] = fRec73_perm[j178]; + + } + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fRec10_tmp[j180] = fRec10_perm[j180]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fYec43_tmp[j184] = fYec43_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec8_tmp[j186] = fRec8_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec6_tmp[j188] = fRec6_perm[j188]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fYec45_tmp[j192] = fYec45_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec76_tmp[j194] = fRec76_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec7_tmp[j196] = fRec7_perm[j196]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fYec47_tmp[j200] = fYec47_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec5_tmp[j202] = fRec5_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec3_tmp[j204] = fRec3_perm[j204]; + + } + fYec48_idx = ((fYec48_idx + fYec48_idx_save) & 16383); + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fYec49_tmp[j208] = fYec49_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec79_tmp[j210] = fRec79_perm[j210]; + + } + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec4_tmp[j212] = fRec4_perm[j212]; + + } + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fRec2_tmp[j216] = fRec2_perm[j216]; + + } + fRec0_idx = ((fRec0_idx + fRec0_idx_save) & 1023); + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec81_tmp[j218] = fRec81_perm[j218]; + + } + fRec1_idx = ((fRec1_idx + fRec1_idx_save) & 1023); + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fYec0[((i + fYec0_idx) & 131071)] = (((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, iZec12[i])) + 1)) & 1023)] * (0.0f - fZec14[i])) * (0.0f - (0.5f * fZec15[i]))) * (0.0f - (0.333333343f * fZec16[i]))) * (0.0f - (0.25f * fZec17[i]))) + ((fZec10[i] + (10.0f - fZec13[i])) * ((((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 1))) + 1)) & 1023)] * (0.0f - fZec15[i])) * (0.0f - (0.5f * fZec16[i]))) * (0.0f - (0.333333343f * fZec17[i]))) + (0.5f * (((fZec14[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec16[i])) * (0.0f - (0.5f * fZec17[i]))))) + (0.166666672f * ((fZec18[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec17[i])))) + (0.0416666679f * ((fZec18[i] * fZec16[i]) * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 4))) + 1)) & 1023)]))))); + fZec21[i] = ((0.5f * (fZec7[i] * ((fZec8[i] * fYec0[(((i + fYec0_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec0[(((i + fYec0_idx) - iZec20[i]) & 131071)])))) + float(input1[i])); + fZec23[i] = ((fZec6[i] * fZec21[i]) - (fZec22[i] * fRec28[(i - 1)])); + fZec24[i] = ((fZec6[i] * fZec23[i]) - (fZec22[i] * fRec31[(i - 1)])); + fZec25[i] = ((fZec6[i] * fZec24[i]) - (fZec22[i] * fRec34[(i - 1)])); + fYec1[((i + fYec1_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec25[i]) - (fZec22[i] * fRec37[(i - 1)]))); + fYec2[i] = fYec1[(((i + fYec1_idx) - std::min(8192, std::max(0, int(fZec26[i])))) & 16383)]; + fRec38[i] = (fYec2[(i - 1)] - (((fZec27[i] + (2.0f - fRec45[i])) * (fRec38[(i - 1)] - fYec2[i])) / (fRec45[i] - fZec27[i]))); + fRec36[i] = fRec38[i]; + fYec3[((i + fYec3_idx) & 131071)] = (((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, iZec30[i])) + 1)) & 1023)] * (0.0f - fZec32[i])) * (0.0f - (0.5f * fZec33[i]))) * (0.0f - (0.333333343f * fZec34[i]))) * (0.0f - (0.25f * fZec35[i]))) + ((fZec28[i] + (10.0f - fZec31[i])) * ((((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 1))) + 1)) & 1023)] * (0.0f - fZec33[i])) * (0.0f - (0.5f * fZec34[i]))) * (0.0f - (0.333333343f * fZec35[i]))) + (0.5f * (((fZec32[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec34[i])) * (0.0f - (0.5f * fZec35[i]))))) + (0.166666672f * ((fZec36[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec35[i])))) + (0.0416666679f * ((fZec36[i] * fZec34[i]) * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 4))) + 1)) & 1023)]))))); + fZec37[i] = ((0.5f * (((fZec8[i] * fYec3[(((i + fYec3_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec3[(((i + fYec3_idx) - iZec20[i]) & 131071)])) * fZec7[i])) + float(input0[i])); + fZec38[i] = ((fZec37[i] * fZec6[i]) - (fZec22[i] * fRec27[(i - 1)])); + fZec39[i] = ((fZec6[i] * fZec38[i]) - (fZec22[i] * fRec30[(i - 1)])); + fZec40[i] = ((fZec6[i] * fZec39[i]) - (fZec22[i] * fRec33[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((fZec6[i] * fZec40[i]) - (fZec22[i] * fRec36[(i - 1)])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec41[i])))) & 16383)]; + fRec46[i] = (fYec5[(i - 1)] - (((fZec42[i] + (2.0f - fRec47[i])) * (fRec46[(i - 1)] - fYec5[i])) / (fRec47[i] - fZec42[i]))); + fRec37[i] = fRec46[i]; + fYec6[((i + fYec6_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec37[(i - 1)]) + (fZec22[i] * fZec25[i]))); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec43[i])))) & 16383)]; + fRec35[i] = (fYec7[(i - 1)] - (((fZec44[i] + (2.0f - fRec48[i])) * (fRec35[(i - 1)] - fYec7[i])) / (fRec48[i] - fZec44[i]))); + fRec33[i] = fRec35[i]; + fYec8[((i + fYec8_idx) & 16383)] = ((fRec36[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec40[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec45[i])))) & 16383)]; + fRec49[i] = (fYec9[(i - 1)] - (((fZec46[i] + (2.0f - fRec50[i])) * (fRec49[(i - 1)] - fYec9[i])) / (fRec50[i] - fZec46[i]))); + fRec34[i] = fRec49[i]; + fYec10[((i + fYec10_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec34[(i - 1)]) + (fZec22[i] * fZec24[i]))); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec47[i])))) & 16383)]; + fRec32[i] = (fYec11[(i - 1)] - (((fZec48[i] + (2.0f - fRec51[i])) * (fRec32[(i - 1)] - fYec11[i])) / (fRec51[i] - fZec48[i]))); + fRec30[i] = fRec32[i]; + fYec12[((i + fYec12_idx) & 16383)] = ((fRec33[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec39[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec49[i])))) & 16383)]; + fRec52[i] = (fYec13[(i - 1)] - (((fZec50[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec13[i])) / (fRec53[i] - fZec50[i]))); + fRec31[i] = fRec52[i]; + fYec14[((i + fYec14_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec31[(i - 1)]) + (fZec22[i] * fZec23[i]))); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec51[i])))) & 16383)]; + fRec29[i] = (fYec15[(i - 1)] - (((fZec52[i] + (2.0f - fRec54[i])) * (fRec29[(i - 1)] - fYec15[i])) / (fRec54[i] - fZec52[i]))); + fRec27[i] = fRec29[i]; + fYec16[((i + fYec16_idx) & 16383)] = ((fRec30[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec38[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec53[i])))) & 16383)]; + fRec55[i] = (fYec17[(i - 1)] - (((fZec54[i] + (2.0f - fRec56[i])) * (fRec55[(i - 1)] - fYec17[i])) / (fRec56[i] - fZec54[i]))); + fRec28[i] = fRec55[i]; + fZec57[i] = ((fZec6[i] * fRec28[(i - 1)]) + (fZec22[i] * fZec21[i])); + fZec59[i] = ((fZec56[i] * fZec57[i]) - (fZec58[i] * fRec16[(i - 1)])); + fZec60[i] = ((fZec56[i] * fZec59[i]) - (fZec58[i] * fRec19[(i - 1)])); + fZec61[i] = ((fZec56[i] * fZec60[i]) - (fZec58[i] * fRec22[(i - 1)])); + fYec18[((i + fYec18_idx) & 16383)] = (0.0f - ((fZec56[i] * fZec61[i]) - (fZec58[i] * fRec25[(i - 1)]))); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec62[i])))) & 16383)]; + fRec26[i] = (fYec19[(i - 1)] - (((fZec63[i] + (2.0f - fRec57[i])) * (fRec26[(i - 1)] - fYec19[i])) / (fRec57[i] - fZec63[i]))); + fRec24[i] = fRec26[i]; + fZec64[i] = ((fRec27[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec37[i])); + fZec65[i] = ((fZec64[i] * fZec56[i]) - (fZec58[i] * fRec15[(i - 1)])); + fZec66[i] = ((fZec56[i] * fZec65[i]) - (fZec58[i] * fRec18[(i - 1)])); + fZec67[i] = ((fZec56[i] * fZec66[i]) - (fZec58[i] * fRec21[(i - 1)])); + fYec20[((i + fYec20_idx) & 16383)] = ((fZec56[i] * fZec67[i]) - (fRec24[(i - 1)] * fZec58[i])); + fYec21[i] = fYec20[(((i + fYec20_idx) - std::min(8192, std::max(0, int(fZec68[i])))) & 16383)]; + fRec58[i] = (fYec21[(i - 1)] - (((fZec69[i] + (2.0f - fRec59[i])) * (fRec58[(i - 1)] - fYec21[i])) / (fRec59[i] - fZec69[i]))); + fRec25[i] = fRec58[i]; + fYec22[((i + fYec22_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec25[(i - 1)]) + (fZec58[i] * fZec61[i]))); + fYec23[i] = fYec22[(((i + fYec22_idx) - std::min(8192, std::max(0, int(fZec70[i])))) & 16383)]; + fRec23[i] = (fYec23[(i - 1)] - (((fZec71[i] + (2.0f - fRec60[i])) * (fRec23[(i - 1)] - fYec23[i])) / (fRec60[i] - fZec71[i]))); + fRec21[i] = fRec23[i]; + fYec24[((i + fYec24_idx) & 16383)] = ((fRec24[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec67[i])); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec72[i])))) & 16383)]; + fRec61[i] = (fYec25[(i - 1)] - (((fZec73[i] + (2.0f - fRec62[i])) * (fRec61[(i - 1)] - fYec25[i])) / (fRec62[i] - fZec73[i]))); + fRec22[i] = fRec61[i]; + fYec26[((i + fYec26_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec22[(i - 1)]) + (fZec58[i] * fZec60[i]))); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec74[i])))) & 16383)]; + fRec20[i] = (fYec27[(i - 1)] - (((fZec75[i] + (2.0f - fRec63[i])) * (fRec20[(i - 1)] - fYec27[i])) / (fRec63[i] - fZec75[i]))); + fRec18[i] = fRec20[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((fRec21[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec66[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec64[i] = (fYec29[(i - 1)] - (((fZec77[i] + (2.0f - fRec65[i])) * (fRec64[(i - 1)] - fYec29[i])) / (fRec65[i] - fZec77[i]))); + fRec19[i] = fRec64[i]; + fYec30[((i + fYec30_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec19[(i - 1)]) + (fZec58[i] * fZec59[i]))); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec78[i])))) & 16383)]; + fRec17[i] = (fYec31[(i - 1)] - (((fZec79[i] + (2.0f - fRec66[i])) * (fRec17[(i - 1)] - fYec31[i])) / (fRec66[i] - fZec79[i]))); + fRec15[i] = fRec17[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((fRec18[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec65[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec67[i] = (fYec33[(i - 1)] - (((fZec81[i] + (2.0f - fRec68[i])) * (fRec67[(i - 1)] - fYec33[i])) / (fRec68[i] - fZec81[i]))); + fRec16[i] = fRec67[i]; + fZec82[i] = ((fZec56[i] * fRec16[(i - 1)]) + (fZec58[i] * fZec57[i])); + fZec83[i] = ((fZec6[i] * fZec82[i]) - (fZec22[i] * fRec4[(i - 1)])); + fZec84[i] = ((fZec6[i] * fZec83[i]) - (fZec22[i] * fRec7[(i - 1)])); + fZec85[i] = ((fZec6[i] * fZec84[i]) - (fZec22[i] * fRec10[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec85[i]) - (fZec22[i] * fRec13[(i - 1)]))); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec86[i])))) & 16383)]; + fRec14[i] = (fYec35[(i - 1)] - (((fZec87[i] + (2.0f - fRec69[i])) * (fRec14[(i - 1)] - fYec35[i])) / (fRec69[i] - fZec87[i]))); + fRec12[i] = fRec14[i]; + fZec88[i] = ((fRec15[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec64[i])); + fZec89[i] = ((fZec6[i] * fZec88[i]) - (fZec22[i] * fRec3[(i - 1)])); + fZec90[i] = ((fZec6[i] * fZec89[i]) - (fZec22[i] * fRec6[(i - 1)])); + fZec91[i] = ((fZec6[i] * fZec90[i]) - (fZec22[i] * fRec9[(i - 1)])); + fYec36[((i + fYec36_idx) & 16383)] = ((fZec6[i] * fZec91[i]) - (fRec12[(i - 1)] * fZec22[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - std::min(8192, std::max(0, int(fZec92[i])))) & 16383)]; + fRec70[i] = (fYec37[(i - 1)] - (((fZec93[i] + (2.0f - fRec71[i])) * (fRec70[(i - 1)] - fYec37[i])) / (fRec71[i] - fZec93[i]))); + fRec13[i] = fRec70[i]; + fYec38[((i + fYec38_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec13[(i - 1)]) + (fZec22[i] * fZec85[i]))); + fYec39[i] = fYec38[(((i + fYec38_idx) - std::min(8192, std::max(0, int(fZec94[i])))) & 16383)]; + fRec11[i] = (fYec39[(i - 1)] - (((fZec95[i] + (2.0f - fRec72[i])) * (fRec11[(i - 1)] - fYec39[i])) / (fRec72[i] - fZec95[i]))); + fRec9[i] = fRec11[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((fRec12[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec91[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - std::min(8192, std::max(0, int(fZec96[i])))) & 16383)]; + fRec73[i] = (fYec41[(i - 1)] - (((fZec97[i] + (2.0f - fRec74[i])) * (fRec73[(i - 1)] - fYec41[i])) / (fRec74[i] - fZec97[i]))); + fRec10[i] = fRec73[i]; + fYec42[((i + fYec42_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec10[(i - 1)]) + (fZec22[i] * fZec84[i]))); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec98[i])))) & 16383)]; + fRec8[i] = (fYec43[(i - 1)] - (((fZec99[i] + (2.0f - fRec75[i])) * (fRec8[(i - 1)] - fYec43[i])) / (fRec75[i] - fZec99[i]))); + fRec6[i] = fRec8[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((fRec9[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec90[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - std::min(8192, std::max(0, int(fZec100[i])))) & 16383)]; + fRec76[i] = (fYec45[(i - 1)] - (((fZec101[i] + (2.0f - fRec77[i])) * (fRec76[(i - 1)] - fYec45[i])) / (fRec77[i] - fZec101[i]))); + fRec7[i] = fRec76[i]; + fYec46[((i + fYec46_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec7[(i - 1)]) + (fZec22[i] * fZec83[i]))); + fYec47[i] = fYec46[(((i + fYec46_idx) - std::min(8192, std::max(0, int(fZec102[i])))) & 16383)]; + fRec5[i] = (fYec47[(i - 1)] - (((fZec103[i] + (2.0f - fRec78[i])) * (fRec5[(i - 1)] - fYec47[i])) / (fRec78[i] - fZec103[i]))); + fRec3[i] = fRec5[i]; + fYec48[((i + fYec48_idx) & 16383)] = ((fRec6[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec89[i])); + fYec49[i] = fYec48[(((i + fYec48_idx) - std::min(8192, std::max(0, int(fZec104[i])))) & 16383)]; + fRec79[i] = (fYec49[(i - 1)] - (((fZec105[i] + (2.0f - fRec80[i])) * (fRec79[(i - 1)] - fYec49[i])) / (fRec80[i] - fZec105[i]))); + fRec4[i] = fRec79[i]; + fRec2[i] = ((0.5f * (fRec2[(i - 1)] * fZec106[i])) + (((fRec3[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec88[i])) * fZec107[i])); + fRec0[((i + fRec0_idx) & 1023)] = fRec2[i]; + fRec81[i] = ((0.5f * (fRec81[(i - 1)] * fZec106[i])) + (fZec107[i] * ((fZec6[i] * fRec4[(i - 1)]) + (fZec22[i] * fZec82[i])))); + fRec1[((i + fRec1_idx) & 1023)] = fRec81[i]; + + } + /* Post code */ + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec81_perm[j219] = fRec81_tmp[(vsize + j219)]; + + } + fYec48_idx_save = vsize; + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fYec49_perm[j209] = fYec49_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec79_perm[j211] = fRec79_tmp[(vsize + j211)]; + + } + fYec46_idx_save = vsize; + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fYec47_perm[j201] = fYec47_tmp[(vsize + j201)]; + + } + fYec44_idx_save = vsize; + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fYec45_perm[j193] = fYec45_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec76_perm[j195] = fRec76_tmp[(vsize + j195)]; + + } + fYec42_idx_save = vsize; + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fYec43_perm[j185] = fYec43_tmp[(vsize + j185)]; + + } + fYec40_idx_save = vsize; + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fYec41_perm[j177] = fYec41_tmp[(vsize + j177)]; + + } + for (int j179 = 0; (j179 < 4); j179 = (j179 + 1)) { + fRec73_perm[j179] = fRec73_tmp[(vsize + j179)]; + + } + fYec38_idx_save = vsize; + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fYec39_perm[j169] = fYec39_tmp[(vsize + j169)]; + + } + fYec36_idx_save = vsize; + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fYec37_perm[j161] = fYec37_tmp[(vsize + j161)]; + + } + for (int j163 = 0; (j163 < 4); j163 = (j163 + 1)) { + fRec70_perm[j163] = fRec70_tmp[(vsize + j163)]; + + } + fYec34_idx_save = vsize; + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fYec35_perm[j153] = fYec35_tmp[(vsize + j153)]; + + } + fYec32_idx_save = vsize; + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fYec33_perm[j145] = fYec33_tmp[(vsize + j145)]; + + } + for (int j147 = 0; (j147 < 4); j147 = (j147 + 1)) { + fRec67_perm[j147] = fRec67_tmp[(vsize + j147)]; + + } + fYec30_idx_save = vsize; + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fYec31_perm[j137] = fYec31_tmp[(vsize + j137)]; + + } + fYec28_idx_save = vsize; + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fYec29_perm[j129] = fYec29_tmp[(vsize + j129)]; + + } + for (int j131 = 0; (j131 < 4); j131 = (j131 + 1)) { + fRec64_perm[j131] = fRec64_tmp[(vsize + j131)]; + + } + fYec26_idx_save = vsize; + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fYec27_perm[j121] = fYec27_tmp[(vsize + j121)]; + + } + fYec24_idx_save = vsize; + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fYec25_perm[j113] = fYec25_tmp[(vsize + j113)]; + + } + for (int j115 = 0; (j115 < 4); j115 = (j115 + 1)) { + fRec61_perm[j115] = fRec61_tmp[(vsize + j115)]; + + } + fYec22_idx_save = vsize; + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fYec23_perm[j105] = fYec23_tmp[(vsize + j105)]; + + } + fYec20_idx_save = vsize; + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fYec21_perm[j97] = fYec21_tmp[(vsize + j97)]; + + } + for (int j99 = 0; (j99 < 4); j99 = (j99 + 1)) { + fRec58_perm[j99] = fRec58_tmp[(vsize + j99)]; + + } + fYec18_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec19_perm[j89] = fYec19_tmp[(vsize + j89)]; + + } + fYec16_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec17_perm[j81] = fYec17_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec55_perm[j83] = fRec55_tmp[(vsize + j83)]; + + } + fYec14_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec15_perm[j73] = fYec15_tmp[(vsize + j73)]; + + } + fYec12_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec13_perm[j65] = fYec13_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec52_perm[j67] = fRec52_tmp[(vsize + j67)]; + + } + fYec10_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec11_perm[j57] = fYec11_tmp[(vsize + j57)]; + + } + fYec8_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec9_perm[j49] = fYec9_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec49_perm[j51] = fRec49_tmp[(vsize + j51)]; + + } + fYec6_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec7_perm[j41] = fYec7_tmp[(vsize + j41)]; + + } + fYec3_idx_save = vsize; + fYec4_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec5_perm[j33] = fYec5_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec46_perm[j35] = fRec46_tmp[(vsize + j35)]; + + } + fYec0_idx_save = vsize; + fYec1_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec2_perm[j25] = fYec2_tmp[(vsize + j25)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec38_perm[j27] = fRec38_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec36_perm[j29] = fRec36_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec37_perm[j37] = fRec37_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec35_perm[j43] = fRec35_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec33_perm[j45] = fRec33_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec34_perm[j53] = fRec34_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec32_perm[j59] = fRec32_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec30_perm[j61] = fRec30_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec31_perm[j69] = fRec31_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec29_perm[j75] = fRec29_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec27_perm[j77] = fRec27_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec28_perm[j85] = fRec28_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec26_perm[j91] = fRec26_tmp[(vsize + j91)]; + + } + for (int j93 = 0; (j93 < 4); j93 = (j93 + 1)) { + fRec24_perm[j93] = fRec24_tmp[(vsize + j93)]; + + } + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fRec25_perm[j101] = fRec25_tmp[(vsize + j101)]; + + } + for (int j107 = 0; (j107 < 4); j107 = (j107 + 1)) { + fRec23_perm[j107] = fRec23_tmp[(vsize + j107)]; + + } + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fRec21_perm[j109] = fRec21_tmp[(vsize + j109)]; + + } + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fRec22_perm[j117] = fRec22_tmp[(vsize + j117)]; + + } + for (int j123 = 0; (j123 < 4); j123 = (j123 + 1)) { + fRec20_perm[j123] = fRec20_tmp[(vsize + j123)]; + + } + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fRec18_perm[j125] = fRec18_tmp[(vsize + j125)]; + + } + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fRec19_perm[j133] = fRec19_tmp[(vsize + j133)]; + + } + for (int j139 = 0; (j139 < 4); j139 = (j139 + 1)) { + fRec17_perm[j139] = fRec17_tmp[(vsize + j139)]; + + } + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fRec15_perm[j141] = fRec15_tmp[(vsize + j141)]; + + } + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fRec16_perm[j149] = fRec16_tmp[(vsize + j149)]; + + } + for (int j155 = 0; (j155 < 4); j155 = (j155 + 1)) { + fRec14_perm[j155] = fRec14_tmp[(vsize + j155)]; + + } + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fRec12_perm[j157] = fRec12_tmp[(vsize + j157)]; + + } + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fRec13_perm[j165] = fRec13_tmp[(vsize + j165)]; + + } + for (int j171 = 0; (j171 < 4); j171 = (j171 + 1)) { + fRec11_perm[j171] = fRec11_tmp[(vsize + j171)]; + + } + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fRec9_perm[j173] = fRec9_tmp[(vsize + j173)]; + + } + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fRec10_perm[j181] = fRec10_tmp[(vsize + j181)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec8_perm[j187] = fRec8_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec6_perm[j189] = fRec6_tmp[(vsize + j189)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec7_perm[j197] = fRec7_tmp[(vsize + j197)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec5_perm[j203] = fRec5_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec3_perm[j205] = fRec3_tmp[(vsize + j205)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec4_perm[j213] = fRec4_tmp[(vsize + j213)]; + + } + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fRec2_perm[j217] = fRec2_tmp[(vsize + j217)]; + + } + fRec0_idx_save = vsize; + fRec1_idx_save = vsize; + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[((i + fRec0_idx) & 1023)]); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[((i + fRec1_idx) & 1023)]); + + } + + } + } -}; - +}; //---------------------------------------------------------------------------- // SuperCollider/Faust interface @@ -1087,7 +5332,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1170,9 +5415,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1277,7 +5522,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1340,7 +5585,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1369,9 +5614,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF + +#endif diff --git a/source/DEINDUGens/JPverbRaw.cpp b/source/DEINDUGens/JPverbRaw.cpp index 013752dc7f..20a4f2b01f 100644 --- a/source/DEINDUGens/JPverbRaw.cpp +++ b/source/DEINDUGens/JPverbRaw.cpp @@ -1,32 +1,15 @@ -//---------------------------------------------------------- -// copyright: "(c) Julian Parker 2013" -// name: "JPverbRaw" -// version: "1.1" -// author: "Julian Parker, bug fixes by Till Bovermann" -// license: "GPL2+" -// -// Code generated with Faust 0.9.98 (http://faust.grame.fr) -//---------------------------------------------------------- +/* ------------------------------------------------------------ +author: "Julian Parker, bug fixes by Till Bovermann" +copyright: "(c) Julian Parker 2013" +license: "GPL2+" +name: "JPverbRaw" +version: "1.1" +Code generated with Faust 2.15.11 (https://faust.grame.fr) +Compilation options: -vec -lv 0 -vs 8 -ftz 0 -mcd 16 +------------------------------------------------------------ */ -/* link with : "primes" */ -#include -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline float faustpower(float x) { return faustpower(x) * faustpower(x); } -template <> inline float faustpower<0>(float x) { return 1; } -template <> inline float faustpower<1>(float x) { return x; } -template <> inline float faustpower<2>(float x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -48,6 +31,11 @@ template <> inline float faustpower<2>(float x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + #include #include #include @@ -60,9 +48,15 @@ template <> inline float faustpower<2>(float x) { return x*x; } using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -94,7 +88,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -123,6 +117,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -190,8 +186,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -221,1141 +218,7167 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "primes" */ +#include +#include +#include +#include + +static float mydsp_faustpower2_f(float value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - int iVec0[2]; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - FAUSTFLOAT fslider4; - float fConst0; - float fConst1; - FAUSTFLOAT fslider5; - float fRec45[2]; - int IOTA; - float fVec1[16384]; - float fRec52[2]; - float fRec51[2]; - float fRec49[2]; - float fVec2[16384]; - float fRec54[2]; - float fRec53[2]; - float fRec50[2]; - float fVec3[16384]; - float fRec55[2]; - float fRec48[2]; - float fRec46[2]; - float fVec4[16384]; - float fRec57[2]; - float fRec56[2]; - float fRec47[2]; - float fVec5[16384]; - float fRec44[2]; - float fRec42[2]; - float fVec6[16384]; - float fRec59[2]; - float fRec58[2]; - float fRec43[2]; - float fVec7[16384]; - float fRec60[2]; - float fRec41[2]; - float fRec39[2]; - float fVec8[16384]; - float fRec62[2]; - float fRec61[2]; - float fRec40[2]; - float fVec9[16384]; - float fRec63[2]; - float fRec38[2]; - float fRec36[2]; - float fRec65[2]; - float fVec10[16384]; - float fRec64[2]; - float fRec37[2]; - float fVec11[1024]; - FAUSTFLOAT fslider6; - float fConst2; - FAUSTFLOAT fslider7; - float fRec66[2]; - float fRec67[2]; - float fVec12[16384]; - float fRec68[2]; - float fRec35[2]; - float fVec13[1024]; - float fVec14[16384]; - float fRec70[2]; - float fRec69[2]; - float fVec15[16384]; - float fRec71[2]; - float fRec34[2]; - float fRec32[2]; - float fVec16[16384]; - float fRec73[2]; - float fRec72[2]; - float fRec33[2]; - float fVec17[16384]; - float fRec74[2]; - float fRec31[2]; - float fRec29[2]; - float fVec18[16384]; - float fRec76[2]; - float fRec75[2]; - float fRec30[2]; - float fVec19[16384]; - float fRec77[2]; - float fRec28[2]; - float fRec26[2]; - float fVec20[16384]; - float fRec79[2]; - float fRec78[2]; - float fRec27[2]; - float fVec21[16384]; - float fRec80[2]; - float fRec25[2]; - float fRec23[2]; - float fVec22[16384]; - float fRec82[2]; - float fRec81[2]; - float fRec24[2]; - float fVec23[16384]; - float fRec83[2]; - float fRec22[2]; - float fRec20[2]; - float fVec24[16384]; - float fRec85[2]; - float fRec84[2]; - float fRec21[2]; - float fVec25[16384]; - float fVec26[16384]; - float fRec86[2]; - float fRec19[2]; - float fRec18[2]; - float fRec17[3]; - float fRec16[3]; - FAUSTFLOAT fslider8; - float fRec15[3]; - FAUSTFLOAT fslider9; - float fRec92[2]; - float fRec91[3]; - float fRec90[3]; - float fVec27[2]; - float fRec89[2]; - float fRec88[3]; - float fRec87[3]; - FAUSTFLOAT fslider10; - float fRec95[2]; - float fRec94[3]; - float fRec93[3]; - float fVec28[1024]; - float fRec14[2]; - float fVec29[16384]; - float fVec30[16384]; - float fRec102[2]; - float fRec101[2]; - float fRec100[2]; - float fRec99[3]; - float fRec98[3]; - float fRec97[3]; - float fRec108[2]; - float fRec107[3]; - float fRec106[3]; - float fVec31[2]; - float fRec105[2]; - float fRec104[3]; - float fRec103[3]; - float fRec111[2]; - float fRec110[3]; - float fRec109[3]; - float fVec32[1024]; - float fRec96[2]; - float fVec33[16384]; - float fRec13[2]; - float fRec11[2]; - float fVec34[16384]; - float fRec113[2]; - float fRec112[2]; - float fRec12[2]; - float fVec35[16384]; - float fRec10[2]; - float fRec8[2]; - float fVec36[16384]; - float fRec114[2]; - float fRec9[2]; - float fVec37[16384]; - float fRec7[2]; - float fRec5[2]; - float fVec38[16384]; - float fRec116[2]; - float fRec115[2]; - float fRec6[2]; - float fVec39[16384]; - float fRec117[2]; - float fRec4[2]; - float fRec2[2]; - float fVec40[16384]; - float fRec118[2]; - float fRec3[2]; - float fRec0[2]; - float fRec1[2]; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("copyright", "(c) Julian Parker 2013"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("name", "JPverbRaw"); - m->declare("version", "1.1"); + float fConst0; + float fConst1; + FAUSTFLOAT fHslider0; + float fRec15_perm[4]; + int iVec0_perm[4]; + float fRec16_perm[4]; + FAUSTFLOAT fHslider1; + float fRec53_perm[4]; + float fYec0[16384]; + int fYec0_idx; + int fYec0_idx_save; + float fYec1_perm[4]; + float fRec52_perm[4]; + float fRec50_perm[4]; + float fRec55_perm[4]; + float fYec2[16384]; + int fYec2_idx; + int fYec2_idx_save; + float fYec3_perm[4]; + float fRec54_perm[4]; + float fRec51_perm[4]; + float fRec56_perm[4]; + float fYec4[16384]; + int fYec4_idx; + int fYec4_idx_save; + float fYec5_perm[4]; + float fRec49_perm[4]; + float fRec47_perm[4]; + float fRec58_perm[4]; + float fYec6[16384]; + int fYec6_idx; + int fYec6_idx_save; + float fYec7_perm[4]; + float fRec57_perm[4]; + float fRec48_perm[4]; + float fRec59_perm[4]; + float fYec8[16384]; + int fYec8_idx; + int fYec8_idx_save; + float fYec9_perm[4]; + float fRec46_perm[4]; + float fRec44_perm[4]; + float fRec61_perm[4]; + float fYec10[16384]; + int fYec10_idx; + int fYec10_idx_save; + float fYec11_perm[4]; + float fRec60_perm[4]; + float fRec45_perm[4]; + float fRec62_perm[4]; + float fYec12[16384]; + int fYec12_idx; + int fYec12_idx_save; + float fYec13_perm[4]; + float fRec43_perm[4]; + float fRec41_perm[4]; + float fRec64_perm[4]; + float fYec14[16384]; + int fYec14_idx; + int fYec14_idx_save; + float fYec15_perm[4]; + float fRec63_perm[4]; + float fRec42_perm[4]; + float fRec65_perm[4]; + float fYec16[16384]; + int fYec16_idx; + int fYec16_idx_save; + float fYec17_perm[4]; + float fRec40_perm[4]; + float fRec38_perm[4]; + float fRec67_perm[4]; + float fYec18[16384]; + int fYec18_idx; + int fYec18_idx_save; + float fYec19_perm[4]; + float fRec66_perm[4]; + float fRec39_perm[4]; + float fRec68_perm[4]; + float fYec20[1024]; + int fYec20_idx; + int fYec20_idx_save; + FAUSTFLOAT fHslider2; + float fYec21[16384]; + int fYec21_idx; + int fYec21_idx_save; + float fYec22_perm[4]; + float fRec37_perm[4]; + float fRec70_perm[4]; + float fYec23[1024]; + int fYec23_idx; + int fYec23_idx_save; + float fYec24[16384]; + int fYec24_idx; + int fYec24_idx_save; + float fYec25_perm[4]; + float fRec69_perm[4]; + float fRec71_perm[4]; + float fYec26[16384]; + int fYec26_idx; + int fYec26_idx_save; + float fYec27_perm[4]; + float fRec36_perm[4]; + float fRec34_perm[4]; + float fRec73_perm[4]; + float fYec28[16384]; + int fYec28_idx; + int fYec28_idx_save; + float fYec29_perm[4]; + float fRec72_perm[4]; + float fRec35_perm[4]; + float fRec74_perm[4]; + float fYec30[16384]; + int fYec30_idx; + int fYec30_idx_save; + float fYec31_perm[4]; + float fRec33_perm[4]; + float fRec31_perm[4]; + float fRec76_perm[4]; + float fYec32[16384]; + int fYec32_idx; + int fYec32_idx_save; + float fYec33_perm[4]; + float fRec75_perm[4]; + float fRec32_perm[4]; + float fRec77_perm[4]; + float fYec34[16384]; + int fYec34_idx; + int fYec34_idx_save; + float fYec35_perm[4]; + float fRec30_perm[4]; + float fRec28_perm[4]; + float fRec79_perm[4]; + float fYec36[16384]; + int fYec36_idx; + int fYec36_idx_save; + float fYec37_perm[4]; + float fRec78_perm[4]; + float fRec29_perm[4]; + float fRec80_perm[4]; + float fYec38[16384]; + int fYec38_idx; + int fYec38_idx_save; + float fYec39_perm[4]; + float fRec27_perm[4]; + float fRec25_perm[4]; + float fRec82_perm[4]; + float fYec40[16384]; + int fYec40_idx; + int fYec40_idx_save; + float fYec41_perm[4]; + float fRec81_perm[4]; + float fRec26_perm[4]; + float fRec83_perm[4]; + float fYec42[16384]; + int fYec42_idx; + int fYec42_idx_save; + float fYec43_perm[4]; + float fRec24_perm[4]; + float fRec22_perm[4]; + float fRec85_perm[4]; + float fYec44[16384]; + int fYec44_idx; + int fYec44_idx_save; + float fYec45_perm[4]; + float fRec84_perm[4]; + float fRec23_perm[4]; + float fRec86_perm[4]; + float fYec46[16384]; + int fYec46_idx; + int fYec46_idx_save; + float fYec47[16384]; + int fYec47_idx; + int fYec47_idx_save; + float fYec48_perm[4]; + float fRec21_perm[4]; + float fConst2; + FAUSTFLOAT fHslider3; + float fRec20_perm[4]; + float fRec19_perm[4]; + float fRec18_perm[4]; + FAUSTFLOAT fHslider4; + float fRec17_perm[4]; + float fRec92_perm[4]; + float fRec91_perm[4]; + float fRec90_perm[4]; + float fYec49_perm[4]; + float fRec89_perm[4]; + float fRec88_perm[4]; + float fRec87_perm[4]; + float fRec95_perm[4]; + float fRec94_perm[4]; + float fRec93_perm[4]; + FAUSTFLOAT fHslider5; + FAUSTFLOAT fHslider6; + FAUSTFLOAT fHslider7; + FAUSTFLOAT fHslider8; + FAUSTFLOAT fHslider9; + float fYec50[1024]; + int fYec50_idx; + int fYec50_idx_save; + float fRec14_perm[4]; + float fRec102_perm[4]; + float fYec51[16384]; + int fYec51_idx; + int fYec51_idx_save; + float fYec52[16384]; + int fYec52_idx; + int fYec52_idx_save; + float fYec53_perm[4]; + float fRec101_perm[4]; + float fRec100_perm[4]; + float fRec99_perm[4]; + float fRec98_perm[4]; + float fRec97_perm[4]; + float fRec108_perm[4]; + float fRec107_perm[4]; + float fRec106_perm[4]; + float fYec54_perm[4]; + float fRec105_perm[4]; + float fRec104_perm[4]; + float fRec103_perm[4]; + float fRec111_perm[4]; + float fRec110_perm[4]; + float fRec109_perm[4]; + float fYec55[1024]; + int fYec55_idx; + int fYec55_idx_save; + float fRec96_perm[4]; + FAUSTFLOAT fHslider10; + float fYec56[16384]; + int fYec56_idx; + int fYec56_idx_save; + float fYec57_perm[4]; + float fRec13_perm[4]; + float fRec11_perm[4]; + float fRec113_perm[4]; + float fYec58[16384]; + int fYec58_idx; + int fYec58_idx_save; + float fYec59_perm[4]; + float fRec112_perm[4]; + float fRec12_perm[4]; + float fYec60[16384]; + int fYec60_idx; + int fYec60_idx_save; + float fYec61_perm[4]; + float fRec10_perm[4]; + float fRec8_perm[4]; + float fYec62[16384]; + int fYec62_idx; + int fYec62_idx_save; + float fYec63_perm[4]; + float fRec114_perm[4]; + float fRec9_perm[4]; + float fYec64[16384]; + int fYec64_idx; + int fYec64_idx_save; + float fYec65_perm[4]; + float fRec7_perm[4]; + float fRec5_perm[4]; + float fRec116_perm[4]; + float fYec66[16384]; + int fYec66_idx; + int fYec66_idx_save; + float fYec67_perm[4]; + float fRec115_perm[4]; + float fRec6_perm[4]; + float fRec117_perm[4]; + float fYec68[16384]; + int fYec68_idx; + int fYec68_idx_save; + float fYec69_perm[4]; + float fRec4_perm[4]; + float fRec2_perm[4]; + float fYec70[16384]; + int fYec70_idx; + int fYec70_idx_save; + float fYec71_perm[4]; + float fRec118_perm[4]; + float fRec3_perm[4]; + float fRec0_perm[4]; + float fRec1_perm[4]; + + public: + + void metadata(Meta* m) { + m->declare("analyzers.lib/name", "Faust Analyzer Library"); + m->declare("analyzers.lib/version", "0.0"); m->declare("author", "Julian Parker, bug fixes by Till Bovermann"); - m->declare("license", "GPL2+"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Julian Parker 2013"); + m->declare("delays.lib/name", "Faust Delay Library"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "JPverbRaw"); m->declare("filters.lib/name", "Faust Filters Library"); m->declare("filters.lib/version", "0.0"); - m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("oscillators.lib/name", "Faust Oscillator Library"); - m->declare("oscillators.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("license", "GPL2+"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "JPverbRaw"); + m->declare("oscillators.lib/name", "Faust Oscillator Library"); + m->declare("oscillators.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.1"); } - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 2; } + virtual int getNumInputs() { + return 2; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 0; + break; + } + case 1: { + rate = 0; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05f, max(1e+03f, (float)fSamplingFreq)); - fConst1 = (3.1415927f / fConst0); - fConst2 = (6.2831855f / fConst0); + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + fConst1 = (6.28318548f / fConst0); + fConst2 = (3.14159274f / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.707f; - fslider1 = 0.0f; - fslider2 = 1.0f; - fslider3 = 1.0f; - fslider4 = 1.0f; - fslider5 = 2e+03f; - fslider6 = 0.1f; - fslider7 = 2.0f; - fslider8 = 5e+02f; - fslider9 = 1.0f; - fslider10 = 1.0f; + fHslider0 = FAUSTFLOAT(2.0f); + fHslider1 = FAUSTFLOAT(1.0f); + fHslider2 = FAUSTFLOAT(0.10000000000000001f); + fHslider3 = FAUSTFLOAT(2000.0f); + fHslider4 = FAUSTFLOAT(500.0f); + fHslider5 = FAUSTFLOAT(0.0f); + fHslider6 = FAUSTFLOAT(1.0f); + fHslider7 = FAUSTFLOAT(1.0f); + fHslider8 = FAUSTFLOAT(1.0f); + fHslider9 = FAUSTFLOAT(1.0f); + fHslider10 = FAUSTFLOAT(0.70699999999999996f); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) iVec0[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - IOTA = 0; - for (int i=0; i<16384; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<16384; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<16384; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<16384; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<16384; i++) fVec5[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<16384; i++) fVec6[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<16384; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<16384; i++) fVec8[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<16384; i++) fVec9[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<16384; i++) fVec10[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<1024; i++) fVec11[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<16384; i++) fVec12[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<1024; i++) fVec13[i] = 0; - for (int i=0; i<16384; i++) fVec14[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<16384; i++) fVec15[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<16384; i++) fVec16[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<16384; i++) fVec17[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<16384; i++) fVec18[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<16384; i++) fVec19[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<16384; i++) fVec20[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<16384; i++) fVec21[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<16384; i++) fVec22[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<16384; i++) fVec23[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<16384; i++) fVec24[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<16384; i++) fVec25[i] = 0; - for (int i=0; i<16384; i++) fVec26[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<3; i++) fRec17[i] = 0; - for (int i=0; i<3; i++) fRec16[i] = 0; - for (int i=0; i<3; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<3; i++) fRec91[i] = 0; - for (int i=0; i<3; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fVec27[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<3; i++) fRec88[i] = 0; - for (int i=0; i<3; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<3; i++) fRec94[i] = 0; - for (int i=0; i<3; i++) fRec93[i] = 0; - for (int i=0; i<1024; i++) fVec28[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<16384; i++) fVec29[i] = 0; - for (int i=0; i<16384; i++) fVec30[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<3; i++) fRec99[i] = 0; - for (int i=0; i<3; i++) fRec98[i] = 0; - for (int i=0; i<3; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<3; i++) fRec107[i] = 0; - for (int i=0; i<3; i++) fRec106[i] = 0; - for (int i=0; i<2; i++) fVec31[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; - for (int i=0; i<3; i++) fRec104[i] = 0; - for (int i=0; i<3; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; - for (int i=0; i<3; i++) fRec110[i] = 0; - for (int i=0; i<3; i++) fRec109[i] = 0; - for (int i=0; i<1024; i++) fVec32[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<16384; i++) fVec33[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<16384; i++) fVec34[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<16384; i++) fVec35[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<16384; i++) fVec36[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<16384; i++) fVec37[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<16384; i++) fVec38[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<16384; i++) fVec39[i] = 0; - for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<16384; i++) fVec40[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; + for (int l0 = 0; (l0 < 4); l0 = (l0 + 1)) { + fRec15_perm[l0] = 0.0f; + + } + for (int l1 = 0; (l1 < 4); l1 = (l1 + 1)) { + iVec0_perm[l1] = 0; + + } + for (int l2 = 0; (l2 < 4); l2 = (l2 + 1)) { + fRec16_perm[l2] = 0.0f; + + } + for (int l3 = 0; (l3 < 4); l3 = (l3 + 1)) { + fRec53_perm[l3] = 0.0f; + + } + for (int l4 = 0; (l4 < 16384); l4 = (l4 + 1)) { + fYec0[l4] = 0.0f; + + } + fYec0_idx = 0; + fYec0_idx_save = 0; + for (int l5 = 0; (l5 < 4); l5 = (l5 + 1)) { + fYec1_perm[l5] = 0.0f; + + } + for (int l6 = 0; (l6 < 4); l6 = (l6 + 1)) { + fRec52_perm[l6] = 0.0f; + + } + for (int l7 = 0; (l7 < 4); l7 = (l7 + 1)) { + fRec50_perm[l7] = 0.0f; + + } + for (int l8 = 0; (l8 < 4); l8 = (l8 + 1)) { + fRec55_perm[l8] = 0.0f; + + } + for (int l9 = 0; (l9 < 16384); l9 = (l9 + 1)) { + fYec2[l9] = 0.0f; + + } + fYec2_idx = 0; + fYec2_idx_save = 0; + for (int l10 = 0; (l10 < 4); l10 = (l10 + 1)) { + fYec3_perm[l10] = 0.0f; + + } + for (int l11 = 0; (l11 < 4); l11 = (l11 + 1)) { + fRec54_perm[l11] = 0.0f; + + } + for (int l12 = 0; (l12 < 4); l12 = (l12 + 1)) { + fRec51_perm[l12] = 0.0f; + + } + for (int l13 = 0; (l13 < 4); l13 = (l13 + 1)) { + fRec56_perm[l13] = 0.0f; + + } + for (int l14 = 0; (l14 < 16384); l14 = (l14 + 1)) { + fYec4[l14] = 0.0f; + + } + fYec4_idx = 0; + fYec4_idx_save = 0; + for (int l15 = 0; (l15 < 4); l15 = (l15 + 1)) { + fYec5_perm[l15] = 0.0f; + + } + for (int l16 = 0; (l16 < 4); l16 = (l16 + 1)) { + fRec49_perm[l16] = 0.0f; + + } + for (int l17 = 0; (l17 < 4); l17 = (l17 + 1)) { + fRec47_perm[l17] = 0.0f; + + } + for (int l18 = 0; (l18 < 4); l18 = (l18 + 1)) { + fRec58_perm[l18] = 0.0f; + + } + for (int l19 = 0; (l19 < 16384); l19 = (l19 + 1)) { + fYec6[l19] = 0.0f; + + } + fYec6_idx = 0; + fYec6_idx_save = 0; + for (int l20 = 0; (l20 < 4); l20 = (l20 + 1)) { + fYec7_perm[l20] = 0.0f; + + } + for (int l21 = 0; (l21 < 4); l21 = (l21 + 1)) { + fRec57_perm[l21] = 0.0f; + + } + for (int l22 = 0; (l22 < 4); l22 = (l22 + 1)) { + fRec48_perm[l22] = 0.0f; + + } + for (int l23 = 0; (l23 < 4); l23 = (l23 + 1)) { + fRec59_perm[l23] = 0.0f; + + } + for (int l24 = 0; (l24 < 16384); l24 = (l24 + 1)) { + fYec8[l24] = 0.0f; + + } + fYec8_idx = 0; + fYec8_idx_save = 0; + for (int l25 = 0; (l25 < 4); l25 = (l25 + 1)) { + fYec9_perm[l25] = 0.0f; + + } + for (int l26 = 0; (l26 < 4); l26 = (l26 + 1)) { + fRec46_perm[l26] = 0.0f; + + } + for (int l27 = 0; (l27 < 4); l27 = (l27 + 1)) { + fRec44_perm[l27] = 0.0f; + + } + for (int l28 = 0; (l28 < 4); l28 = (l28 + 1)) { + fRec61_perm[l28] = 0.0f; + + } + for (int l29 = 0; (l29 < 16384); l29 = (l29 + 1)) { + fYec10[l29] = 0.0f; + + } + fYec10_idx = 0; + fYec10_idx_save = 0; + for (int l30 = 0; (l30 < 4); l30 = (l30 + 1)) { + fYec11_perm[l30] = 0.0f; + + } + for (int l31 = 0; (l31 < 4); l31 = (l31 + 1)) { + fRec60_perm[l31] = 0.0f; + + } + for (int l32 = 0; (l32 < 4); l32 = (l32 + 1)) { + fRec45_perm[l32] = 0.0f; + + } + for (int l33 = 0; (l33 < 4); l33 = (l33 + 1)) { + fRec62_perm[l33] = 0.0f; + + } + for (int l34 = 0; (l34 < 16384); l34 = (l34 + 1)) { + fYec12[l34] = 0.0f; + + } + fYec12_idx = 0; + fYec12_idx_save = 0; + for (int l35 = 0; (l35 < 4); l35 = (l35 + 1)) { + fYec13_perm[l35] = 0.0f; + + } + for (int l36 = 0; (l36 < 4); l36 = (l36 + 1)) { + fRec43_perm[l36] = 0.0f; + + } + for (int l37 = 0; (l37 < 4); l37 = (l37 + 1)) { + fRec41_perm[l37] = 0.0f; + + } + for (int l38 = 0; (l38 < 4); l38 = (l38 + 1)) { + fRec64_perm[l38] = 0.0f; + + } + for (int l39 = 0; (l39 < 16384); l39 = (l39 + 1)) { + fYec14[l39] = 0.0f; + + } + fYec14_idx = 0; + fYec14_idx_save = 0; + for (int l40 = 0; (l40 < 4); l40 = (l40 + 1)) { + fYec15_perm[l40] = 0.0f; + + } + for (int l41 = 0; (l41 < 4); l41 = (l41 + 1)) { + fRec63_perm[l41] = 0.0f; + + } + for (int l42 = 0; (l42 < 4); l42 = (l42 + 1)) { + fRec42_perm[l42] = 0.0f; + + } + for (int l43 = 0; (l43 < 4); l43 = (l43 + 1)) { + fRec65_perm[l43] = 0.0f; + + } + for (int l44 = 0; (l44 < 16384); l44 = (l44 + 1)) { + fYec16[l44] = 0.0f; + + } + fYec16_idx = 0; + fYec16_idx_save = 0; + for (int l45 = 0; (l45 < 4); l45 = (l45 + 1)) { + fYec17_perm[l45] = 0.0f; + + } + for (int l46 = 0; (l46 < 4); l46 = (l46 + 1)) { + fRec40_perm[l46] = 0.0f; + + } + for (int l47 = 0; (l47 < 4); l47 = (l47 + 1)) { + fRec38_perm[l47] = 0.0f; + + } + for (int l48 = 0; (l48 < 4); l48 = (l48 + 1)) { + fRec67_perm[l48] = 0.0f; + + } + for (int l49 = 0; (l49 < 16384); l49 = (l49 + 1)) { + fYec18[l49] = 0.0f; + + } + fYec18_idx = 0; + fYec18_idx_save = 0; + for (int l50 = 0; (l50 < 4); l50 = (l50 + 1)) { + fYec19_perm[l50] = 0.0f; + + } + for (int l51 = 0; (l51 < 4); l51 = (l51 + 1)) { + fRec66_perm[l51] = 0.0f; + + } + for (int l52 = 0; (l52 < 4); l52 = (l52 + 1)) { + fRec39_perm[l52] = 0.0f; + + } + for (int l53 = 0; (l53 < 4); l53 = (l53 + 1)) { + fRec68_perm[l53] = 0.0f; + + } + for (int l54 = 0; (l54 < 1024); l54 = (l54 + 1)) { + fYec20[l54] = 0.0f; + + } + fYec20_idx = 0; + fYec20_idx_save = 0; + for (int l55 = 0; (l55 < 16384); l55 = (l55 + 1)) { + fYec21[l55] = 0.0f; + + } + fYec21_idx = 0; + fYec21_idx_save = 0; + for (int l56 = 0; (l56 < 4); l56 = (l56 + 1)) { + fYec22_perm[l56] = 0.0f; + + } + for (int l57 = 0; (l57 < 4); l57 = (l57 + 1)) { + fRec37_perm[l57] = 0.0f; + + } + for (int l58 = 0; (l58 < 4); l58 = (l58 + 1)) { + fRec70_perm[l58] = 0.0f; + + } + for (int l59 = 0; (l59 < 1024); l59 = (l59 + 1)) { + fYec23[l59] = 0.0f; + + } + fYec23_idx = 0; + fYec23_idx_save = 0; + for (int l60 = 0; (l60 < 16384); l60 = (l60 + 1)) { + fYec24[l60] = 0.0f; + + } + fYec24_idx = 0; + fYec24_idx_save = 0; + for (int l61 = 0; (l61 < 4); l61 = (l61 + 1)) { + fYec25_perm[l61] = 0.0f; + + } + for (int l62 = 0; (l62 < 4); l62 = (l62 + 1)) { + fRec69_perm[l62] = 0.0f; + + } + for (int l63 = 0; (l63 < 4); l63 = (l63 + 1)) { + fRec71_perm[l63] = 0.0f; + + } + for (int l64 = 0; (l64 < 16384); l64 = (l64 + 1)) { + fYec26[l64] = 0.0f; + + } + fYec26_idx = 0; + fYec26_idx_save = 0; + for (int l65 = 0; (l65 < 4); l65 = (l65 + 1)) { + fYec27_perm[l65] = 0.0f; + + } + for (int l66 = 0; (l66 < 4); l66 = (l66 + 1)) { + fRec36_perm[l66] = 0.0f; + + } + for (int l67 = 0; (l67 < 4); l67 = (l67 + 1)) { + fRec34_perm[l67] = 0.0f; + + } + for (int l68 = 0; (l68 < 4); l68 = (l68 + 1)) { + fRec73_perm[l68] = 0.0f; + + } + for (int l69 = 0; (l69 < 16384); l69 = (l69 + 1)) { + fYec28[l69] = 0.0f; + + } + fYec28_idx = 0; + fYec28_idx_save = 0; + for (int l70 = 0; (l70 < 4); l70 = (l70 + 1)) { + fYec29_perm[l70] = 0.0f; + + } + for (int l71 = 0; (l71 < 4); l71 = (l71 + 1)) { + fRec72_perm[l71] = 0.0f; + + } + for (int l72 = 0; (l72 < 4); l72 = (l72 + 1)) { + fRec35_perm[l72] = 0.0f; + + } + for (int l73 = 0; (l73 < 4); l73 = (l73 + 1)) { + fRec74_perm[l73] = 0.0f; + + } + for (int l74 = 0; (l74 < 16384); l74 = (l74 + 1)) { + fYec30[l74] = 0.0f; + + } + fYec30_idx = 0; + fYec30_idx_save = 0; + for (int l75 = 0; (l75 < 4); l75 = (l75 + 1)) { + fYec31_perm[l75] = 0.0f; + + } + for (int l76 = 0; (l76 < 4); l76 = (l76 + 1)) { + fRec33_perm[l76] = 0.0f; + + } + for (int l77 = 0; (l77 < 4); l77 = (l77 + 1)) { + fRec31_perm[l77] = 0.0f; + + } + for (int l78 = 0; (l78 < 4); l78 = (l78 + 1)) { + fRec76_perm[l78] = 0.0f; + + } + for (int l79 = 0; (l79 < 16384); l79 = (l79 + 1)) { + fYec32[l79] = 0.0f; + + } + fYec32_idx = 0; + fYec32_idx_save = 0; + for (int l80 = 0; (l80 < 4); l80 = (l80 + 1)) { + fYec33_perm[l80] = 0.0f; + + } + for (int l81 = 0; (l81 < 4); l81 = (l81 + 1)) { + fRec75_perm[l81] = 0.0f; + + } + for (int l82 = 0; (l82 < 4); l82 = (l82 + 1)) { + fRec32_perm[l82] = 0.0f; + + } + for (int l83 = 0; (l83 < 4); l83 = (l83 + 1)) { + fRec77_perm[l83] = 0.0f; + + } + for (int l84 = 0; (l84 < 16384); l84 = (l84 + 1)) { + fYec34[l84] = 0.0f; + + } + fYec34_idx = 0; + fYec34_idx_save = 0; + for (int l85 = 0; (l85 < 4); l85 = (l85 + 1)) { + fYec35_perm[l85] = 0.0f; + + } + for (int l86 = 0; (l86 < 4); l86 = (l86 + 1)) { + fRec30_perm[l86] = 0.0f; + + } + for (int l87 = 0; (l87 < 4); l87 = (l87 + 1)) { + fRec28_perm[l87] = 0.0f; + + } + for (int l88 = 0; (l88 < 4); l88 = (l88 + 1)) { + fRec79_perm[l88] = 0.0f; + + } + for (int l89 = 0; (l89 < 16384); l89 = (l89 + 1)) { + fYec36[l89] = 0.0f; + + } + fYec36_idx = 0; + fYec36_idx_save = 0; + for (int l90 = 0; (l90 < 4); l90 = (l90 + 1)) { + fYec37_perm[l90] = 0.0f; + + } + for (int l91 = 0; (l91 < 4); l91 = (l91 + 1)) { + fRec78_perm[l91] = 0.0f; + + } + for (int l92 = 0; (l92 < 4); l92 = (l92 + 1)) { + fRec29_perm[l92] = 0.0f; + + } + for (int l93 = 0; (l93 < 4); l93 = (l93 + 1)) { + fRec80_perm[l93] = 0.0f; + + } + for (int l94 = 0; (l94 < 16384); l94 = (l94 + 1)) { + fYec38[l94] = 0.0f; + + } + fYec38_idx = 0; + fYec38_idx_save = 0; + for (int l95 = 0; (l95 < 4); l95 = (l95 + 1)) { + fYec39_perm[l95] = 0.0f; + + } + for (int l96 = 0; (l96 < 4); l96 = (l96 + 1)) { + fRec27_perm[l96] = 0.0f; + + } + for (int l97 = 0; (l97 < 4); l97 = (l97 + 1)) { + fRec25_perm[l97] = 0.0f; + + } + for (int l98 = 0; (l98 < 4); l98 = (l98 + 1)) { + fRec82_perm[l98] = 0.0f; + + } + for (int l99 = 0; (l99 < 16384); l99 = (l99 + 1)) { + fYec40[l99] = 0.0f; + + } + fYec40_idx = 0; + fYec40_idx_save = 0; + for (int l100 = 0; (l100 < 4); l100 = (l100 + 1)) { + fYec41_perm[l100] = 0.0f; + + } + for (int l101 = 0; (l101 < 4); l101 = (l101 + 1)) { + fRec81_perm[l101] = 0.0f; + + } + for (int l102 = 0; (l102 < 4); l102 = (l102 + 1)) { + fRec26_perm[l102] = 0.0f; + + } + for (int l103 = 0; (l103 < 4); l103 = (l103 + 1)) { + fRec83_perm[l103] = 0.0f; + + } + for (int l104 = 0; (l104 < 16384); l104 = (l104 + 1)) { + fYec42[l104] = 0.0f; + + } + fYec42_idx = 0; + fYec42_idx_save = 0; + for (int l105 = 0; (l105 < 4); l105 = (l105 + 1)) { + fYec43_perm[l105] = 0.0f; + + } + for (int l106 = 0; (l106 < 4); l106 = (l106 + 1)) { + fRec24_perm[l106] = 0.0f; + + } + for (int l107 = 0; (l107 < 4); l107 = (l107 + 1)) { + fRec22_perm[l107] = 0.0f; + + } + for (int l108 = 0; (l108 < 4); l108 = (l108 + 1)) { + fRec85_perm[l108] = 0.0f; + + } + for (int l109 = 0; (l109 < 16384); l109 = (l109 + 1)) { + fYec44[l109] = 0.0f; + + } + fYec44_idx = 0; + fYec44_idx_save = 0; + for (int l110 = 0; (l110 < 4); l110 = (l110 + 1)) { + fYec45_perm[l110] = 0.0f; + + } + for (int l111 = 0; (l111 < 4); l111 = (l111 + 1)) { + fRec84_perm[l111] = 0.0f; + + } + for (int l112 = 0; (l112 < 4); l112 = (l112 + 1)) { + fRec23_perm[l112] = 0.0f; + + } + for (int l113 = 0; (l113 < 4); l113 = (l113 + 1)) { + fRec86_perm[l113] = 0.0f; + + } + for (int l114 = 0; (l114 < 16384); l114 = (l114 + 1)) { + fYec46[l114] = 0.0f; + + } + fYec46_idx = 0; + fYec46_idx_save = 0; + for (int l115 = 0; (l115 < 16384); l115 = (l115 + 1)) { + fYec47[l115] = 0.0f; + + } + fYec47_idx = 0; + fYec47_idx_save = 0; + for (int l116 = 0; (l116 < 4); l116 = (l116 + 1)) { + fYec48_perm[l116] = 0.0f; + + } + for (int l117 = 0; (l117 < 4); l117 = (l117 + 1)) { + fRec21_perm[l117] = 0.0f; + + } + for (int l118 = 0; (l118 < 4); l118 = (l118 + 1)) { + fRec20_perm[l118] = 0.0f; + + } + for (int l119 = 0; (l119 < 4); l119 = (l119 + 1)) { + fRec19_perm[l119] = 0.0f; + + } + for (int l120 = 0; (l120 < 4); l120 = (l120 + 1)) { + fRec18_perm[l120] = 0.0f; + + } + for (int l121 = 0; (l121 < 4); l121 = (l121 + 1)) { + fRec17_perm[l121] = 0.0f; + + } + for (int l122 = 0; (l122 < 4); l122 = (l122 + 1)) { + fRec92_perm[l122] = 0.0f; + + } + for (int l123 = 0; (l123 < 4); l123 = (l123 + 1)) { + fRec91_perm[l123] = 0.0f; + + } + for (int l124 = 0; (l124 < 4); l124 = (l124 + 1)) { + fRec90_perm[l124] = 0.0f; + + } + for (int l125 = 0; (l125 < 4); l125 = (l125 + 1)) { + fYec49_perm[l125] = 0.0f; + + } + for (int l126 = 0; (l126 < 4); l126 = (l126 + 1)) { + fRec89_perm[l126] = 0.0f; + + } + for (int l127 = 0; (l127 < 4); l127 = (l127 + 1)) { + fRec88_perm[l127] = 0.0f; + + } + for (int l128 = 0; (l128 < 4); l128 = (l128 + 1)) { + fRec87_perm[l128] = 0.0f; + + } + for (int l129 = 0; (l129 < 4); l129 = (l129 + 1)) { + fRec95_perm[l129] = 0.0f; + + } + for (int l130 = 0; (l130 < 4); l130 = (l130 + 1)) { + fRec94_perm[l130] = 0.0f; + + } + for (int l131 = 0; (l131 < 4); l131 = (l131 + 1)) { + fRec93_perm[l131] = 0.0f; + + } + for (int l132 = 0; (l132 < 1024); l132 = (l132 + 1)) { + fYec50[l132] = 0.0f; + + } + fYec50_idx = 0; + fYec50_idx_save = 0; + for (int l133 = 0; (l133 < 4); l133 = (l133 + 1)) { + fRec14_perm[l133] = 0.0f; + + } + for (int l134 = 0; (l134 < 4); l134 = (l134 + 1)) { + fRec102_perm[l134] = 0.0f; + + } + for (int l135 = 0; (l135 < 16384); l135 = (l135 + 1)) { + fYec51[l135] = 0.0f; + + } + fYec51_idx = 0; + fYec51_idx_save = 0; + for (int l136 = 0; (l136 < 16384); l136 = (l136 + 1)) { + fYec52[l136] = 0.0f; + + } + fYec52_idx = 0; + fYec52_idx_save = 0; + for (int l137 = 0; (l137 < 4); l137 = (l137 + 1)) { + fYec53_perm[l137] = 0.0f; + + } + for (int l138 = 0; (l138 < 4); l138 = (l138 + 1)) { + fRec101_perm[l138] = 0.0f; + + } + for (int l139 = 0; (l139 < 4); l139 = (l139 + 1)) { + fRec100_perm[l139] = 0.0f; + + } + for (int l140 = 0; (l140 < 4); l140 = (l140 + 1)) { + fRec99_perm[l140] = 0.0f; + + } + for (int l141 = 0; (l141 < 4); l141 = (l141 + 1)) { + fRec98_perm[l141] = 0.0f; + + } + for (int l142 = 0; (l142 < 4); l142 = (l142 + 1)) { + fRec97_perm[l142] = 0.0f; + + } + for (int l143 = 0; (l143 < 4); l143 = (l143 + 1)) { + fRec108_perm[l143] = 0.0f; + + } + for (int l144 = 0; (l144 < 4); l144 = (l144 + 1)) { + fRec107_perm[l144] = 0.0f; + + } + for (int l145 = 0; (l145 < 4); l145 = (l145 + 1)) { + fRec106_perm[l145] = 0.0f; + + } + for (int l146 = 0; (l146 < 4); l146 = (l146 + 1)) { + fYec54_perm[l146] = 0.0f; + + } + for (int l147 = 0; (l147 < 4); l147 = (l147 + 1)) { + fRec105_perm[l147] = 0.0f; + + } + for (int l148 = 0; (l148 < 4); l148 = (l148 + 1)) { + fRec104_perm[l148] = 0.0f; + + } + for (int l149 = 0; (l149 < 4); l149 = (l149 + 1)) { + fRec103_perm[l149] = 0.0f; + + } + for (int l150 = 0; (l150 < 4); l150 = (l150 + 1)) { + fRec111_perm[l150] = 0.0f; + + } + for (int l151 = 0; (l151 < 4); l151 = (l151 + 1)) { + fRec110_perm[l151] = 0.0f; + + } + for (int l152 = 0; (l152 < 4); l152 = (l152 + 1)) { + fRec109_perm[l152] = 0.0f; + + } + for (int l153 = 0; (l153 < 1024); l153 = (l153 + 1)) { + fYec55[l153] = 0.0f; + + } + fYec55_idx = 0; + fYec55_idx_save = 0; + for (int l154 = 0; (l154 < 4); l154 = (l154 + 1)) { + fRec96_perm[l154] = 0.0f; + + } + for (int l155 = 0; (l155 < 16384); l155 = (l155 + 1)) { + fYec56[l155] = 0.0f; + + } + fYec56_idx = 0; + fYec56_idx_save = 0; + for (int l156 = 0; (l156 < 4); l156 = (l156 + 1)) { + fYec57_perm[l156] = 0.0f; + + } + for (int l157 = 0; (l157 < 4); l157 = (l157 + 1)) { + fRec13_perm[l157] = 0.0f; + + } + for (int l158 = 0; (l158 < 4); l158 = (l158 + 1)) { + fRec11_perm[l158] = 0.0f; + + } + for (int l159 = 0; (l159 < 4); l159 = (l159 + 1)) { + fRec113_perm[l159] = 0.0f; + + } + for (int l160 = 0; (l160 < 16384); l160 = (l160 + 1)) { + fYec58[l160] = 0.0f; + + } + fYec58_idx = 0; + fYec58_idx_save = 0; + for (int l161 = 0; (l161 < 4); l161 = (l161 + 1)) { + fYec59_perm[l161] = 0.0f; + + } + for (int l162 = 0; (l162 < 4); l162 = (l162 + 1)) { + fRec112_perm[l162] = 0.0f; + + } + for (int l163 = 0; (l163 < 4); l163 = (l163 + 1)) { + fRec12_perm[l163] = 0.0f; + + } + for (int l164 = 0; (l164 < 16384); l164 = (l164 + 1)) { + fYec60[l164] = 0.0f; + + } + fYec60_idx = 0; + fYec60_idx_save = 0; + for (int l165 = 0; (l165 < 4); l165 = (l165 + 1)) { + fYec61_perm[l165] = 0.0f; + + } + for (int l166 = 0; (l166 < 4); l166 = (l166 + 1)) { + fRec10_perm[l166] = 0.0f; + + } + for (int l167 = 0; (l167 < 4); l167 = (l167 + 1)) { + fRec8_perm[l167] = 0.0f; + + } + for (int l168 = 0; (l168 < 16384); l168 = (l168 + 1)) { + fYec62[l168] = 0.0f; + + } + fYec62_idx = 0; + fYec62_idx_save = 0; + for (int l169 = 0; (l169 < 4); l169 = (l169 + 1)) { + fYec63_perm[l169] = 0.0f; + + } + for (int l170 = 0; (l170 < 4); l170 = (l170 + 1)) { + fRec114_perm[l170] = 0.0f; + + } + for (int l171 = 0; (l171 < 4); l171 = (l171 + 1)) { + fRec9_perm[l171] = 0.0f; + + } + for (int l172 = 0; (l172 < 16384); l172 = (l172 + 1)) { + fYec64[l172] = 0.0f; + + } + fYec64_idx = 0; + fYec64_idx_save = 0; + for (int l173 = 0; (l173 < 4); l173 = (l173 + 1)) { + fYec65_perm[l173] = 0.0f; + + } + for (int l174 = 0; (l174 < 4); l174 = (l174 + 1)) { + fRec7_perm[l174] = 0.0f; + + } + for (int l175 = 0; (l175 < 4); l175 = (l175 + 1)) { + fRec5_perm[l175] = 0.0f; + + } + for (int l176 = 0; (l176 < 4); l176 = (l176 + 1)) { + fRec116_perm[l176] = 0.0f; + + } + for (int l177 = 0; (l177 < 16384); l177 = (l177 + 1)) { + fYec66[l177] = 0.0f; + + } + fYec66_idx = 0; + fYec66_idx_save = 0; + for (int l178 = 0; (l178 < 4); l178 = (l178 + 1)) { + fYec67_perm[l178] = 0.0f; + + } + for (int l179 = 0; (l179 < 4); l179 = (l179 + 1)) { + fRec115_perm[l179] = 0.0f; + + } + for (int l180 = 0; (l180 < 4); l180 = (l180 + 1)) { + fRec6_perm[l180] = 0.0f; + + } + for (int l181 = 0; (l181 < 4); l181 = (l181 + 1)) { + fRec117_perm[l181] = 0.0f; + + } + for (int l182 = 0; (l182 < 16384); l182 = (l182 + 1)) { + fYec68[l182] = 0.0f; + + } + fYec68_idx = 0; + fYec68_idx_save = 0; + for (int l183 = 0; (l183 < 4); l183 = (l183 + 1)) { + fYec69_perm[l183] = 0.0f; + + } + for (int l184 = 0; (l184 < 4); l184 = (l184 + 1)) { + fRec4_perm[l184] = 0.0f; + + } + for (int l185 = 0; (l185 < 4); l185 = (l185 + 1)) { + fRec2_perm[l185] = 0.0f; + + } + for (int l186 = 0; (l186 < 16384); l186 = (l186 + 1)) { + fYec70[l186] = 0.0f; + + } + fYec70_idx = 0; + fYec70_idx_save = 0; + for (int l187 = 0; (l187 < 4); l187 = (l187 + 1)) { + fYec71_perm[l187] = 0.0f; + + } + for (int l188 = 0; (l188 < 4); l188 = (l188 + 1)) { + fRec118_perm[l188] = 0.0f; + + } + for (int l189 = 0; (l189 < 4); l189 = (l189 + 1)) { + fRec3_perm[l189] = 0.0f; + + } + for (int l190 = 0; (l190 < 4); l190 = (l190 + 1)) { + fRec0_perm[l190] = 0.0f; + + } + for (int l191 = 0; (l191 < 4); l191 = (l191 + 1)) { + fRec1_perm[l191] = 0.0f; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); } + virtual void instanceInit(int samplingFreq) { instanceConstants(samplingFreq); instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->addHorizontalSlider("damp", &fslider1, 0.0f, 0.0f, 0.999f, 0.0001f); - ui_interface->addHorizontalSlider("earlyDiff", &fslider0, 0.707f, 0.0f, 0.99f, 0.001f); - ui_interface->addHorizontalSlider("highBand", &fslider5, 2e+03f, 1e+03f, 1e+04f, 0.1f); - ui_interface->addHorizontalSlider("highX", &fslider4, 1.0f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("lowBand", &fslider8, 5e+02f, 1e+02f, 6e+03f, 0.1f); - ui_interface->addHorizontalSlider("lowX", &fslider10, 1.0f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("mDepth", &fslider6, 0.1f, 0.0f, 1.0f, 0.001f); - ui_interface->addHorizontalSlider("mFreq", &fslider7, 2.0f, 0.0f, 1e+01f, 0.01f); - ui_interface->addHorizontalSlider("midX", &fslider9, 1.0f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("size", &fslider2, 1.0f, 0.5f, 3.0f, 0.01f); - ui_interface->addHorizontalSlider("t60", &fslider3, 1.0f, 0.1f, 6e+01f, 0.1f); + ui_interface->openVerticalBox("JPverbRaw"); + ui_interface->addHorizontalSlider("damp", &fHslider5, 0.0f, 0.0f, 0.999000013f, 9.99999975e-05f); + ui_interface->addHorizontalSlider("earlyDiff", &fHslider10, 0.707000017f, 0.0f, 0.99000001f, 0.00100000005f); + ui_interface->addHorizontalSlider("highBand", &fHslider3, 2000.0f, 1000.0f, 10000.0f, 0.100000001f); + ui_interface->addHorizontalSlider("highX", &fHslider7, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("lowBand", &fHslider4, 500.0f, 100.0f, 6000.0f, 0.100000001f); + ui_interface->addHorizontalSlider("lowX", &fHslider9, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("mDepth", &fHslider2, 0.100000001f, 0.0f, 1.0f, 0.00100000005f); + ui_interface->addHorizontalSlider("mFreq", &fHslider0, 2.0f, 0.0f, 10.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("midX", &fHslider8, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("size", &fHslider1, 1.0f, 0.5f, 3.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("t60", &fHslider6, 1.0f, 0.100000001f, 60.0f, 0.100000001f); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - float fSlow0 = float(fslider0); - float fSlow1 = cosf(fSlow0); - float fSlow2 = sinf(fSlow0); - float fSlow3 = (0 - fSlow2); - float fSlow4 = float(fslider1); - float fSlow5 = (1.0f - fSlow4); - float fSlow6 = float(fslider2); - float fSlow7 = powf(10,(0 - (0.51f * (((1.25f * fSlow6) + -0.25f) / float(fslider3))))); - float fSlow8 = float(fslider4); - float fSlow9 = tanf((fConst1 * float(fslider5))); - float fSlow10 = (1.0f / fSlow9); - float fSlow11 = (((fSlow10 + 0.618034f) / fSlow9) + 1); - float fSlow12 = (1.0f / fSlow11); - float fSlow13 = (1.0f / faustpower<2>(fSlow9)); - float fSlow14 = (2 * (0 - fSlow13)); - float fSlow15 = (1.0f / (((fSlow10 + 1.618034f) / fSlow9) + 1)); - float fSlow16 = (fSlow10 + 1); - float fSlow17 = (1.0f / fSlow16); - int iSlow18 = primes((70 * fSlow6)); - float fSlow19 = (0.0001f * iSlow18); - int iSlow20 = primes((10 * fSlow6)); - float fSlow21 = (0.0001f * iSlow20); - int iSlow22 = primes((110 * fSlow6)); - float fSlow23 = (0.0001f * iSlow22); - int iSlow24 = primes((40 * fSlow6)); - float fSlow25 = (0.0001f * iSlow24); - int iSlow26 = primes((140 * fSlow6)); - float fSlow27 = (0.0001f * iSlow26); - int iSlow28 = primes((170 * fSlow6)); - float fSlow29 = (0.0001f * iSlow28); - int iSlow30 = primes((100 * fSlow6)); - float fSlow31 = (0.0001f * iSlow30); - int iSlow32 = primes((200 * fSlow6)); - float fSlow33 = (0.0001f * iSlow32); - int iSlow34 = primes((130 * fSlow6)); - float fSlow35 = (0.0001f * iSlow34); - int iSlow36 = primes((230 * fSlow6)); - float fSlow37 = (0.0001f * iSlow36); - float fSlow38 = float(fslider6); - float fSlow39 = (50 * fSlow38); - float fSlow40 = (fConst2 * float(fslider7)); - float fSlow41 = sinf(fSlow40); - float fSlow42 = cosf(fSlow40); - float fSlow43 = (0 - fSlow41); - int iSlow44 = primes((54 * fSlow6)); - float fSlow45 = (0.005f * iSlow44); - float fSlow46 = (0 - (5e+01f * fSlow38)); - int iSlow47 = primes((204 * fSlow6)); - float fSlow48 = (0.005f * iSlow47); - int iSlow49 = primes((125 * fSlow6)); - float fSlow50 = (0.0001f * iSlow49); - int iSlow51 = primes((25 * fSlow6)); - float fSlow52 = (0.0001f * iSlow51); - int iSlow53 = primes((155 * fSlow6)); - float fSlow54 = (0.0001f * iSlow53); - int iSlow55 = primes((55 * fSlow6)); - float fSlow56 = (0.0001f * iSlow55); - int iSlow57 = primes((185 * fSlow6)); - float fSlow58 = (0.0001f * iSlow57); - int iSlow59 = primes((85 * fSlow6)); - float fSlow60 = (0.0001f * iSlow59); - int iSlow61 = primes((215 * fSlow6)); - float fSlow62 = (0.0001f * iSlow61); - int iSlow63 = primes((115 * fSlow6)); - float fSlow64 = (0.0001f * iSlow63); - int iSlow65 = primes((245 * fSlow6)); - float fSlow66 = (0.0001f * iSlow65); - int iSlow67 = primes((145 * fSlow6)); - float fSlow68 = (0.0001f * iSlow67); - int iSlow69 = primes((134 * fSlow6)); - float fSlow70 = (0.005f * iSlow69); - float fSlow71 = (0 - fSlow10); - float fSlow72 = (0 - ((1 - fSlow10) / fSlow16)); - float fSlow73 = (2 * (1 - fSlow13)); - float fSlow74 = (((fSlow10 + -1.618034f) / fSlow9) + 1); - float fSlow75 = (((fSlow10 + -0.618034f) / fSlow9) + 1); - float fSlow76 = tanf((fConst1 * float(fslider8))); - float fSlow77 = (1.0f / fSlow76); - float fSlow78 = (1.0f / (((fSlow77 + 1.618034f) / fSlow76) + 1)); - float fSlow79 = (((fSlow77 + -1.618034f) / fSlow76) + 1); - float fSlow80 = (1.0f / faustpower<2>(fSlow76)); - float fSlow81 = (2 * (1 - fSlow80)); - float fSlow82 = (1.0f / (((fSlow77 + 0.618034f) / fSlow76) + 1)); - float fSlow83 = float(fslider9); - float fSlow84 = (2 * (0 - fSlow80)); - float fSlow85 = (1.0f / (((fSlow77 + 1.618034f) / fSlow76) + 1)); - float fSlow86 = (fSlow77 + 1); - float fSlow87 = (0 - ((1 - fSlow77) / fSlow86)); - float fSlow88 = (1.0f / fSlow86); - float fSlow89 = (0 - fSlow77); - float fSlow90 = (1.0f / (fSlow11 * fSlow76)); - float fSlow91 = (((fSlow77 + -1.618034f) / fSlow76) + 1); - float fSlow92 = (((fSlow77 + -0.618034f) / fSlow76) + 1); - float fSlow93 = float(fslider10); - int iSlow94 = primes((34 * fSlow6)); - float fSlow95 = (0.005f * iSlow94); - int iSlow96 = primes((240 * fSlow6)); - float fSlow97 = (0.0001f * iSlow96); - int iSlow98 = primes((190 * fSlow6)); - float fSlow99 = (0.0001f * iSlow98); - int iSlow100 = primes((175 * fSlow6)); - float fSlow101 = (0.0001f * iSlow100); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - for (int i=0; i(512, std::max(0, iZec41[i])); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (0.0f - fZec44[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (0.0f - (0.5f * fZec46[i])); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (0.0f - (0.333333343f * fZec48[i])); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (0.0f - (0.25f * fZec50[i])); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = (fZec39[i] + (5.0f - fZec43[i])); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec53[i] = std::min(512, std::max(0, (iZec41[i] + 1))); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = (0.0f - fZec46[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - (0.5f * fZec48[i])); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = (0.0f - (0.333333343f * fZec50[i])); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec57[i] = std::min(512, std::max(0, (iZec41[i] + 2))); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = (0.0f - fZec48[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec59[i] = (0.0f - (0.5f * fZec50[i])); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec61[i] = std::min(512, std::max(0, (iZec41[i] + 3))); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (0.0f - fZec50[i]); + + } + /* Vectorizable loop 115 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = (fZec60[i] * fZec48[i]); + + } + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec64[i] = std::min(512, std::max(0, (iZec41[i] + 4))); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec66[i] = std::floor(fZec65[i]); + + } + /* Vectorizable loop 118 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec69[i] = int(fZec68[i]); + + } + /* Vectorizable loop 119 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = (fSlow26 + (fZec67[i] + (2.0f - fZec70[i]))); + + } + /* Vectorizable loop 120 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fSlow26 + (fZec67[i] + (1.0f - fZec70[i]))); + + } + /* Vectorizable loop 121 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = (fZec71[i] * fZec72[i]); + + } + /* Vectorizable loop 122 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 123 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 124 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec83[i] = std::floor(fZec82[i]); + + } + /* Vectorizable loop 125 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec89[i] = std::floor(fZec88[i]); + + } + /* Vectorizable loop 126 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec91[i] = std::min(8192, std::max(0, int(fZec90[i]))); + + } + /* Vectorizable loop 127 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = (fZec92[i] + (2.0f - fRec76[i])); + + } + /* Vectorizable loop 128 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec76[i] - fZec92[i]); + + } + /* Vectorizable loop 129 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = std::floor(fZec99[i]); + + } + /* Vectorizable loop 130 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec102[i] = std::min(8192, std::max(0, int(fZec101[i]))); + + } + /* Vectorizable loop 131 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fZec103[i] + (2.0f - fRec79[i])); + + } + /* Vectorizable loop 132 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = (fRec79[i] - fZec103[i]); + + } + /* Vectorizable loop 133 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec111[i] = std::min(8192, std::max(0, int(fZec110[i]))); + + } + /* Vectorizable loop 134 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec113[i] = (fZec112[i] + (2.0f - fRec80[i])); + + } + /* Vectorizable loop 135 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec114[i] = (fRec80[i] - fZec112[i]); + + } + /* Vectorizable loop 136 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec116[i] = std::min(8192, std::max(0, int(fZec115[i]))); + + } + /* Vectorizable loop 137 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec118[i] = (fZec117[i] + (2.0f - fRec82[i])); + + } + /* Vectorizable loop 138 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec119[i] = (fRec82[i] - fZec117[i]); + + } + /* Vectorizable loop 139 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec125[i] = std::floor(fZec124[i]); + + } + /* Vectorizable loop 140 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec127[i] = std::min(8192, std::max(0, int(fZec126[i]))); + + } + /* Vectorizable loop 141 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec129[i] = (fZec128[i] + (2.0f - fRec85[i])); + + } + /* Vectorizable loop 142 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec130[i] = (fRec85[i] - fZec128[i]); + + } + /* Vectorizable loop 143 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec134[i] = std::max(0, iZec133[i]); + + } + /* Vectorizable loop 144 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec137[i] = (0.0f - fZec136[i]); + + } + /* Vectorizable loop 145 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec139[i] = (0.0f - (0.5f * fZec138[i])); + + } + /* Vectorizable loop 146 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec141[i] = (0.0f - (0.333333343f * fZec140[i])); + + } + /* Vectorizable loop 147 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec143[i] = (0.0f - (0.25f * fZec142[i])); + + } + /* Vectorizable loop 148 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec144[i] = (fZec131[i] + (5.0f - fZec135[i])); + + } + /* Vectorizable loop 149 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec145[i] = std::max(0, (iZec133[i] + 1)); + + } + /* Vectorizable loop 150 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec146[i] = (0.0f - fZec138[i]); + + } + /* Vectorizable loop 151 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec147[i] = (0.0f - (0.5f * fZec140[i])); + + } + /* Vectorizable loop 152 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec148[i] = (0.0f - (0.333333343f * fZec142[i])); + + } + /* Vectorizable loop 153 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec149[i] = std::max(0, (iZec133[i] + 2)); + + } + /* Vectorizable loop 154 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec150[i] = (0.0f - fZec140[i]); + + } + /* Vectorizable loop 155 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec151[i] = (0.0f - (0.5f * fZec142[i])); + + } + /* Vectorizable loop 156 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec153[i] = std::max(0, (iZec133[i] + 3)); + + } + /* Vectorizable loop 157 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec154[i] = (0.0f - fZec142[i]); + + } + /* Vectorizable loop 158 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec155[i] = (fZec152[i] * fZec140[i]); + + } + /* Vectorizable loop 159 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec156[i] = std::max(0, (iZec133[i] + 4)); + + } + /* Vectorizable loop 160 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec158[i] = std::floor(fZec157[i]); + + } + /* Vectorizable loop 161 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec163[i] = int(fZec162[i]); + + } + /* Vectorizable loop 162 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec167[i] = (fSlow26 + (fZec161[i] + (2.0f - fZec164[i]))); + + } + /* Vectorizable loop 163 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec168[i] = (fSlow26 + (fZec161[i] + (1.0f - fZec164[i]))); + + } + /* Vectorizable loop 164 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec169[i] = (fZec165[i] * fZec166[i]); + + } + /* Vectorizable loop 165 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec171[i] = std::floor(fZec170[i]); + + } + /* Vectorizable loop 166 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec177[i] = std::floor(fZec176[i]); + + } + /* Vectorizable loop 167 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec187[i] = std::floor(fZec186[i]); + + } + /* Vectorizable loop 168 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec193[i] = std::floor(fZec192[i]); + + } + /* Recursive loop 169 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 16383); + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fYec1_tmp[j8] = fYec1_perm[j8]; + + } + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec52_tmp[j10] = fRec52_perm[j10]; + + } + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + fRec50_tmp[j12] = fRec50_perm[j12]; + + } + fYec2_idx = ((fYec2_idx + fYec2_idx_save) & 16383); + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fYec3_tmp[j16] = fYec3_perm[j16]; + + } + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fRec54_tmp[j18] = fRec54_perm[j18]; + + } + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fRec51_tmp[j20] = fRec51_perm[j20]; + + } + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec5_tmp[j24] = fYec5_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec49_tmp[j26] = fRec49_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec47_tmp[j28] = fRec47_perm[j28]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec7_tmp[j32] = fYec7_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec57_tmp[j34] = fRec57_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec48_tmp[j36] = fRec48_perm[j36]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec9_tmp[j40] = fYec9_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec46_tmp[j42] = fRec46_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec44_tmp[j44] = fRec44_perm[j44]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec11_tmp[j48] = fYec11_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec60_tmp[j50] = fRec60_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec45_tmp[j52] = fRec45_perm[j52]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec13_tmp[j56] = fYec13_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec43_tmp[j58] = fRec43_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec41_tmp[j60] = fRec41_perm[j60]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec15_tmp[j64] = fYec15_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec63_tmp[j66] = fRec63_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec42_tmp[j68] = fRec42_perm[j68]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec17_tmp[j72] = fYec17_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec40_tmp[j74] = fRec40_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec38_tmp[j76] = fRec38_perm[j76]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec19_tmp[j80] = fYec19_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec66_tmp[j82] = fRec66_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec39_tmp[j84] = fRec39_perm[j84]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 1023); + fYec21_idx = ((fYec21_idx + fYec21_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec22_tmp[j88] = fYec22_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec37_tmp[j90] = fRec37_perm[j90]; + + } + fYec23_idx = ((fYec23_idx + fYec23_idx_save) & 1023); + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fYec25_tmp[j94] = fYec25_perm[j94]; + + } + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fRec69_tmp[j96] = fRec69_perm[j96]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fYec27_tmp[j100] = fYec27_perm[j100]; + + } + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec36_tmp[j102] = fRec36_perm[j102]; + + } + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fRec34_tmp[j104] = fRec34_perm[j104]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fYec29_tmp[j108] = fYec29_perm[j108]; + + } + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec72_tmp[j110] = fRec72_perm[j110]; + + } + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fRec35_tmp[j112] = fRec35_perm[j112]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fYec31_tmp[j116] = fYec31_perm[j116]; + + } + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec33_tmp[j118] = fRec33_perm[j118]; + + } + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fRec31_tmp[j120] = fRec31_perm[j120]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fYec33_tmp[j124] = fYec33_perm[j124]; + + } + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec75_tmp[j126] = fRec75_perm[j126]; + + } + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fRec32_tmp[j128] = fRec32_perm[j128]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fYec35_tmp[j132] = fYec35_perm[j132]; + + } + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec30_tmp[j134] = fRec30_perm[j134]; + + } + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fRec28_tmp[j136] = fRec28_perm[j136]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fYec37_tmp[j140] = fYec37_perm[j140]; + + } + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec78_tmp[j142] = fRec78_perm[j142]; + + } + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fRec29_tmp[j144] = fRec29_perm[j144]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fYec39_tmp[j148] = fYec39_perm[j148]; + + } + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec27_tmp[j150] = fRec27_perm[j150]; + + } + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fRec25_tmp[j152] = fRec25_perm[j152]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fYec41_tmp[j156] = fYec41_perm[j156]; + + } + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec81_tmp[j158] = fRec81_perm[j158]; + + } + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fRec26_tmp[j160] = fRec26_perm[j160]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fYec43_tmp[j164] = fYec43_perm[j164]; + + } + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec24_tmp[j166] = fRec24_perm[j166]; + + } + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fRec22_tmp[j168] = fRec22_perm[j168]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fYec45_tmp[j172] = fYec45_perm[j172]; + + } + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec84_tmp[j174] = fRec84_perm[j174]; + + } + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fRec23_tmp[j176] = fRec23_perm[j176]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + fYec47_idx = ((fYec47_idx + fYec47_idx_save) & 16383); + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fYec48_tmp[j180] = fYec48_perm[j180]; + + } + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec21_tmp[j182] = fRec21_perm[j182]; + + } + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fRec20_tmp[j184] = fRec20_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec19_tmp[j186] = fRec19_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec18_tmp[j188] = fRec18_perm[j188]; + + } + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec17_tmp[j190] = fRec17_perm[j190]; + + } + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fRec92_tmp[j192] = fRec92_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec91_tmp[j194] = fRec91_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec90_tmp[j196] = fRec90_perm[j196]; + + } + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fYec49_tmp[j198] = fYec49_perm[j198]; + + } + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fRec89_tmp[j200] = fRec89_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec88_tmp[j202] = fRec88_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec87_tmp[j204] = fRec87_perm[j204]; + + } + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec95_tmp[j206] = fRec95_perm[j206]; + + } + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fRec94_tmp[j208] = fRec94_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec93_tmp[j210] = fRec93_perm[j210]; + + } + fYec50_idx = ((fYec50_idx + fYec50_idx_save) & 1023); + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec14_tmp[j212] = fRec14_perm[j212]; + + } + fYec51_idx = ((fYec51_idx + fYec51_idx_save) & 16383); + fYec52_idx = ((fYec52_idx + fYec52_idx_save) & 16383); + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fYec53_tmp[j216] = fYec53_perm[j216]; + + } + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec101_tmp[j218] = fRec101_perm[j218]; + + } + for (int j220 = 0; (j220 < 4); j220 = (j220 + 1)) { + fRec100_tmp[j220] = fRec100_perm[j220]; + + } + for (int j222 = 0; (j222 < 4); j222 = (j222 + 1)) { + fRec99_tmp[j222] = fRec99_perm[j222]; + + } + for (int j224 = 0; (j224 < 4); j224 = (j224 + 1)) { + fRec98_tmp[j224] = fRec98_perm[j224]; + + } + for (int j226 = 0; (j226 < 4); j226 = (j226 + 1)) { + fRec97_tmp[j226] = fRec97_perm[j226]; + + } + for (int j228 = 0; (j228 < 4); j228 = (j228 + 1)) { + fRec108_tmp[j228] = fRec108_perm[j228]; + + } + for (int j230 = 0; (j230 < 4); j230 = (j230 + 1)) { + fRec107_tmp[j230] = fRec107_perm[j230]; + + } + for (int j232 = 0; (j232 < 4); j232 = (j232 + 1)) { + fRec106_tmp[j232] = fRec106_perm[j232]; + + } + for (int j234 = 0; (j234 < 4); j234 = (j234 + 1)) { + fYec54_tmp[j234] = fYec54_perm[j234]; + + } + for (int j236 = 0; (j236 < 4); j236 = (j236 + 1)) { + fRec105_tmp[j236] = fRec105_perm[j236]; + + } + for (int j238 = 0; (j238 < 4); j238 = (j238 + 1)) { + fRec104_tmp[j238] = fRec104_perm[j238]; + + } + for (int j240 = 0; (j240 < 4); j240 = (j240 + 1)) { + fRec103_tmp[j240] = fRec103_perm[j240]; + + } + for (int j242 = 0; (j242 < 4); j242 = (j242 + 1)) { + fRec111_tmp[j242] = fRec111_perm[j242]; + + } + for (int j244 = 0; (j244 < 4); j244 = (j244 + 1)) { + fRec110_tmp[j244] = fRec110_perm[j244]; + + } + for (int j246 = 0; (j246 < 4); j246 = (j246 + 1)) { + fRec109_tmp[j246] = fRec109_perm[j246]; + + } + fYec55_idx = ((fYec55_idx + fYec55_idx_save) & 1023); + for (int j248 = 0; (j248 < 4); j248 = (j248 + 1)) { + fRec96_tmp[j248] = fRec96_perm[j248]; + + } + fYec56_idx = ((fYec56_idx + fYec56_idx_save) & 16383); + for (int j250 = 0; (j250 < 4); j250 = (j250 + 1)) { + fYec57_tmp[j250] = fYec57_perm[j250]; + + } + for (int j252 = 0; (j252 < 4); j252 = (j252 + 1)) { + fRec13_tmp[j252] = fRec13_perm[j252]; + + } + for (int j254 = 0; (j254 < 4); j254 = (j254 + 1)) { + fRec11_tmp[j254] = fRec11_perm[j254]; + + } + fYec58_idx = ((fYec58_idx + fYec58_idx_save) & 16383); + for (int j258 = 0; (j258 < 4); j258 = (j258 + 1)) { + fYec59_tmp[j258] = fYec59_perm[j258]; + + } + for (int j260 = 0; (j260 < 4); j260 = (j260 + 1)) { + fRec112_tmp[j260] = fRec112_perm[j260]; + + } + for (int j262 = 0; (j262 < 4); j262 = (j262 + 1)) { + fRec12_tmp[j262] = fRec12_perm[j262]; + + } + fYec60_idx = ((fYec60_idx + fYec60_idx_save) & 16383); + for (int j264 = 0; (j264 < 4); j264 = (j264 + 1)) { + fYec61_tmp[j264] = fYec61_perm[j264]; + + } + for (int j266 = 0; (j266 < 4); j266 = (j266 + 1)) { + fRec10_tmp[j266] = fRec10_perm[j266]; + + } + for (int j268 = 0; (j268 < 4); j268 = (j268 + 1)) { + fRec8_tmp[j268] = fRec8_perm[j268]; + + } + fYec62_idx = ((fYec62_idx + fYec62_idx_save) & 16383); + for (int j270 = 0; (j270 < 4); j270 = (j270 + 1)) { + fYec63_tmp[j270] = fYec63_perm[j270]; + + } + for (int j272 = 0; (j272 < 4); j272 = (j272 + 1)) { + fRec114_tmp[j272] = fRec114_perm[j272]; + + } + for (int j274 = 0; (j274 < 4); j274 = (j274 + 1)) { + fRec9_tmp[j274] = fRec9_perm[j274]; + + } + fYec64_idx = ((fYec64_idx + fYec64_idx_save) & 16383); + for (int j276 = 0; (j276 < 4); j276 = (j276 + 1)) { + fYec65_tmp[j276] = fYec65_perm[j276]; + + } + for (int j278 = 0; (j278 < 4); j278 = (j278 + 1)) { + fRec7_tmp[j278] = fRec7_perm[j278]; + + } + for (int j280 = 0; (j280 < 4); j280 = (j280 + 1)) { + fRec5_tmp[j280] = fRec5_perm[j280]; + + } + fYec66_idx = ((fYec66_idx + fYec66_idx_save) & 16383); + for (int j284 = 0; (j284 < 4); j284 = (j284 + 1)) { + fYec67_tmp[j284] = fYec67_perm[j284]; + + } + for (int j286 = 0; (j286 < 4); j286 = (j286 + 1)) { + fRec115_tmp[j286] = fRec115_perm[j286]; + + } + for (int j288 = 0; (j288 < 4); j288 = (j288 + 1)) { + fRec6_tmp[j288] = fRec6_perm[j288]; + + } + fYec68_idx = ((fYec68_idx + fYec68_idx_save) & 16383); + for (int j292 = 0; (j292 < 4); j292 = (j292 + 1)) { + fYec69_tmp[j292] = fYec69_perm[j292]; + + } + for (int j294 = 0; (j294 < 4); j294 = (j294 + 1)) { + fRec4_tmp[j294] = fRec4_perm[j294]; + + } + for (int j296 = 0; (j296 < 4); j296 = (j296 + 1)) { + fRec2_tmp[j296] = fRec2_perm[j296]; + + } + fYec70_idx = ((fYec70_idx + fYec70_idx_save) & 16383); + for (int j298 = 0; (j298 < 4); j298 = (j298 + 1)) { + fYec71_tmp[j298] = fYec71_perm[j298]; + + } + for (int j300 = 0; (j300 < 4); j300 = (j300 + 1)) { + fRec118_tmp[j300] = fRec118_perm[j300]; + + } + for (int j302 = 0; (j302 < 4); j302 = (j302 + 1)) { + fRec3_tmp[j302] = fRec3_perm[j302]; + + } + for (int j304 = 0; (j304 < 4); j304 = (j304 + 1)) { + fRec0_tmp[j304] = fRec0_perm[j304]; + + } + for (int j306 = 0; (j306 < 4); j306 = (j306 + 1)) { + fRec1_tmp[j306] = fRec1_perm[j306]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = ((0.760313988f * fRec0[(i - 1)]) - (0.649555743f * fRec50[(i - 1)])); + fZec2[i] = ((0.760313988f * fRec1[(i - 1)]) - (0.649555743f * fRec51[(i - 1)])); + fYec0[((i + fYec0_idx) & 16383)] = ((0.707106769f * fZec1[i]) - (0.707106769f * fZec2[i])); + fYec1[i] = fYec0[(((i + fYec0_idx) - std::min(8192, std::max(0, int(fZec3[i])))) & 16383)]; + fRec52[i] = (fYec1[(i - 1)] - (((fZec4[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec1[i])) / (fRec53[i] - fZec4[i]))); + fRec50[i] = fRec52[i]; + fYec2[((i + fYec2_idx) & 16383)] = ((0.707106769f * fZec1[i]) + (0.707106769f * fZec2[i])); + fYec3[i] = fYec2[(((i + fYec2_idx) - std::min(8192, std::max(0, int(fZec5[i])))) & 16383)]; + fRec54[i] = (fYec3[(i - 1)] - (((fZec6[i] + (2.0f - fRec55[i])) * (fRec54[(i - 1)] - fYec3[i])) / (fRec55[i] - fZec6[i]))); + fRec51[i] = fRec54[i]; + fZec7[i] = ((0.760313988f * fRec50[(i - 1)]) + (0.649555743f * fRec0[(i - 1)])); + fZec8[i] = ((0.760313988f * fZec7[i]) - (0.649555743f * fRec47[(i - 1)])); + fZec9[i] = ((0.760313988f * fRec51[(i - 1)]) + (0.649555743f * fRec1[(i - 1)])); + fZec10[i] = ((0.760313988f * fZec9[i]) - (0.649555743f * fRec48[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((0.707106769f * fZec8[i]) - (0.707106769f * fZec10[i])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec11[i])))) & 16383)]; + fRec49[i] = (fYec5[(i - 1)] - (((fZec12[i] + (2.0f - fRec56[i])) * (fRec49[(i - 1)] - fYec5[i])) / (fRec56[i] - fZec12[i]))); + fRec47[i] = fRec49[i]; + fYec6[((i + fYec6_idx) & 16383)] = ((0.707106769f * fZec8[i]) + (0.707106769f * fZec10[i])); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec13[i])))) & 16383)]; + fRec57[i] = (fYec7[(i - 1)] - (((fZec14[i] + (2.0f - fRec58[i])) * (fRec57[(i - 1)] - fYec7[i])) / (fRec58[i] - fZec14[i]))); + fRec48[i] = fRec57[i]; + fZec15[i] = ((0.760313988f * fRec47[(i - 1)]) + (0.649555743f * fZec7[i])); + fZec16[i] = ((0.760313988f * fZec15[i]) - (0.649555743f * fRec44[(i - 1)])); + fZec17[i] = ((0.760313988f * fRec48[(i - 1)]) + (0.649555743f * fZec9[i])); + fZec18[i] = ((0.760313988f * fZec17[i]) - (0.649555743f * fRec45[(i - 1)])); + fYec8[((i + fYec8_idx) & 16383)] = ((0.707106769f * fZec16[i]) - (0.707106769f * fZec18[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec19[i])))) & 16383)]; + fRec46[i] = (fYec9[(i - 1)] - (((fZec20[i] + (2.0f - fRec59[i])) * (fRec46[(i - 1)] - fYec9[i])) / (fRec59[i] - fZec20[i]))); + fRec44[i] = fRec46[i]; + fYec10[((i + fYec10_idx) & 16383)] = ((0.707106769f * fZec16[i]) + (0.707106769f * fZec18[i])); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec21[i])))) & 16383)]; + fRec60[i] = (fYec11[(i - 1)] - (((fZec22[i] + (2.0f - fRec61[i])) * (fRec60[(i - 1)] - fYec11[i])) / (fRec61[i] - fZec22[i]))); + fRec45[i] = fRec60[i]; + fZec23[i] = ((0.760313988f * fRec44[(i - 1)]) + (0.649555743f * fZec15[i])); + fZec24[i] = ((0.760313988f * fZec23[i]) - (0.649555743f * fRec41[(i - 1)])); + fZec25[i] = ((0.760313988f * fRec45[(i - 1)]) + (0.649555743f * fZec17[i])); + fZec26[i] = ((0.760313988f * fZec25[i]) - (0.649555743f * fRec42[(i - 1)])); + fYec12[((i + fYec12_idx) & 16383)] = ((0.707106769f * fZec24[i]) - (0.707106769f * fZec26[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec27[i])))) & 16383)]; + fRec43[i] = (fYec13[(i - 1)] - (((fZec28[i] + (2.0f - fRec62[i])) * (fRec43[(i - 1)] - fYec13[i])) / (fRec62[i] - fZec28[i]))); + fRec41[i] = fRec43[i]; + fYec14[((i + fYec14_idx) & 16383)] = ((0.707106769f * fZec24[i]) + (0.707106769f * fZec26[i])); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec29[i])))) & 16383)]; + fRec63[i] = (fYec15[(i - 1)] - (((fZec30[i] + (2.0f - fRec64[i])) * (fRec63[(i - 1)] - fYec15[i])) / (fRec64[i] - fZec30[i]))); + fRec42[i] = fRec63[i]; + fZec31[i] = ((0.760313988f * fRec41[(i - 1)]) + (0.649555743f * fZec23[i])); + fZec32[i] = ((0.760313988f * fZec31[i]) - (0.649555743f * fRec38[(i - 1)])); + fZec33[i] = ((0.760313988f * fRec42[(i - 1)]) + (0.649555743f * fZec25[i])); + fZec34[i] = ((0.760313988f * fZec33[i]) - (0.649555743f * fRec39[(i - 1)])); + fYec16[((i + fYec16_idx) & 16383)] = ((0.707106769f * fZec32[i]) - (0.707106769f * fZec34[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec35[i])))) & 16383)]; + fRec40[i] = (fYec17[(i - 1)] - (((fZec36[i] + (2.0f - fRec65[i])) * (fRec40[(i - 1)] - fYec17[i])) / (fRec65[i] - fZec36[i]))); + fRec38[i] = fRec40[i]; + fYec18[((i + fYec18_idx) & 16383)] = ((0.707106769f * fZec32[i]) + (0.707106769f * fZec34[i])); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec37[i])))) & 16383)]; + fRec66[i] = (fYec19[(i - 1)] - (((fZec38[i] + (2.0f - fRec67[i])) * (fRec66[(i - 1)] - fYec19[i])) / (fRec67[i] - fZec38[i]))); + fRec39[i] = fRec66[i]; + fYec20[((i + fYec20_idx) & 1023)] = ((0.760313988f * fRec38[(i - 1)]) + (0.649555743f * fZec31[i])); + fYec21[((i + fYec21_idx) & 16383)] = (((((fYec20[(((i + fYec20_idx) - iZec42[i]) & 1023)] * fZec45[i]) * fZec47[i]) * fZec49[i]) * fZec51[i]) + (fZec52[i] * ((((((fYec20[(((i + fYec20_idx) - iZec53[i]) & 1023)] * fZec54[i]) * fZec55[i]) * fZec56[i]) + (0.5f * (((fZec44[i] * fYec20[(((i + fYec20_idx) - iZec57[i]) & 1023)]) * fZec58[i]) * fZec59[i]))) + (0.166666672f * ((fZec60[i] * fYec20[(((i + fYec20_idx) - iZec61[i]) & 1023)]) * fZec62[i]))) + (0.0416666679f * (fZec63[i] * fYec20[(((i + fYec20_idx) - iZec64[i]) & 1023)]))))); + fYec22[i] = fYec21[(((i + fYec21_idx) - std::min(8192, std::max(0, int(fZec65[i])))) & 16383)]; + fRec37[i] = (fYec22[(i - 1)] - (((fZec66[i] + (2.0f - fRec68[i])) * (fRec37[(i - 1)] - fYec22[i])) / (fRec68[i] - fZec66[i]))); + fYec23[((i + fYec23_idx) & 1023)] = ((0.760313988f * fRec39[(i - 1)]) + (0.649555743f * fZec33[i])); + fYec24[((i + fYec24_idx) & 16383)] = (((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, iZec69[i]))) & 1023)] * (0.0f - fZec71[i])) * (0.0f - (0.5f * fZec72[i]))) * (0.0f - (0.333333343f * fZec73[i]))) * (0.0f - (0.25f * fZec74[i]))) + ((fSlow26 + (fZec67[i] + (5.0f - fZec70[i]))) * ((((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 1)))) & 1023)] * (0.0f - fZec72[i])) * (0.0f - (0.5f * fZec73[i]))) * (0.0f - (0.333333343f * fZec74[i]))) + (0.5f * (((fZec71[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 2)))) & 1023)]) * (0.0f - fZec73[i])) * (0.0f - (0.5f * fZec74[i]))))) + (0.166666672f * ((fZec75[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 3)))) & 1023)]) * (0.0f - fZec74[i])))) + (0.0416666679f * ((fZec75[i] * fZec73[i]) * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 4)))) & 1023)]))))); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec69[i] = (fYec25[(i - 1)] - (((fZec77[i] + (2.0f - fRec70[i])) * (fRec69[(i - 1)] - fYec25[i])) / (fRec70[i] - fZec77[i]))); + fZec78[i] = ((0.760313988f * fRec37[i]) - (0.649555743f * fRec34[(i - 1)])); + fZec79[i] = ((0.760313988f * fRec69[i]) - (0.649555743f * fRec35[(i - 1)])); + fYec26[((i + fYec26_idx) & 16383)] = ((0.707106769f * fZec78[i]) - (0.707106769f * fZec79[i])); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec36[i] = (fYec27[(i - 1)] - (((fZec81[i] + (2.0f - fRec71[i])) * (fRec36[(i - 1)] - fYec27[i])) / (fRec71[i] - fZec81[i]))); + fRec34[i] = fRec36[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((0.707106769f * fZec78[i]) + (0.707106769f * fZec79[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec82[i])))) & 16383)]; + fRec72[i] = (fYec29[(i - 1)] - (((fZec83[i] + (2.0f - fRec73[i])) * (fRec72[(i - 1)] - fYec29[i])) / (fRec73[i] - fZec83[i]))); + fRec35[i] = fRec72[i]; + fZec84[i] = ((0.760313988f * fRec34[(i - 1)]) + (0.649555743f * fRec37[i])); + fZec85[i] = ((0.760313988f * fZec84[i]) - (0.649555743f * fRec31[(i - 1)])); + fZec86[i] = ((0.760313988f * fRec35[(i - 1)]) + (0.649555743f * fRec69[i])); + fZec87[i] = ((0.760313988f * fZec86[i]) - (0.649555743f * fRec32[(i - 1)])); + fYec30[((i + fYec30_idx) & 16383)] = ((0.707106769f * fZec85[i]) - (0.707106769f * fZec87[i])); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec88[i])))) & 16383)]; + fRec33[i] = (fYec31[(i - 1)] - (((fZec89[i] + (2.0f - fRec74[i])) * (fRec33[(i - 1)] - fYec31[i])) / (fRec74[i] - fZec89[i]))); + fRec31[i] = fRec33[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((0.707106769f * fZec85[i]) + (0.707106769f * fZec87[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - iZec91[i]) & 16383)]; + fRec75[i] = (fYec33[(i - 1)] - ((fZec93[i] * (fRec75[(i - 1)] - fYec33[i])) / fZec94[i])); + fRec32[i] = fRec75[i]; + fZec95[i] = ((0.760313988f * fRec31[(i - 1)]) + (0.649555743f * fZec84[i])); + fZec96[i] = ((0.760313988f * fZec95[i]) - (0.649555743f * fRec28[(i - 1)])); + fZec97[i] = ((0.760313988f * fRec32[(i - 1)]) + (0.649555743f * fZec86[i])); + fZec98[i] = ((0.760313988f * fZec97[i]) - (0.649555743f * fRec29[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = ((0.707106769f * fZec96[i]) - (0.707106769f * fZec98[i])); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec99[i])))) & 16383)]; + fRec30[i] = (fYec35[(i - 1)] - (((fZec100[i] + (2.0f - fRec77[i])) * (fRec30[(i - 1)] - fYec35[i])) / (fRec77[i] - fZec100[i]))); + fRec28[i] = fRec30[i]; + fYec36[((i + fYec36_idx) & 16383)] = ((0.707106769f * fZec96[i]) + (0.707106769f * fZec98[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - iZec102[i]) & 16383)]; + fRec78[i] = (fYec37[(i - 1)] - ((fZec104[i] * (fRec78[(i - 1)] - fYec37[i])) / fZec105[i])); + fRec29[i] = fRec78[i]; + fZec106[i] = ((0.760313988f * fRec28[(i - 1)]) + (0.649555743f * fZec95[i])); + fZec107[i] = ((0.760313988f * fZec106[i]) - (0.649555743f * fRec25[(i - 1)])); + fZec108[i] = ((0.760313988f * fRec29[(i - 1)]) + (0.649555743f * fZec97[i])); + fZec109[i] = ((0.760313988f * fZec108[i]) - (0.649555743f * fRec26[(i - 1)])); + fYec38[((i + fYec38_idx) & 16383)] = ((0.707106769f * fZec107[i]) - (0.707106769f * fZec109[i])); + fYec39[i] = fYec38[(((i + fYec38_idx) - iZec111[i]) & 16383)]; + fRec27[i] = (fYec39[(i - 1)] - ((fZec113[i] * (fRec27[(i - 1)] - fYec39[i])) / fZec114[i])); + fRec25[i] = fRec27[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((0.707106769f * fZec107[i]) + (0.707106769f * fZec109[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - iZec116[i]) & 16383)]; + fRec81[i] = (fYec41[(i - 1)] - ((fZec118[i] * (fRec81[(i - 1)] - fYec41[i])) / fZec119[i])); + fRec26[i] = fRec81[i]; + fZec120[i] = ((0.760313988f * fRec25[(i - 1)]) + (0.649555743f * fZec106[i])); + fZec121[i] = ((0.760313988f * fZec120[i]) - (0.649555743f * fRec22[(i - 1)])); + fZec122[i] = ((0.760313988f * fRec26[(i - 1)]) + (0.649555743f * fZec108[i])); + fZec123[i] = ((0.760313988f * fZec122[i]) - (0.649555743f * fRec23[(i - 1)])); + fYec42[((i + fYec42_idx) & 16383)] = ((0.707106769f * fZec121[i]) - (0.707106769f * fZec123[i])); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec124[i])))) & 16383)]; + fRec24[i] = (fYec43[(i - 1)] - (((fZec125[i] + (2.0f - fRec83[i])) * (fRec24[(i - 1)] - fYec43[i])) / (fRec83[i] - fZec125[i]))); + fRec22[i] = fRec24[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((0.707106769f * fZec121[i]) + (0.707106769f * fZec123[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - iZec127[i]) & 16383)]; + fRec84[i] = (fYec45[(i - 1)] - ((fZec129[i] * (fRec84[(i - 1)] - fYec45[i])) / fZec130[i])); + fRec23[i] = fRec84[i]; + fYec46[((i + fYec46_idx) & 16383)] = ((0.760313988f * fRec22[(i - 1)]) + (0.649555743f * fZec120[i])); + fYec47[((i + fYec47_idx) & 16383)] = (((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec134[i])) & 16383)] * fZec137[i]) * fZec139[i]) * fZec141[i]) * fZec143[i]) + (fZec144[i] * ((((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec145[i])) & 16383)] * fZec146[i]) * fZec147[i]) * fZec148[i]) + (0.5f * (((fZec136[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec149[i])) & 16383)]) * fZec150[i]) * fZec151[i]))) + (0.166666672f * ((fZec152[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec153[i])) & 16383)]) * fZec154[i]))) + (0.0416666679f * (fZec155[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec156[i])) & 16383)]))))); + fYec48[i] = fYec47[(((i + fYec47_idx) - std::min(8192, std::max(0, int(fZec157[i])))) & 16383)]; + fRec21[i] = (fYec48[(i - 1)] - (((fZec158[i] + (2.0f - fRec86[i])) * (fRec21[(i - 1)] - fYec48[i])) / (fRec86[i] - fZec158[i]))); + fRec20[i] = ((fSlow55 * fRec21[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec20[(i - 1)]) - (fSlow53 * fRec21[i])))); + fRec19[i] = (fRec20[i] - (fSlow58 * ((fSlow59 * fRec19[(i - 2)]) + (fSlow62 * fRec19[(i - 1)])))); + fRec18[i] = ((fSlow58 * (((fSlow61 * fRec19[i]) + (fSlow63 * fRec19[(i - 1)])) + (fSlow61 * fRec19[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec18[(i - 2)]) + (fSlow62 * fRec18[(i - 1)])))); + fZec159[i] = (fSlow73 * fRec17[(i - 1)]); + fRec17[i] = ((fSlow65 * (((fSlow61 * fRec18[i]) + (fSlow63 * fRec18[(i - 1)])) + (fSlow61 * fRec18[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec17[(i - 2)]) + fZec159[i]))); + fRec92[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec92[(i - 1)]) - (fRec21[i] + fRec21[(i - 1)])))); + fRec91[i] = (fRec92[i] - (fSlow58 * ((fSlow59 * fRec91[(i - 2)]) + (fSlow62 * fRec91[(i - 1)])))); + fRec90[i] = ((fSlow58 * (fRec91[(i - 2)] + (fRec91[i] + (2.0f * fRec91[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec90[(i - 2)]) + (fSlow62 * fRec90[(i - 1)])))); + fZec160[i] = (fRec90[(i - 2)] + (fRec90[i] + (2.0f * fRec90[(i - 1)]))); + fYec49[i] = (fSlow65 * fZec160[i]); + fRec89[i] = ((fSlow75 * fYec49[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec89[(i - 1)]) - (fSlow78 * fZec160[i])))); + fRec88[i] = (fRec89[i] - (fSlow79 * ((fSlow80 * fRec88[(i - 2)]) + (fSlow73 * fRec88[(i - 1)])))); + fRec87[i] = ((fSlow79 * (((fSlow72 * fRec88[i]) + (fSlow81 * fRec88[(i - 1)])) + (fSlow72 * fRec88[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec87[(i - 2)]) + (fSlow73 * fRec87[(i - 1)])))); + fRec95[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec95[(i - 1)]) - (fYec49[i] + fYec49[(i - 1)])))); + fRec94[i] = (fRec95[i] - (fSlow79 * ((fSlow80 * fRec94[(i - 2)]) + (fSlow73 * fRec94[(i - 1)])))); + fRec93[i] = ((fSlow79 * (fRec94[(i - 2)] + (fRec94[i] + (2.0f * fRec94[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec93[(i - 2)]) + (fSlow73 * fRec93[(i - 1)])))); + fYec50[((i + fYec50_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec17[(i - 2)] + (fSlow69 * (fZec159[i] + (fSlow70 * fRec17[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec87[i]) + (fSlow81 * fRec87[(i - 1)])) + (fSlow72 * fRec87[(i - 2)]))) + (fSlow89 * (fRec93[(i - 2)] + (fRec93[i] + (2.0f * fRec93[(i - 1)])))))))) + float(input0[i])); + fRec14[i] = ((fSlow84 * fRec14[(i - 1)]) + (fSlow85 * (((((fZec137[i] * fZec139[i]) * fZec141[i]) * fZec143[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec134[i])) & 1023)]) + (fZec144[i] * ((((((fZec146[i] * fZec147[i]) * fZec148[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec145[i])) & 1023)]) + (0.5f * (((fZec136[i] * fZec150[i]) * fZec151[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec149[i])) & 1023)]))) + (0.166666672f * ((fZec152[i] * fZec154[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec153[i])) & 1023)]))) + (0.0416666679f * (fZec155[i] * fYec50[(((i + fYec50_idx) - std::min(512, iZec156[i])) & 1023)]))))))); + fYec51[((i + fYec51_idx) & 16383)] = ((0.760313988f * fRec23[(i - 1)]) + (0.649555743f * fZec122[i])); + fYec52[((i + fYec52_idx) & 16383)] = (((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, iZec163[i]))) & 16383)] * (0.0f - fZec165[i])) * (0.0f - (0.5f * fZec166[i]))) * (0.0f - (0.333333343f * fZec167[i]))) * (0.0f - (0.25f * fZec168[i]))) + ((fSlow26 + (fZec161[i] + (5.0f - fZec164[i]))) * ((((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 1)))) & 16383)] * (0.0f - fZec166[i])) * (0.0f - (0.5f * fZec167[i]))) * (0.0f - (0.333333343f * fZec168[i]))) + (0.5f * (((fZec165[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 2)))) & 16383)]) * (0.0f - fZec167[i])) * (0.0f - (0.5f * fZec168[i]))))) + (0.166666672f * ((fZec169[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 3)))) & 16383)]) * (0.0f - fZec168[i])))) + (0.0416666679f * ((fZec169[i] * fZec167[i]) * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 4)))) & 16383)]))))); + fYec53[i] = fYec52[(((i + fYec52_idx) - std::min(8192, std::max(0, int(fZec170[i])))) & 16383)]; + fRec101[i] = (fYec53[(i - 1)] - (((fZec171[i] + (2.0f - fRec102[i])) * (fRec101[(i - 1)] - fYec53[i])) / (fRec102[i] - fZec171[i]))); + fRec100[i] = ((fSlow55 * fRec101[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec100[(i - 1)]) - (fSlow53 * fRec101[i])))); + fRec99[i] = (fRec100[i] - (fSlow58 * ((fSlow59 * fRec99[(i - 2)]) + (fSlow62 * fRec99[(i - 1)])))); + fRec98[i] = ((fSlow58 * (((fSlow61 * fRec99[i]) + (fSlow63 * fRec99[(i - 1)])) + (fSlow61 * fRec99[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec98[(i - 2)]) + (fSlow62 * fRec98[(i - 1)])))); + fZec172[i] = (fSlow73 * fRec97[(i - 1)]); + fRec97[i] = ((fSlow65 * (((fSlow61 * fRec98[i]) + (fSlow63 * fRec98[(i - 1)])) + (fSlow61 * fRec98[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec97[(i - 2)]) + fZec172[i]))); + fRec108[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec108[(i - 1)]) - (fRec101[i] + fRec101[(i - 1)])))); + fRec107[i] = (fRec108[i] - (fSlow58 * ((fSlow59 * fRec107[(i - 2)]) + (fSlow62 * fRec107[(i - 1)])))); + fRec106[i] = ((fSlow58 * (fRec107[(i - 2)] + (fRec107[i] + (2.0f * fRec107[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec106[(i - 2)]) + (fSlow62 * fRec106[(i - 1)])))); + fZec173[i] = (fRec106[(i - 2)] + (fRec106[i] + (2.0f * fRec106[(i - 1)]))); + fYec54[i] = (fSlow65 * fZec173[i]); + fRec105[i] = ((fSlow75 * fYec54[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec105[(i - 1)]) - (fSlow78 * fZec173[i])))); + fRec104[i] = (fRec105[i] - (fSlow79 * ((fSlow80 * fRec104[(i - 2)]) + (fSlow73 * fRec104[(i - 1)])))); + fRec103[i] = ((fSlow79 * (((fSlow72 * fRec104[i]) + (fSlow81 * fRec104[(i - 1)])) + (fSlow72 * fRec104[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec103[(i - 2)]) + (fSlow73 * fRec103[(i - 1)])))); + fRec111[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec111[(i - 1)]) - (fYec54[i] + fYec54[(i - 1)])))); + fRec110[i] = (fRec111[i] - (fSlow79 * ((fSlow80 * fRec110[(i - 2)]) + (fSlow73 * fRec110[(i - 1)])))); + fRec109[i] = ((fSlow79 * (fRec110[(i - 2)] + (fRec110[i] + (2.0f * fRec110[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec109[(i - 2)]) + (fSlow73 * fRec109[(i - 1)])))); + fYec55[((i + fYec55_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec97[(i - 2)] + (fSlow69 * (fZec172[i] + (fSlow70 * fRec97[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec103[i]) + (fSlow81 * fRec103[(i - 1)])) + (fSlow72 * fRec103[(i - 2)]))) + (fSlow89 * (fRec109[(i - 2)] + (fRec109[i] + (2.0f * fRec109[(i - 1)])))))))) + float(input1[i])); + fRec96[i] = ((fSlow84 * fRec96[(i - 1)]) + (fSlow85 * (((((fZec45[i] * fZec47[i]) * fZec49[i]) * fZec51[i]) * fYec55[(((i + fYec55_idx) - iZec42[i]) & 1023)]) + (fZec52[i] * ((((((fZec54[i] * fZec55[i]) * fZec56[i]) * fYec55[(((i + fYec55_idx) - iZec53[i]) & 1023)]) + (0.5f * (((fZec44[i] * fZec58[i]) * fZec59[i]) * fYec55[(((i + fYec55_idx) - iZec57[i]) & 1023)]))) + (0.166666672f * ((fZec60[i] * fZec62[i]) * fYec55[(((i + fYec55_idx) - iZec61[i]) & 1023)]))) + (0.0416666679f * (fZec63[i] * fYec55[(((i + fYec55_idx) - iZec64[i]) & 1023)]))))))); + fZec174[i] = ((fSlow93 * fRec14[i]) - (fSlow94 * fRec11[(i - 1)])); + fZec175[i] = ((fSlow93 * fRec96[i]) - (fSlow94 * fRec12[(i - 1)])); + fYec56[((i + fYec56_idx) & 16383)] = ((0.707106769f * fZec174[i]) - (0.707106769f * fZec175[i])); + fYec57[i] = fYec56[(((i + fYec56_idx) - iZec91[i]) & 16383)]; + fRec13[i] = (fYec57[(i - 1)] - ((fZec93[i] * (fRec13[(i - 1)] - fYec57[i])) / fZec94[i])); + fRec11[i] = fRec13[i]; + fYec58[((i + fYec58_idx) & 16383)] = ((0.707106769f * fZec174[i]) + (0.707106769f * fZec175[i])); + fYec59[i] = fYec58[(((i + fYec58_idx) - std::min(8192, std::max(0, int(fZec176[i])))) & 16383)]; + fRec112[i] = (fYec59[(i - 1)] - (((fZec177[i] + (2.0f - fRec113[i])) * (fRec112[(i - 1)] - fYec59[i])) / (fRec113[i] - fZec177[i]))); + fRec12[i] = fRec112[i]; + fZec178[i] = ((fSlow93 * fRec11[(i - 1)]) + (fSlow94 * fRec14[i])); + fZec179[i] = ((fSlow93 * fZec178[i]) - (fSlow94 * fRec8[(i - 1)])); + fZec180[i] = ((fSlow93 * fRec12[(i - 1)]) + (fSlow94 * fRec96[i])); + fZec181[i] = ((fSlow93 * fZec180[i]) - (fSlow94 * fRec9[(i - 1)])); + fYec60[((i + fYec60_idx) & 16383)] = ((0.707106769f * fZec179[i]) - (0.707106769f * fZec181[i])); + fYec61[i] = fYec60[(((i + fYec60_idx) - iZec111[i]) & 16383)]; + fRec10[i] = (fYec61[(i - 1)] - ((fZec113[i] * (fRec10[(i - 1)] - fYec61[i])) / fZec114[i])); + fRec8[i] = fRec10[i]; + fYec62[((i + fYec62_idx) & 16383)] = ((0.707106769f * fZec179[i]) + (0.707106769f * fZec181[i])); + fYec63[i] = fYec62[(((i + fYec62_idx) - iZec102[i]) & 16383)]; + fRec114[i] = (fYec63[(i - 1)] - ((fZec104[i] * (fRec114[(i - 1)] - fYec63[i])) / fZec105[i])); + fRec9[i] = fRec114[i]; + fZec182[i] = ((fSlow93 * fRec8[(i - 1)]) + (fSlow94 * fZec178[i])); + fZec183[i] = ((fSlow93 * fZec182[i]) - (fSlow94 * fRec5[(i - 1)])); + fZec184[i] = ((fSlow93 * fRec9[(i - 1)]) + (fSlow94 * fZec180[i])); + fZec185[i] = ((fSlow93 * fZec184[i]) - (fSlow94 * fRec6[(i - 1)])); + fYec64[((i + fYec64_idx) & 16383)] = ((0.707106769f * fZec183[i]) - (0.707106769f * fZec185[i])); + fYec65[i] = fYec64[(((i + fYec64_idx) - iZec116[i]) & 16383)]; + fRec7[i] = (fYec65[(i - 1)] - ((fZec118[i] * (fRec7[(i - 1)] - fYec65[i])) / fZec119[i])); + fRec5[i] = fRec7[i]; + fYec66[((i + fYec66_idx) & 16383)] = ((0.707106769f * fZec183[i]) + (0.707106769f * fZec185[i])); + fYec67[i] = fYec66[(((i + fYec66_idx) - std::min(8192, std::max(0, int(fZec186[i])))) & 16383)]; + fRec115[i] = (fYec67[(i - 1)] - (((fZec187[i] + (2.0f - fRec116[i])) * (fRec115[(i - 1)] - fYec67[i])) / (fRec116[i] - fZec187[i]))); + fRec6[i] = fRec115[i]; + fZec188[i] = ((fSlow93 * fRec5[(i - 1)]) + (fSlow94 * fZec182[i])); + fZec189[i] = ((fSlow93 * fZec188[i]) - (fSlow94 * fRec2[(i - 1)])); + fZec190[i] = ((fSlow93 * fRec6[(i - 1)]) + (fSlow94 * fZec184[i])); + fZec191[i] = ((fSlow93 * fZec190[i]) - (fSlow94 * fRec3[(i - 1)])); + fYec68[((i + fYec68_idx) & 16383)] = ((0.707106769f * fZec189[i]) - (0.707106769f * fZec191[i])); + fYec69[i] = fYec68[(((i + fYec68_idx) - std::min(8192, std::max(0, int(fZec192[i])))) & 16383)]; + fRec4[i] = (fYec69[(i - 1)] - (((fZec193[i] + (2.0f - fRec117[i])) * (fRec4[(i - 1)] - fYec69[i])) / (fRec117[i] - fZec193[i]))); + fRec2[i] = fRec4[i]; + fYec70[((i + fYec70_idx) & 16383)] = ((0.707106769f * fZec189[i]) + (0.707106769f * fZec191[i])); + fYec71[i] = fYec70[(((i + fYec70_idx) - iZec127[i]) & 16383)]; + fRec118[i] = (fYec71[(i - 1)] - ((fZec129[i] * (fRec118[(i - 1)] - fYec71[i])) / fZec130[i])); + fRec3[i] = fRec118[i]; + fRec0[i] = ((fSlow93 * fRec2[(i - 1)]) + (fSlow94 * fZec188[i])); + fRec1[i] = ((fSlow93 * fRec3[(i - 1)]) + (fSlow94 * fZec190[i])); + + } + /* Post code */ + fYec70_idx_save = vsize; + for (int j299 = 0; (j299 < 4); j299 = (j299 + 1)) { + fYec71_perm[j299] = fYec71_tmp[(vsize + j299)]; + + } + for (int j301 = 0; (j301 < 4); j301 = (j301 + 1)) { + fRec118_perm[j301] = fRec118_tmp[(vsize + j301)]; + + } + fYec68_idx_save = vsize; + for (int j293 = 0; (j293 < 4); j293 = (j293 + 1)) { + fYec69_perm[j293] = fYec69_tmp[(vsize + j293)]; + + } + fYec66_idx_save = vsize; + for (int j285 = 0; (j285 < 4); j285 = (j285 + 1)) { + fYec67_perm[j285] = fYec67_tmp[(vsize + j285)]; + + } + for (int j287 = 0; (j287 < 4); j287 = (j287 + 1)) { + fRec115_perm[j287] = fRec115_tmp[(vsize + j287)]; + + } + fYec64_idx_save = vsize; + for (int j277 = 0; (j277 < 4); j277 = (j277 + 1)) { + fYec65_perm[j277] = fYec65_tmp[(vsize + j277)]; + + } + fYec62_idx_save = vsize; + for (int j271 = 0; (j271 < 4); j271 = (j271 + 1)) { + fYec63_perm[j271] = fYec63_tmp[(vsize + j271)]; + + } + for (int j273 = 0; (j273 < 4); j273 = (j273 + 1)) { + fRec114_perm[j273] = fRec114_tmp[(vsize + j273)]; + + } + fYec60_idx_save = vsize; + for (int j265 = 0; (j265 < 4); j265 = (j265 + 1)) { + fYec61_perm[j265] = fYec61_tmp[(vsize + j265)]; + + } + fYec58_idx_save = vsize; + for (int j259 = 0; (j259 < 4); j259 = (j259 + 1)) { + fYec59_perm[j259] = fYec59_tmp[(vsize + j259)]; + + } + for (int j261 = 0; (j261 < 4); j261 = (j261 + 1)) { + fRec112_perm[j261] = fRec112_tmp[(vsize + j261)]; + + } + fYec56_idx_save = vsize; + for (int j251 = 0; (j251 < 4); j251 = (j251 + 1)) { + fYec57_perm[j251] = fYec57_tmp[(vsize + j251)]; + + } + fYec55_idx_save = vsize; + for (int j243 = 0; (j243 < 4); j243 = (j243 + 1)) { + fRec111_perm[j243] = fRec111_tmp[(vsize + j243)]; + + } + for (int j245 = 0; (j245 < 4); j245 = (j245 + 1)) { + fRec110_perm[j245] = fRec110_tmp[(vsize + j245)]; + + } + for (int j247 = 0; (j247 < 4); j247 = (j247 + 1)) { + fRec109_perm[j247] = fRec109_tmp[(vsize + j247)]; + + } + for (int j235 = 0; (j235 < 4); j235 = (j235 + 1)) { + fYec54_perm[j235] = fYec54_tmp[(vsize + j235)]; + + } + for (int j229 = 0; (j229 < 4); j229 = (j229 + 1)) { + fRec108_perm[j229] = fRec108_tmp[(vsize + j229)]; + + } + for (int j231 = 0; (j231 < 4); j231 = (j231 + 1)) { + fRec107_perm[j231] = fRec107_tmp[(vsize + j231)]; + + } + for (int j233 = 0; (j233 < 4); j233 = (j233 + 1)) { + fRec106_perm[j233] = fRec106_tmp[(vsize + j233)]; + + } + for (int j237 = 0; (j237 < 4); j237 = (j237 + 1)) { + fRec105_perm[j237] = fRec105_tmp[(vsize + j237)]; + + } + for (int j239 = 0; (j239 < 4); j239 = (j239 + 1)) { + fRec104_perm[j239] = fRec104_tmp[(vsize + j239)]; + + } + for (int j241 = 0; (j241 < 4); j241 = (j241 + 1)) { + fRec103_perm[j241] = fRec103_tmp[(vsize + j241)]; + + } + fYec51_idx_save = vsize; + fYec52_idx_save = vsize; + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fYec53_perm[j217] = fYec53_tmp[(vsize + j217)]; + + } + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec101_perm[j219] = fRec101_tmp[(vsize + j219)]; + + } + for (int j221 = 0; (j221 < 4); j221 = (j221 + 1)) { + fRec100_perm[j221] = fRec100_tmp[(vsize + j221)]; + + } + for (int j223 = 0; (j223 < 4); j223 = (j223 + 1)) { + fRec99_perm[j223] = fRec99_tmp[(vsize + j223)]; + + } + for (int j225 = 0; (j225 < 4); j225 = (j225 + 1)) { + fRec98_perm[j225] = fRec98_tmp[(vsize + j225)]; + + } + for (int j227 = 0; (j227 < 4); j227 = (j227 + 1)) { + fRec97_perm[j227] = fRec97_tmp[(vsize + j227)]; + + } + for (int j249 = 0; (j249 < 4); j249 = (j249 + 1)) { + fRec96_perm[j249] = fRec96_tmp[(vsize + j249)]; + + } + fYec50_idx_save = vsize; + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec95_perm[j207] = fRec95_tmp[(vsize + j207)]; + + } + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fRec94_perm[j209] = fRec94_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec93_perm[j211] = fRec93_tmp[(vsize + j211)]; + + } + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fYec49_perm[j199] = fYec49_tmp[(vsize + j199)]; + + } + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fRec92_perm[j193] = fRec92_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec91_perm[j195] = fRec91_tmp[(vsize + j195)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec90_perm[j197] = fRec90_tmp[(vsize + j197)]; + + } + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fRec89_perm[j201] = fRec89_tmp[(vsize + j201)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec88_perm[j203] = fRec88_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec87_perm[j205] = fRec87_tmp[(vsize + j205)]; + + } + fYec46_idx_save = vsize; + fYec47_idx_save = vsize; + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fYec48_perm[j181] = fYec48_tmp[(vsize + j181)]; + + } + fYec44_idx_save = vsize; + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fYec45_perm[j173] = fYec45_tmp[(vsize + j173)]; + + } + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec84_perm[j175] = fRec84_tmp[(vsize + j175)]; + + } + fYec42_idx_save = vsize; + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fYec43_perm[j165] = fYec43_tmp[(vsize + j165)]; + + } + fYec40_idx_save = vsize; + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fYec41_perm[j157] = fYec41_tmp[(vsize + j157)]; + + } + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec81_perm[j159] = fRec81_tmp[(vsize + j159)]; + + } + fYec38_idx_save = vsize; + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fYec39_perm[j149] = fYec39_tmp[(vsize + j149)]; + + } + fYec36_idx_save = vsize; + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fYec37_perm[j141] = fYec37_tmp[(vsize + j141)]; + + } + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec78_perm[j143] = fRec78_tmp[(vsize + j143)]; + + } + fYec34_idx_save = vsize; + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fYec35_perm[j133] = fYec35_tmp[(vsize + j133)]; + + } + fYec32_idx_save = vsize; + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fYec33_perm[j125] = fYec33_tmp[(vsize + j125)]; + + } + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec75_perm[j127] = fRec75_tmp[(vsize + j127)]; + + } + fYec30_idx_save = vsize; + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fYec31_perm[j117] = fYec31_tmp[(vsize + j117)]; + + } + fYec28_idx_save = vsize; + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fYec29_perm[j109] = fYec29_tmp[(vsize + j109)]; + + } + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec72_perm[j111] = fRec72_tmp[(vsize + j111)]; + + } + fYec26_idx_save = vsize; + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fYec27_perm[j101] = fYec27_tmp[(vsize + j101)]; + + } + fYec23_idx_save = vsize; + fYec24_idx_save = vsize; + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fYec25_perm[j95] = fYec25_tmp[(vsize + j95)]; + + } + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fRec69_perm[j97] = fRec69_tmp[(vsize + j97)]; + + } + fYec20_idx_save = vsize; + fYec21_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec22_perm[j89] = fYec22_tmp[(vsize + j89)]; + + } + fYec18_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec19_perm[j81] = fYec19_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec66_perm[j83] = fRec66_tmp[(vsize + j83)]; + + } + fYec16_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec17_perm[j73] = fYec17_tmp[(vsize + j73)]; + + } + fYec14_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec15_perm[j65] = fYec15_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec63_perm[j67] = fRec63_tmp[(vsize + j67)]; + + } + fYec12_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec13_perm[j57] = fYec13_tmp[(vsize + j57)]; + + } + fYec10_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec11_perm[j49] = fYec11_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec60_perm[j51] = fRec60_tmp[(vsize + j51)]; + + } + fYec8_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec9_perm[j41] = fYec9_tmp[(vsize + j41)]; + + } + fYec6_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec7_perm[j33] = fYec7_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec57_perm[j35] = fRec57_tmp[(vsize + j35)]; + + } + fYec4_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec5_perm[j25] = fYec5_tmp[(vsize + j25)]; + + } + fYec2_idx_save = vsize; + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fYec3_perm[j17] = fYec3_tmp[(vsize + j17)]; + + } + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fRec54_perm[j19] = fRec54_tmp[(vsize + j19)]; + + } + fYec0_idx_save = vsize; + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fYec1_perm[j9] = fYec1_tmp[(vsize + j9)]; + + } + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec52_perm[j11] = fRec52_tmp[(vsize + j11)]; + + } + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + fRec50_perm[j13] = fRec50_tmp[(vsize + j13)]; + + } + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fRec51_perm[j21] = fRec51_tmp[(vsize + j21)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec49_perm[j27] = fRec49_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec47_perm[j29] = fRec47_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec48_perm[j37] = fRec48_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec46_perm[j43] = fRec46_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec44_perm[j45] = fRec44_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec45_perm[j53] = fRec45_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec43_perm[j59] = fRec43_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec41_perm[j61] = fRec41_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec42_perm[j69] = fRec42_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec40_perm[j75] = fRec40_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec38_perm[j77] = fRec38_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec39_perm[j85] = fRec39_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec37_perm[j91] = fRec37_tmp[(vsize + j91)]; + + } + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec36_perm[j103] = fRec36_tmp[(vsize + j103)]; + + } + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fRec34_perm[j105] = fRec34_tmp[(vsize + j105)]; + + } + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fRec35_perm[j113] = fRec35_tmp[(vsize + j113)]; + + } + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec33_perm[j119] = fRec33_tmp[(vsize + j119)]; + + } + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fRec31_perm[j121] = fRec31_tmp[(vsize + j121)]; + + } + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fRec32_perm[j129] = fRec32_tmp[(vsize + j129)]; + + } + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec30_perm[j135] = fRec30_tmp[(vsize + j135)]; + + } + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fRec28_perm[j137] = fRec28_tmp[(vsize + j137)]; + + } + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fRec29_perm[j145] = fRec29_tmp[(vsize + j145)]; + + } + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec27_perm[j151] = fRec27_tmp[(vsize + j151)]; + + } + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fRec25_perm[j153] = fRec25_tmp[(vsize + j153)]; + + } + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fRec26_perm[j161] = fRec26_tmp[(vsize + j161)]; + + } + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec24_perm[j167] = fRec24_tmp[(vsize + j167)]; + + } + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fRec22_perm[j169] = fRec22_tmp[(vsize + j169)]; + + } + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fRec23_perm[j177] = fRec23_tmp[(vsize + j177)]; + + } + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec21_perm[j183] = fRec21_tmp[(vsize + j183)]; + + } + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fRec20_perm[j185] = fRec20_tmp[(vsize + j185)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec19_perm[j187] = fRec19_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec18_perm[j189] = fRec18_tmp[(vsize + j189)]; + + } + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec17_perm[j191] = fRec17_tmp[(vsize + j191)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec14_perm[j213] = fRec14_tmp[(vsize + j213)]; + + } + for (int j253 = 0; (j253 < 4); j253 = (j253 + 1)) { + fRec13_perm[j253] = fRec13_tmp[(vsize + j253)]; + + } + for (int j255 = 0; (j255 < 4); j255 = (j255 + 1)) { + fRec11_perm[j255] = fRec11_tmp[(vsize + j255)]; + + } + for (int j263 = 0; (j263 < 4); j263 = (j263 + 1)) { + fRec12_perm[j263] = fRec12_tmp[(vsize + j263)]; + + } + for (int j267 = 0; (j267 < 4); j267 = (j267 + 1)) { + fRec10_perm[j267] = fRec10_tmp[(vsize + j267)]; + + } + for (int j269 = 0; (j269 < 4); j269 = (j269 + 1)) { + fRec8_perm[j269] = fRec8_tmp[(vsize + j269)]; + + } + for (int j275 = 0; (j275 < 4); j275 = (j275 + 1)) { + fRec9_perm[j275] = fRec9_tmp[(vsize + j275)]; + + } + for (int j279 = 0; (j279 < 4); j279 = (j279 + 1)) { + fRec7_perm[j279] = fRec7_tmp[(vsize + j279)]; + + } + for (int j281 = 0; (j281 < 4); j281 = (j281 + 1)) { + fRec5_perm[j281] = fRec5_tmp[(vsize + j281)]; + + } + for (int j289 = 0; (j289 < 4); j289 = (j289 + 1)) { + fRec6_perm[j289] = fRec6_tmp[(vsize + j289)]; + + } + for (int j295 = 0; (j295 < 4); j295 = (j295 + 1)) { + fRec4_perm[j295] = fRec4_tmp[(vsize + j295)]; + + } + for (int j297 = 0; (j297 < 4); j297 = (j297 + 1)) { + fRec2_perm[j297] = fRec2_tmp[(vsize + j297)]; + + } + for (int j303 = 0; (j303 < 4); j303 = (j303 + 1)) { + fRec3_perm[j303] = fRec3_tmp[(vsize + j303)]; + + } + for (int j305 = 0; (j305 < 4); j305 = (j305 + 1)) { + fRec0_perm[j305] = fRec0_tmp[(vsize + j305)]; + + } + for (int j307 = 0; (j307 < 4); j307 = (j307 + 1)) { + fRec1_perm[j307] = fRec1_tmp[(vsize + j307)]; + + } + /* Vectorizable loop 170 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[i]); + + } + /* Vectorizable loop 171 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[i]); + + } + + } + /* Remaining frames */ + if (vindex < count) { + FAUSTFLOAT* input0 = &input0_ptr[vindex]; + FAUSTFLOAT* input1 = &input1_ptr[vindex]; + FAUSTFLOAT* output0 = &output0_ptr[vindex]; + FAUSTFLOAT* output1 = &output1_ptr[vindex]; + int vsize = (count - vindex); + /* Vectorizable loop 0 */ + /* Pre code */ + for (int j2 = 0; (j2 < 4); j2 = (j2 + 1)) { + iVec0_tmp[j2] = iVec0_perm[j2]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iVec0[i] = 1; + + } + /* Post code */ + for (int j3 = 0; (j3 < 4); j3 = (j3 + 1)) { + iVec0_perm[j3] = iVec0_tmp[(vsize + j3)]; + + } + /* Vectorizable loop 1 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec0[i] = (1 - iVec0[(i - 1)]); + + } + /* Recursive loop 2 */ + /* Pre code */ + for (int j0 = 0; (j0 < 4); j0 = (j0 + 1)) { + fRec15_tmp[j0] = fRec15_perm[j0]; + + } + for (int j4 = 0; (j4 < 4); j4 = (j4 + 1)) { + fRec16_tmp[j4] = fRec16_perm[j4]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec15[i] = ((fSlow1 * fRec16[(i - 1)]) + (fSlow2 * fRec15[(i - 1)])); + fRec16[i] = ((float(iZec0[i]) + (fSlow2 * fRec16[(i - 1)])) - (fSlow1 * fRec15[(i - 1)])); + + } + /* Post code */ + for (int j1 = 0; (j1 < 4); j1 = (j1 + 1)) { + fRec15_perm[j1] = fRec15_tmp[(vsize + j1)]; + + } + for (int j5 = 0; (j5 < 4); j5 = (j5 + 1)) { + fRec16_perm[j5] = fRec16_tmp[(vsize + j5)]; + + } + /* Vectorizable loop 3 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec39[i] = (fSlow26 * (fRec16[i] + 1.0f)); + + } + /* Vectorizable loop 4 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec131[i] = (fSlow26 * (fRec15[i] + 1.0f)); + + } + /* Vectorizable loop 5 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec40[i] = (fZec39[i] + 3.50000501f); + + } + /* Vectorizable loop 6 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec67[i] = (fSlow29 * fRec16[i]); + + } + /* Vectorizable loop 7 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec132[i] = (fZec131[i] + 3.50000501f); + + } + /* Vectorizable loop 8 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec161[i] = (fSlow29 * fRec15[i]); + + } + /* Vectorizable loop 9 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec43[i] = std::floor(fZec40[i]); + + } + /* Vectorizable loop 10 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec68[i] = (fSlow26 + (fZec67[i] + 3.50000501f)); + + } + /* Recursive loop 11 */ + /* Pre code */ + for (int j122 = 0; (j122 < 4); j122 = (j122 + 1)) { + fRec76_tmp[j122] = fRec76_perm[j122]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec76[i] = (fSlow37 + (0.999899983f * (fRec76[(i - 1)] + float((iSlow36 * iZec0[i]))))); + + } + /* Post code */ + for (int j123 = 0; (j123 < 4); j123 = (j123 + 1)) { + fRec76_perm[j123] = fRec76_tmp[(vsize + j123)]; + + } + /* Recursive loop 12 */ + /* Pre code */ + for (int j138 = 0; (j138 < 4); j138 = (j138 + 1)) { + fRec79_tmp[j138] = fRec79_perm[j138]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec79[i] = (fSlow41 + (0.999899983f * (fRec79[(i - 1)] + float((iSlow40 * iZec0[i]))))); + + } + /* Post code */ + for (int j139 = 0; (j139 < 4); j139 = (j139 + 1)) { + fRec79_perm[j139] = fRec79_tmp[(vsize + j139)]; + + } + /* Recursive loop 13 */ + /* Pre code */ + for (int j146 = 0; (j146 < 4); j146 = (j146 + 1)) { + fRec80_tmp[j146] = fRec80_perm[j146]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec80[i] = (fSlow43 + (0.999899983f * (fRec80[(i - 1)] + float((iSlow42 * iZec0[i]))))); + + } + /* Post code */ + for (int j147 = 0; (j147 < 4); j147 = (j147 + 1)) { + fRec80_perm[j147] = fRec80_tmp[(vsize + j147)]; + + } + /* Recursive loop 14 */ + /* Pre code */ + for (int j154 = 0; (j154 < 4); j154 = (j154 + 1)) { + fRec82_tmp[j154] = fRec82_perm[j154]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec82[i] = (fSlow45 + (0.999899983f * (fRec82[(i - 1)] + float((iSlow44 * iZec0[i]))))); + + } + /* Post code */ + for (int j155 = 0; (j155 < 4); j155 = (j155 + 1)) { + fRec82_perm[j155] = fRec82_tmp[(vsize + j155)]; + + } + /* Recursive loop 15 */ + /* Pre code */ + for (int j170 = 0; (j170 < 4); j170 = (j170 + 1)) { + fRec85_tmp[j170] = fRec85_perm[j170]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec85[i] = (fSlow49 + (0.999899983f * (fRec85[(i - 1)] + float((iSlow48 * iZec0[i]))))); + + } + /* Post code */ + for (int j171 = 0; (j171 < 4); j171 = (j171 + 1)) { + fRec85_perm[j171] = fRec85_tmp[(vsize + j171)]; + + } + /* Vectorizable loop 16 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec135[i] = std::floor(fZec132[i]); + + } + /* Vectorizable loop 17 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec162[i] = (fSlow26 + (fZec161[i] + 3.50000501f)); + + } + /* Recursive loop 18 */ + /* Pre code */ + for (int j6 = 0; (j6 < 4); j6 = (j6 + 1)) { + fRec53_tmp[j6] = fRec53_perm[j6]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec53[i] = (fSlow5 + (0.999899983f * (fRec53[(i - 1)] + float((iSlow4 * iZec0[i]))))); + + } + /* Post code */ + for (int j7 = 0; (j7 < 4); j7 = (j7 + 1)) { + fRec53_perm[j7] = fRec53_tmp[(vsize + j7)]; + + } + /* Recursive loop 19 */ + /* Pre code */ + for (int j22 = 0; (j22 < 4); j22 = (j22 + 1)) { + fRec56_tmp[j22] = fRec56_perm[j22]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec56[i] = (fSlow9 + (0.999899983f * (fRec56[(i - 1)] + float((iSlow8 * iZec0[i]))))); + + } + /* Post code */ + for (int j23 = 0; (j23 < 4); j23 = (j23 + 1)) { + fRec56_perm[j23] = fRec56_tmp[(vsize + j23)]; + + } + /* Recursive loop 20 */ + /* Pre code */ + for (int j14 = 0; (j14 < 4); j14 = (j14 + 1)) { + fRec55_tmp[j14] = fRec55_perm[j14]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec55[i] = (fSlow7 + (0.999899983f * (fRec55[(i - 1)] + float((iSlow6 * iZec0[i]))))); + + } + /* Post code */ + for (int j15 = 0; (j15 < 4); j15 = (j15 + 1)) { + fRec55_perm[j15] = fRec55_tmp[(vsize + j15)]; + + } + /* Recursive loop 21 */ + /* Pre code */ + for (int j38 = 0; (j38 < 4); j38 = (j38 + 1)) { + fRec59_tmp[j38] = fRec59_perm[j38]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec59[i] = (fSlow13 + (0.999899983f * (fRec59[(i - 1)] + float((iSlow12 * iZec0[i]))))); + + } + /* Post code */ + for (int j39 = 0; (j39 < 4); j39 = (j39 + 1)) { + fRec59_perm[j39] = fRec59_tmp[(vsize + j39)]; + + } + /* Recursive loop 22 */ + /* Pre code */ + for (int j30 = 0; (j30 < 4); j30 = (j30 + 1)) { + fRec58_tmp[j30] = fRec58_perm[j30]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec58[i] = (fSlow11 + (0.999899983f * (fRec58[(i - 1)] + float((iSlow10 * iZec0[i]))))); + + } + /* Post code */ + for (int j31 = 0; (j31 < 4); j31 = (j31 + 1)) { + fRec58_perm[j31] = fRec58_tmp[(vsize + j31)]; + + } + /* Recursive loop 23 */ + /* Pre code */ + for (int j46 = 0; (j46 < 4); j46 = (j46 + 1)) { + fRec61_tmp[j46] = fRec61_perm[j46]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec61[i] = (fSlow15 + (0.999899983f * (fRec61[(i - 1)] + float((iSlow14 * iZec0[i]))))); + + } + /* Post code */ + for (int j47 = 0; (j47 < 4); j47 = (j47 + 1)) { + fRec61_perm[j47] = fRec61_tmp[(vsize + j47)]; + + } + /* Recursive loop 24 */ + /* Pre code */ + for (int j54 = 0; (j54 < 4); j54 = (j54 + 1)) { + fRec62_tmp[j54] = fRec62_perm[j54]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec62[i] = (fSlow17 + (0.999899983f * (fRec62[(i - 1)] + float((iSlow16 * iZec0[i]))))); + + } + /* Post code */ + for (int j55 = 0; (j55 < 4); j55 = (j55 + 1)) { + fRec62_perm[j55] = fRec62_tmp[(vsize + j55)]; + + } + /* Recursive loop 25 */ + /* Pre code */ + for (int j62 = 0; (j62 < 4); j62 = (j62 + 1)) { + fRec64_tmp[j62] = fRec64_perm[j62]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec64[i] = (fSlow19 + (0.999899983f * (fRec64[(i - 1)] + float((iSlow18 * iZec0[i]))))); + + } + /* Post code */ + for (int j63 = 0; (j63 < 4); j63 = (j63 + 1)) { + fRec64_perm[j63] = fRec64_tmp[(vsize + j63)]; + + } + /* Recursive loop 26 */ + /* Pre code */ + for (int j70 = 0; (j70 < 4); j70 = (j70 + 1)) { + fRec65_tmp[j70] = fRec65_perm[j70]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec65[i] = (fSlow21 + (0.999899983f * (fRec65[(i - 1)] + float((iSlow20 * iZec0[i]))))); + + } + /* Post code */ + for (int j71 = 0; (j71 < 4); j71 = (j71 + 1)) { + fRec65_perm[j71] = fRec65_tmp[(vsize + j71)]; + + } + /* Recursive loop 27 */ + /* Pre code */ + for (int j78 = 0; (j78 < 4); j78 = (j78 + 1)) { + fRec67_tmp[j78] = fRec67_perm[j78]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec67[i] = (fSlow23 + (0.999899983f * (fRec67[(i - 1)] + float((iSlow22 * iZec0[i]))))); + + } + /* Post code */ + for (int j79 = 0; (j79 < 4); j79 = (j79 + 1)) { + fRec67_perm[j79] = fRec67_tmp[(vsize + j79)]; + + } + /* Recursive loop 28 */ + /* Pre code */ + for (int j86 = 0; (j86 < 4); j86 = (j86 + 1)) { + fRec68_tmp[j86] = fRec68_perm[j86]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec68[i] = (fSlow25 + (0.995000005f * (fRec68[(i - 1)] + float((iSlow24 * iZec0[i]))))); + + } + /* Post code */ + for (int j87 = 0; (j87 < 4); j87 = (j87 + 1)) { + fRec68_perm[j87] = fRec68_tmp[(vsize + j87)]; + + } + /* Vectorizable loop 29 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec44[i] = (fZec39[i] + (4.0f - fZec43[i])); + + } + /* Vectorizable loop 30 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec46[i] = (fZec39[i] + (3.0f - fZec43[i])); + + } + /* Recursive loop 31 */ + /* Pre code */ + for (int j92 = 0; (j92 < 4); j92 = (j92 + 1)) { + fRec70_tmp[j92] = fRec70_perm[j92]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec70[i] = (fSlow28 + (0.995000005f * (fRec70[(i - 1)] + float((iSlow27 * iZec0[i]))))); + + } + /* Post code */ + for (int j93 = 0; (j93 < 4); j93 = (j93 + 1)) { + fRec70_perm[j93] = fRec70_tmp[(vsize + j93)]; + + } + /* Vectorizable loop 32 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec70[i] = std::floor(fZec68[i]); + + } + /* Recursive loop 33 */ + /* Pre code */ + for (int j98 = 0; (j98 < 4); j98 = (j98 + 1)) { + fRec71_tmp[j98] = fRec71_perm[j98]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec71[i] = (fSlow31 + (0.999899983f * (fRec71[(i - 1)] + float((iSlow30 * iZec0[i]))))); + + } + /* Post code */ + for (int j99 = 0; (j99 < 4); j99 = (j99 + 1)) { + fRec71_perm[j99] = fRec71_tmp[(vsize + j99)]; + + } + /* Recursive loop 34 */ + /* Pre code */ + for (int j106 = 0; (j106 < 4); j106 = (j106 + 1)) { + fRec73_tmp[j106] = fRec73_perm[j106]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec73[i] = (fSlow33 + (0.999899983f * (fRec73[(i - 1)] + float((iSlow32 * iZec0[i]))))); + + } + /* Post code */ + for (int j107 = 0; (j107 < 4); j107 = (j107 + 1)) { + fRec73_perm[j107] = fRec73_tmp[(vsize + j107)]; + + } + /* Recursive loop 35 */ + /* Pre code */ + for (int j114 = 0; (j114 < 4); j114 = (j114 + 1)) { + fRec74_tmp[j114] = fRec74_perm[j114]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec74[i] = (fSlow35 + (0.999899983f * (fRec74[(i - 1)] + float((iSlow34 * iZec0[i]))))); + + } + /* Post code */ + for (int j115 = 0; (j115 < 4); j115 = (j115 + 1)) { + fRec74_perm[j115] = fRec74_tmp[(vsize + j115)]; + + } + /* Vectorizable loop 36 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec90[i] = (fRec76[i] + -1.49998999f); + + } + /* Recursive loop 37 */ + /* Pre code */ + for (int j130 = 0; (j130 < 4); j130 = (j130 + 1)) { + fRec77_tmp[j130] = fRec77_perm[j130]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec77[i] = (fSlow39 + (0.999899983f * (fRec77[(i - 1)] + float((iSlow38 * iZec0[i]))))); + + } + /* Post code */ + for (int j131 = 0; (j131 < 4); j131 = (j131 + 1)) { + fRec77_perm[j131] = fRec77_tmp[(vsize + j131)]; + + } + /* Vectorizable loop 38 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec101[i] = (fRec79[i] + -1.49998999f); + + } + /* Vectorizable loop 39 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec110[i] = (fRec80[i] + -1.49998999f); + + } + /* Vectorizable loop 40 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec115[i] = (fRec82[i] + -1.49998999f); + + } + /* Recursive loop 41 */ + /* Pre code */ + for (int j162 = 0; (j162 < 4); j162 = (j162 + 1)) { + fRec83_tmp[j162] = fRec83_perm[j162]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec83[i] = (fSlow47 + (0.999899983f * (fRec83[(i - 1)] + float((iSlow46 * iZec0[i]))))); + + } + /* Post code */ + for (int j163 = 0; (j163 < 4); j163 = (j163 + 1)) { + fRec83_perm[j163] = fRec83_tmp[(vsize + j163)]; + + } + /* Vectorizable loop 42 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec126[i] = (fRec85[i] + -1.49998999f); + + } + /* Recursive loop 43 */ + /* Pre code */ + for (int j178 = 0; (j178 < 4); j178 = (j178 + 1)) { + fRec86_tmp[j178] = fRec86_perm[j178]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec86[i] = (fSlow51 + (0.995000005f * (fRec86[(i - 1)] + float((iSlow50 * iZec0[i]))))); + + } + /* Post code */ + for (int j179 = 0; (j179 < 4); j179 = (j179 + 1)) { + fRec86_perm[j179] = fRec86_tmp[(vsize + j179)]; + + } + /* Vectorizable loop 44 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec136[i] = (fZec131[i] + (4.0f - fZec135[i])); + + } + /* Vectorizable loop 45 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec138[i] = (fZec131[i] + (3.0f - fZec135[i])); + + } + /* Recursive loop 46 */ + /* Pre code */ + for (int j214 = 0; (j214 < 4); j214 = (j214 + 1)) { + fRec102_tmp[j214] = fRec102_perm[j214]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec102[i] = (fSlow91 + (0.995000005f * (fRec102[(i - 1)] + float((iSlow90 * iZec0[i]))))); + + } + /* Post code */ + for (int j215 = 0; (j215 < 4); j215 = (j215 + 1)) { + fRec102_perm[j215] = fRec102_tmp[(vsize + j215)]; + + } + /* Vectorizable loop 47 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec164[i] = std::floor(fZec162[i]); + + } + /* Recursive loop 48 */ + /* Pre code */ + for (int j256 = 0; (j256 < 4); j256 = (j256 + 1)) { + fRec113_tmp[j256] = fRec113_perm[j256]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec113[i] = (fSlow96 + (0.999899983f * (fRec113[(i - 1)] + float((iSlow95 * iZec0[i]))))); + + } + /* Post code */ + for (int j257 = 0; (j257 < 4); j257 = (j257 + 1)) { + fRec113_perm[j257] = fRec113_tmp[(vsize + j257)]; + + } + /* Recursive loop 49 */ + /* Pre code */ + for (int j282 = 0; (j282 < 4); j282 = (j282 + 1)) { + fRec116_tmp[j282] = fRec116_perm[j282]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec116[i] = (fSlow98 + (0.999899983f * (fRec116[(i - 1)] + float((iSlow97 * iZec0[i]))))); + + } + /* Post code */ + for (int j283 = 0; (j283 < 4); j283 = (j283 + 1)) { + fRec116_perm[j283] = fRec116_tmp[(vsize + j283)]; + + } + /* Recursive loop 50 */ + /* Pre code */ + for (int j290 = 0; (j290 < 4); j290 = (j290 + 1)) { + fRec117_tmp[j290] = fRec117_perm[j290]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec117[i] = (fSlow100 + (0.999899983f * (fRec117[(i - 1)] + float((iSlow99 * iZec0[i]))))); + + } + /* Post code */ + for (int j291 = 0; (j291 < 4); j291 = (j291 + 1)) { + fRec117_perm[j291] = fRec117_tmp[(vsize + j291)]; + + } + /* Vectorizable loop 51 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec3[i] = (fRec53[i] + -1.49998999f); + + } + /* Vectorizable loop 52 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec5[i] = (fRec55[i] + -1.49998999f); + + } + /* Vectorizable loop 53 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec13[i] = (fRec58[i] + -1.49998999f); + + } + /* Vectorizable loop 54 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec11[i] = (fRec56[i] + -1.49998999f); + + } + /* Vectorizable loop 55 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec19[i] = (fRec59[i] + -1.49998999f); + + } + /* Vectorizable loop 56 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec21[i] = (fRec61[i] + -1.49998999f); + + } + /* Vectorizable loop 57 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec27[i] = (fRec62[i] + -1.49998999f); + + } + /* Vectorizable loop 58 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec29[i] = (fRec64[i] + -1.49998999f); + + } + /* Vectorizable loop 59 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec35[i] = (fRec65[i] + -1.49998999f); + + } + /* Vectorizable loop 60 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec37[i] = (fRec67[i] + -1.49998999f); + + } + /* Vectorizable loop 61 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec41[i] = int(fZec40[i]); + + } + /* Vectorizable loop 62 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec48[i] = (fZec39[i] + (2.0f - fZec43[i])); + + } + /* Vectorizable loop 63 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec50[i] = (fZec39[i] + (1.0f - fZec43[i])); + + } + /* Vectorizable loop 64 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec60[i] = (fZec44[i] * fZec46[i]); + + } + /* Vectorizable loop 65 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec65[i] = (fRec68[i] + -1.49998999f); + + } + /* Vectorizable loop 66 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec71[i] = (fSlow26 + (fZec67[i] + (4.0f - fZec70[i]))); + + } + /* Vectorizable loop 67 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec72[i] = (fSlow26 + (fZec67[i] + (3.0f - fZec70[i]))); + + } + /* Vectorizable loop 68 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec76[i] = (fRec70[i] + -1.49998999f); + + } + /* Vectorizable loop 69 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec80[i] = (fRec71[i] + -1.49998999f); + + } + /* Vectorizable loop 70 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec82[i] = (fRec73[i] + -1.49998999f); + + } + /* Vectorizable loop 71 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec88[i] = (fRec74[i] + -1.49998999f); + + } + /* Vectorizable loop 72 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec92[i] = std::floor(fZec90[i]); + + } + /* Vectorizable loop 73 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec99[i] = (fRec77[i] + -1.49998999f); + + } + /* Vectorizable loop 74 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec103[i] = std::floor(fZec101[i]); + + } + /* Vectorizable loop 75 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec112[i] = std::floor(fZec110[i]); + + } + /* Vectorizable loop 76 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec117[i] = std::floor(fZec115[i]); + + } + /* Vectorizable loop 77 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec124[i] = (fRec83[i] + -1.49998999f); + + } + /* Vectorizable loop 78 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec128[i] = std::floor(fZec126[i]); + + } + /* Vectorizable loop 79 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec133[i] = int(fZec132[i]); + + } + /* Vectorizable loop 80 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec140[i] = (fZec131[i] + (2.0f - fZec135[i])); + + } + /* Vectorizable loop 81 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec142[i] = (fZec131[i] + (1.0f - fZec135[i])); + + } + /* Vectorizable loop 82 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec152[i] = (fZec136[i] * fZec138[i]); + + } + /* Vectorizable loop 83 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec157[i] = (fRec86[i] + -1.49998999f); + + } + /* Vectorizable loop 84 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec165[i] = (fSlow26 + (fZec161[i] + (4.0f - fZec164[i]))); + + } + /* Vectorizable loop 85 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec166[i] = (fSlow26 + (fZec161[i] + (3.0f - fZec164[i]))); + + } + /* Vectorizable loop 86 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec170[i] = (fRec102[i] + -1.49998999f); + + } + /* Vectorizable loop 87 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec176[i] = (fRec113[i] + -1.49998999f); + + } + /* Vectorizable loop 88 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec186[i] = (fRec116[i] + -1.49998999f); + + } + /* Vectorizable loop 89 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec192[i] = (fRec117[i] + -1.49998999f); + + } + /* Vectorizable loop 90 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec4[i] = std::floor(fZec3[i]); + + } + /* Vectorizable loop 91 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec6[i] = std::floor(fZec5[i]); + + } + /* Vectorizable loop 92 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec14[i] = std::floor(fZec13[i]); + + } + /* Vectorizable loop 93 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec12[i] = std::floor(fZec11[i]); + + } + /* Vectorizable loop 94 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec20[i] = std::floor(fZec19[i]); + + } + /* Vectorizable loop 95 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec22[i] = std::floor(fZec21[i]); + + } + /* Vectorizable loop 96 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec28[i] = std::floor(fZec27[i]); + + } + /* Vectorizable loop 97 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec30[i] = std::floor(fZec29[i]); + + } + /* Vectorizable loop 98 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec36[i] = std::floor(fZec35[i]); + + } + /* Vectorizable loop 99 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec38[i] = std::floor(fZec37[i]); + + } + /* Vectorizable loop 100 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec42[i] = std::min(512, std::max(0, iZec41[i])); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (0.0f - fZec44[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (0.0f - (0.5f * fZec46[i])); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (0.0f - (0.333333343f * fZec48[i])); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (0.0f - (0.25f * fZec50[i])); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = (fZec39[i] + (5.0f - fZec43[i])); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec53[i] = std::min(512, std::max(0, (iZec41[i] + 1))); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = (0.0f - fZec46[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - (0.5f * fZec48[i])); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = (0.0f - (0.333333343f * fZec50[i])); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec57[i] = std::min(512, std::max(0, (iZec41[i] + 2))); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = (0.0f - fZec48[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec59[i] = (0.0f - (0.5f * fZec50[i])); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec61[i] = std::min(512, std::max(0, (iZec41[i] + 3))); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (0.0f - fZec50[i]); + + } + /* Vectorizable loop 115 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = (fZec60[i] * fZec48[i]); + + } + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec64[i] = std::min(512, std::max(0, (iZec41[i] + 4))); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec66[i] = std::floor(fZec65[i]); + + } + /* Vectorizable loop 118 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec69[i] = int(fZec68[i]); + + } + /* Vectorizable loop 119 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = (fSlow26 + (fZec67[i] + (2.0f - fZec70[i]))); + + } + /* Vectorizable loop 120 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fSlow26 + (fZec67[i] + (1.0f - fZec70[i]))); + + } + /* Vectorizable loop 121 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = (fZec71[i] * fZec72[i]); + + } + /* Vectorizable loop 122 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 123 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 124 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec83[i] = std::floor(fZec82[i]); + + } + /* Vectorizable loop 125 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec89[i] = std::floor(fZec88[i]); + + } + /* Vectorizable loop 126 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec91[i] = std::min(8192, std::max(0, int(fZec90[i]))); + + } + /* Vectorizable loop 127 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = (fZec92[i] + (2.0f - fRec76[i])); + + } + /* Vectorizable loop 128 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec76[i] - fZec92[i]); + + } + /* Vectorizable loop 129 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = std::floor(fZec99[i]); + + } + /* Vectorizable loop 130 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec102[i] = std::min(8192, std::max(0, int(fZec101[i]))); + + } + /* Vectorizable loop 131 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fZec103[i] + (2.0f - fRec79[i])); + + } + /* Vectorizable loop 132 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = (fRec79[i] - fZec103[i]); + + } + /* Vectorizable loop 133 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec111[i] = std::min(8192, std::max(0, int(fZec110[i]))); + + } + /* Vectorizable loop 134 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec113[i] = (fZec112[i] + (2.0f - fRec80[i])); + + } + /* Vectorizable loop 135 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec114[i] = (fRec80[i] - fZec112[i]); + + } + /* Vectorizable loop 136 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec116[i] = std::min(8192, std::max(0, int(fZec115[i]))); + + } + /* Vectorizable loop 137 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec118[i] = (fZec117[i] + (2.0f - fRec82[i])); + + } + /* Vectorizable loop 138 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec119[i] = (fRec82[i] - fZec117[i]); + + } + /* Vectorizable loop 139 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec125[i] = std::floor(fZec124[i]); + + } + /* Vectorizable loop 140 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec127[i] = std::min(8192, std::max(0, int(fZec126[i]))); + + } + /* Vectorizable loop 141 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec129[i] = (fZec128[i] + (2.0f - fRec85[i])); + + } + /* Vectorizable loop 142 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec130[i] = (fRec85[i] - fZec128[i]); + + } + /* Vectorizable loop 143 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec134[i] = std::max(0, iZec133[i]); + + } + /* Vectorizable loop 144 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec137[i] = (0.0f - fZec136[i]); + + } + /* Vectorizable loop 145 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec139[i] = (0.0f - (0.5f * fZec138[i])); + + } + /* Vectorizable loop 146 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec141[i] = (0.0f - (0.333333343f * fZec140[i])); + + } + /* Vectorizable loop 147 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec143[i] = (0.0f - (0.25f * fZec142[i])); + + } + /* Vectorizable loop 148 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec144[i] = (fZec131[i] + (5.0f - fZec135[i])); + + } + /* Vectorizable loop 149 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec145[i] = std::max(0, (iZec133[i] + 1)); + + } + /* Vectorizable loop 150 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec146[i] = (0.0f - fZec138[i]); + + } + /* Vectorizable loop 151 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec147[i] = (0.0f - (0.5f * fZec140[i])); + + } + /* Vectorizable loop 152 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec148[i] = (0.0f - (0.333333343f * fZec142[i])); + + } + /* Vectorizable loop 153 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec149[i] = std::max(0, (iZec133[i] + 2)); + + } + /* Vectorizable loop 154 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec150[i] = (0.0f - fZec140[i]); + + } + /* Vectorizable loop 155 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec151[i] = (0.0f - (0.5f * fZec142[i])); + + } + /* Vectorizable loop 156 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec153[i] = std::max(0, (iZec133[i] + 3)); + + } + /* Vectorizable loop 157 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec154[i] = (0.0f - fZec142[i]); + + } + /* Vectorizable loop 158 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec155[i] = (fZec152[i] * fZec140[i]); + + } + /* Vectorizable loop 159 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec156[i] = std::max(0, (iZec133[i] + 4)); + + } + /* Vectorizable loop 160 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec158[i] = std::floor(fZec157[i]); + + } + /* Vectorizable loop 161 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec163[i] = int(fZec162[i]); + + } + /* Vectorizable loop 162 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec167[i] = (fSlow26 + (fZec161[i] + (2.0f - fZec164[i]))); + + } + /* Vectorizable loop 163 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec168[i] = (fSlow26 + (fZec161[i] + (1.0f - fZec164[i]))); + + } + /* Vectorizable loop 164 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec169[i] = (fZec165[i] * fZec166[i]); + + } + /* Vectorizable loop 165 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec171[i] = std::floor(fZec170[i]); + + } + /* Vectorizable loop 166 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec177[i] = std::floor(fZec176[i]); + + } + /* Vectorizable loop 167 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec187[i] = std::floor(fZec186[i]); + + } + /* Vectorizable loop 168 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec193[i] = std::floor(fZec192[i]); + + } + /* Recursive loop 169 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 16383); + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fYec1_tmp[j8] = fYec1_perm[j8]; + + } + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec52_tmp[j10] = fRec52_perm[j10]; + + } + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + fRec50_tmp[j12] = fRec50_perm[j12]; + + } + fYec2_idx = ((fYec2_idx + fYec2_idx_save) & 16383); + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fYec3_tmp[j16] = fYec3_perm[j16]; + + } + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fRec54_tmp[j18] = fRec54_perm[j18]; + + } + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fRec51_tmp[j20] = fRec51_perm[j20]; + + } + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec5_tmp[j24] = fYec5_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec49_tmp[j26] = fRec49_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec47_tmp[j28] = fRec47_perm[j28]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec7_tmp[j32] = fYec7_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec57_tmp[j34] = fRec57_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec48_tmp[j36] = fRec48_perm[j36]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec9_tmp[j40] = fYec9_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec46_tmp[j42] = fRec46_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec44_tmp[j44] = fRec44_perm[j44]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec11_tmp[j48] = fYec11_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec60_tmp[j50] = fRec60_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec45_tmp[j52] = fRec45_perm[j52]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec13_tmp[j56] = fYec13_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec43_tmp[j58] = fRec43_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec41_tmp[j60] = fRec41_perm[j60]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec15_tmp[j64] = fYec15_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec63_tmp[j66] = fRec63_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec42_tmp[j68] = fRec42_perm[j68]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec17_tmp[j72] = fYec17_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec40_tmp[j74] = fRec40_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec38_tmp[j76] = fRec38_perm[j76]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec19_tmp[j80] = fYec19_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec66_tmp[j82] = fRec66_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec39_tmp[j84] = fRec39_perm[j84]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 1023); + fYec21_idx = ((fYec21_idx + fYec21_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec22_tmp[j88] = fYec22_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec37_tmp[j90] = fRec37_perm[j90]; + + } + fYec23_idx = ((fYec23_idx + fYec23_idx_save) & 1023); + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fYec25_tmp[j94] = fYec25_perm[j94]; + + } + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fRec69_tmp[j96] = fRec69_perm[j96]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fYec27_tmp[j100] = fYec27_perm[j100]; + + } + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec36_tmp[j102] = fRec36_perm[j102]; + + } + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fRec34_tmp[j104] = fRec34_perm[j104]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fYec29_tmp[j108] = fYec29_perm[j108]; + + } + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec72_tmp[j110] = fRec72_perm[j110]; + + } + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fRec35_tmp[j112] = fRec35_perm[j112]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fYec31_tmp[j116] = fYec31_perm[j116]; + + } + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec33_tmp[j118] = fRec33_perm[j118]; + + } + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fRec31_tmp[j120] = fRec31_perm[j120]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fYec33_tmp[j124] = fYec33_perm[j124]; + + } + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec75_tmp[j126] = fRec75_perm[j126]; + + } + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fRec32_tmp[j128] = fRec32_perm[j128]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fYec35_tmp[j132] = fYec35_perm[j132]; + + } + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec30_tmp[j134] = fRec30_perm[j134]; + + } + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fRec28_tmp[j136] = fRec28_perm[j136]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fYec37_tmp[j140] = fYec37_perm[j140]; + + } + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec78_tmp[j142] = fRec78_perm[j142]; + + } + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fRec29_tmp[j144] = fRec29_perm[j144]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fYec39_tmp[j148] = fYec39_perm[j148]; + + } + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec27_tmp[j150] = fRec27_perm[j150]; + + } + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fRec25_tmp[j152] = fRec25_perm[j152]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fYec41_tmp[j156] = fYec41_perm[j156]; + + } + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec81_tmp[j158] = fRec81_perm[j158]; + + } + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fRec26_tmp[j160] = fRec26_perm[j160]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fYec43_tmp[j164] = fYec43_perm[j164]; + + } + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec24_tmp[j166] = fRec24_perm[j166]; + + } + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fRec22_tmp[j168] = fRec22_perm[j168]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fYec45_tmp[j172] = fYec45_perm[j172]; + + } + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec84_tmp[j174] = fRec84_perm[j174]; + + } + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fRec23_tmp[j176] = fRec23_perm[j176]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + fYec47_idx = ((fYec47_idx + fYec47_idx_save) & 16383); + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fYec48_tmp[j180] = fYec48_perm[j180]; + + } + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec21_tmp[j182] = fRec21_perm[j182]; + + } + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fRec20_tmp[j184] = fRec20_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec19_tmp[j186] = fRec19_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec18_tmp[j188] = fRec18_perm[j188]; + + } + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec17_tmp[j190] = fRec17_perm[j190]; + + } + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fRec92_tmp[j192] = fRec92_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec91_tmp[j194] = fRec91_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec90_tmp[j196] = fRec90_perm[j196]; + + } + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fYec49_tmp[j198] = fYec49_perm[j198]; + + } + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fRec89_tmp[j200] = fRec89_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec88_tmp[j202] = fRec88_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec87_tmp[j204] = fRec87_perm[j204]; + + } + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec95_tmp[j206] = fRec95_perm[j206]; + + } + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fRec94_tmp[j208] = fRec94_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec93_tmp[j210] = fRec93_perm[j210]; + + } + fYec50_idx = ((fYec50_idx + fYec50_idx_save) & 1023); + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec14_tmp[j212] = fRec14_perm[j212]; + + } + fYec51_idx = ((fYec51_idx + fYec51_idx_save) & 16383); + fYec52_idx = ((fYec52_idx + fYec52_idx_save) & 16383); + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fYec53_tmp[j216] = fYec53_perm[j216]; + + } + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec101_tmp[j218] = fRec101_perm[j218]; + + } + for (int j220 = 0; (j220 < 4); j220 = (j220 + 1)) { + fRec100_tmp[j220] = fRec100_perm[j220]; + + } + for (int j222 = 0; (j222 < 4); j222 = (j222 + 1)) { + fRec99_tmp[j222] = fRec99_perm[j222]; + + } + for (int j224 = 0; (j224 < 4); j224 = (j224 + 1)) { + fRec98_tmp[j224] = fRec98_perm[j224]; + + } + for (int j226 = 0; (j226 < 4); j226 = (j226 + 1)) { + fRec97_tmp[j226] = fRec97_perm[j226]; + + } + for (int j228 = 0; (j228 < 4); j228 = (j228 + 1)) { + fRec108_tmp[j228] = fRec108_perm[j228]; + + } + for (int j230 = 0; (j230 < 4); j230 = (j230 + 1)) { + fRec107_tmp[j230] = fRec107_perm[j230]; + + } + for (int j232 = 0; (j232 < 4); j232 = (j232 + 1)) { + fRec106_tmp[j232] = fRec106_perm[j232]; + + } + for (int j234 = 0; (j234 < 4); j234 = (j234 + 1)) { + fYec54_tmp[j234] = fYec54_perm[j234]; + + } + for (int j236 = 0; (j236 < 4); j236 = (j236 + 1)) { + fRec105_tmp[j236] = fRec105_perm[j236]; + + } + for (int j238 = 0; (j238 < 4); j238 = (j238 + 1)) { + fRec104_tmp[j238] = fRec104_perm[j238]; + + } + for (int j240 = 0; (j240 < 4); j240 = (j240 + 1)) { + fRec103_tmp[j240] = fRec103_perm[j240]; + + } + for (int j242 = 0; (j242 < 4); j242 = (j242 + 1)) { + fRec111_tmp[j242] = fRec111_perm[j242]; + + } + for (int j244 = 0; (j244 < 4); j244 = (j244 + 1)) { + fRec110_tmp[j244] = fRec110_perm[j244]; + + } + for (int j246 = 0; (j246 < 4); j246 = (j246 + 1)) { + fRec109_tmp[j246] = fRec109_perm[j246]; + + } + fYec55_idx = ((fYec55_idx + fYec55_idx_save) & 1023); + for (int j248 = 0; (j248 < 4); j248 = (j248 + 1)) { + fRec96_tmp[j248] = fRec96_perm[j248]; + + } + fYec56_idx = ((fYec56_idx + fYec56_idx_save) & 16383); + for (int j250 = 0; (j250 < 4); j250 = (j250 + 1)) { + fYec57_tmp[j250] = fYec57_perm[j250]; + + } + for (int j252 = 0; (j252 < 4); j252 = (j252 + 1)) { + fRec13_tmp[j252] = fRec13_perm[j252]; + + } + for (int j254 = 0; (j254 < 4); j254 = (j254 + 1)) { + fRec11_tmp[j254] = fRec11_perm[j254]; + + } + fYec58_idx = ((fYec58_idx + fYec58_idx_save) & 16383); + for (int j258 = 0; (j258 < 4); j258 = (j258 + 1)) { + fYec59_tmp[j258] = fYec59_perm[j258]; + + } + for (int j260 = 0; (j260 < 4); j260 = (j260 + 1)) { + fRec112_tmp[j260] = fRec112_perm[j260]; + + } + for (int j262 = 0; (j262 < 4); j262 = (j262 + 1)) { + fRec12_tmp[j262] = fRec12_perm[j262]; + + } + fYec60_idx = ((fYec60_idx + fYec60_idx_save) & 16383); + for (int j264 = 0; (j264 < 4); j264 = (j264 + 1)) { + fYec61_tmp[j264] = fYec61_perm[j264]; + + } + for (int j266 = 0; (j266 < 4); j266 = (j266 + 1)) { + fRec10_tmp[j266] = fRec10_perm[j266]; + + } + for (int j268 = 0; (j268 < 4); j268 = (j268 + 1)) { + fRec8_tmp[j268] = fRec8_perm[j268]; + + } + fYec62_idx = ((fYec62_idx + fYec62_idx_save) & 16383); + for (int j270 = 0; (j270 < 4); j270 = (j270 + 1)) { + fYec63_tmp[j270] = fYec63_perm[j270]; + + } + for (int j272 = 0; (j272 < 4); j272 = (j272 + 1)) { + fRec114_tmp[j272] = fRec114_perm[j272]; + + } + for (int j274 = 0; (j274 < 4); j274 = (j274 + 1)) { + fRec9_tmp[j274] = fRec9_perm[j274]; + + } + fYec64_idx = ((fYec64_idx + fYec64_idx_save) & 16383); + for (int j276 = 0; (j276 < 4); j276 = (j276 + 1)) { + fYec65_tmp[j276] = fYec65_perm[j276]; + + } + for (int j278 = 0; (j278 < 4); j278 = (j278 + 1)) { + fRec7_tmp[j278] = fRec7_perm[j278]; + + } + for (int j280 = 0; (j280 < 4); j280 = (j280 + 1)) { + fRec5_tmp[j280] = fRec5_perm[j280]; + + } + fYec66_idx = ((fYec66_idx + fYec66_idx_save) & 16383); + for (int j284 = 0; (j284 < 4); j284 = (j284 + 1)) { + fYec67_tmp[j284] = fYec67_perm[j284]; + + } + for (int j286 = 0; (j286 < 4); j286 = (j286 + 1)) { + fRec115_tmp[j286] = fRec115_perm[j286]; + + } + for (int j288 = 0; (j288 < 4); j288 = (j288 + 1)) { + fRec6_tmp[j288] = fRec6_perm[j288]; + + } + fYec68_idx = ((fYec68_idx + fYec68_idx_save) & 16383); + for (int j292 = 0; (j292 < 4); j292 = (j292 + 1)) { + fYec69_tmp[j292] = fYec69_perm[j292]; + + } + for (int j294 = 0; (j294 < 4); j294 = (j294 + 1)) { + fRec4_tmp[j294] = fRec4_perm[j294]; + + } + for (int j296 = 0; (j296 < 4); j296 = (j296 + 1)) { + fRec2_tmp[j296] = fRec2_perm[j296]; + + } + fYec70_idx = ((fYec70_idx + fYec70_idx_save) & 16383); + for (int j298 = 0; (j298 < 4); j298 = (j298 + 1)) { + fYec71_tmp[j298] = fYec71_perm[j298]; + + } + for (int j300 = 0; (j300 < 4); j300 = (j300 + 1)) { + fRec118_tmp[j300] = fRec118_perm[j300]; + + } + for (int j302 = 0; (j302 < 4); j302 = (j302 + 1)) { + fRec3_tmp[j302] = fRec3_perm[j302]; + + } + for (int j304 = 0; (j304 < 4); j304 = (j304 + 1)) { + fRec0_tmp[j304] = fRec0_perm[j304]; + + } + for (int j306 = 0; (j306 < 4); j306 = (j306 + 1)) { + fRec1_tmp[j306] = fRec1_perm[j306]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = ((0.760313988f * fRec0[(i - 1)]) - (0.649555743f * fRec50[(i - 1)])); + fZec2[i] = ((0.760313988f * fRec1[(i - 1)]) - (0.649555743f * fRec51[(i - 1)])); + fYec0[((i + fYec0_idx) & 16383)] = ((0.707106769f * fZec1[i]) - (0.707106769f * fZec2[i])); + fYec1[i] = fYec0[(((i + fYec0_idx) - std::min(8192, std::max(0, int(fZec3[i])))) & 16383)]; + fRec52[i] = (fYec1[(i - 1)] - (((fZec4[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec1[i])) / (fRec53[i] - fZec4[i]))); + fRec50[i] = fRec52[i]; + fYec2[((i + fYec2_idx) & 16383)] = ((0.707106769f * fZec1[i]) + (0.707106769f * fZec2[i])); + fYec3[i] = fYec2[(((i + fYec2_idx) - std::min(8192, std::max(0, int(fZec5[i])))) & 16383)]; + fRec54[i] = (fYec3[(i - 1)] - (((fZec6[i] + (2.0f - fRec55[i])) * (fRec54[(i - 1)] - fYec3[i])) / (fRec55[i] - fZec6[i]))); + fRec51[i] = fRec54[i]; + fZec7[i] = ((0.760313988f * fRec50[(i - 1)]) + (0.649555743f * fRec0[(i - 1)])); + fZec8[i] = ((0.760313988f * fZec7[i]) - (0.649555743f * fRec47[(i - 1)])); + fZec9[i] = ((0.760313988f * fRec51[(i - 1)]) + (0.649555743f * fRec1[(i - 1)])); + fZec10[i] = ((0.760313988f * fZec9[i]) - (0.649555743f * fRec48[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((0.707106769f * fZec8[i]) - (0.707106769f * fZec10[i])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec11[i])))) & 16383)]; + fRec49[i] = (fYec5[(i - 1)] - (((fZec12[i] + (2.0f - fRec56[i])) * (fRec49[(i - 1)] - fYec5[i])) / (fRec56[i] - fZec12[i]))); + fRec47[i] = fRec49[i]; + fYec6[((i + fYec6_idx) & 16383)] = ((0.707106769f * fZec8[i]) + (0.707106769f * fZec10[i])); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec13[i])))) & 16383)]; + fRec57[i] = (fYec7[(i - 1)] - (((fZec14[i] + (2.0f - fRec58[i])) * (fRec57[(i - 1)] - fYec7[i])) / (fRec58[i] - fZec14[i]))); + fRec48[i] = fRec57[i]; + fZec15[i] = ((0.760313988f * fRec47[(i - 1)]) + (0.649555743f * fZec7[i])); + fZec16[i] = ((0.760313988f * fZec15[i]) - (0.649555743f * fRec44[(i - 1)])); + fZec17[i] = ((0.760313988f * fRec48[(i - 1)]) + (0.649555743f * fZec9[i])); + fZec18[i] = ((0.760313988f * fZec17[i]) - (0.649555743f * fRec45[(i - 1)])); + fYec8[((i + fYec8_idx) & 16383)] = ((0.707106769f * fZec16[i]) - (0.707106769f * fZec18[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec19[i])))) & 16383)]; + fRec46[i] = (fYec9[(i - 1)] - (((fZec20[i] + (2.0f - fRec59[i])) * (fRec46[(i - 1)] - fYec9[i])) / (fRec59[i] - fZec20[i]))); + fRec44[i] = fRec46[i]; + fYec10[((i + fYec10_idx) & 16383)] = ((0.707106769f * fZec16[i]) + (0.707106769f * fZec18[i])); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec21[i])))) & 16383)]; + fRec60[i] = (fYec11[(i - 1)] - (((fZec22[i] + (2.0f - fRec61[i])) * (fRec60[(i - 1)] - fYec11[i])) / (fRec61[i] - fZec22[i]))); + fRec45[i] = fRec60[i]; + fZec23[i] = ((0.760313988f * fRec44[(i - 1)]) + (0.649555743f * fZec15[i])); + fZec24[i] = ((0.760313988f * fZec23[i]) - (0.649555743f * fRec41[(i - 1)])); + fZec25[i] = ((0.760313988f * fRec45[(i - 1)]) + (0.649555743f * fZec17[i])); + fZec26[i] = ((0.760313988f * fZec25[i]) - (0.649555743f * fRec42[(i - 1)])); + fYec12[((i + fYec12_idx) & 16383)] = ((0.707106769f * fZec24[i]) - (0.707106769f * fZec26[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec27[i])))) & 16383)]; + fRec43[i] = (fYec13[(i - 1)] - (((fZec28[i] + (2.0f - fRec62[i])) * (fRec43[(i - 1)] - fYec13[i])) / (fRec62[i] - fZec28[i]))); + fRec41[i] = fRec43[i]; + fYec14[((i + fYec14_idx) & 16383)] = ((0.707106769f * fZec24[i]) + (0.707106769f * fZec26[i])); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec29[i])))) & 16383)]; + fRec63[i] = (fYec15[(i - 1)] - (((fZec30[i] + (2.0f - fRec64[i])) * (fRec63[(i - 1)] - fYec15[i])) / (fRec64[i] - fZec30[i]))); + fRec42[i] = fRec63[i]; + fZec31[i] = ((0.760313988f * fRec41[(i - 1)]) + (0.649555743f * fZec23[i])); + fZec32[i] = ((0.760313988f * fZec31[i]) - (0.649555743f * fRec38[(i - 1)])); + fZec33[i] = ((0.760313988f * fRec42[(i - 1)]) + (0.649555743f * fZec25[i])); + fZec34[i] = ((0.760313988f * fZec33[i]) - (0.649555743f * fRec39[(i - 1)])); + fYec16[((i + fYec16_idx) & 16383)] = ((0.707106769f * fZec32[i]) - (0.707106769f * fZec34[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec35[i])))) & 16383)]; + fRec40[i] = (fYec17[(i - 1)] - (((fZec36[i] + (2.0f - fRec65[i])) * (fRec40[(i - 1)] - fYec17[i])) / (fRec65[i] - fZec36[i]))); + fRec38[i] = fRec40[i]; + fYec18[((i + fYec18_idx) & 16383)] = ((0.707106769f * fZec32[i]) + (0.707106769f * fZec34[i])); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec37[i])))) & 16383)]; + fRec66[i] = (fYec19[(i - 1)] - (((fZec38[i] + (2.0f - fRec67[i])) * (fRec66[(i - 1)] - fYec19[i])) / (fRec67[i] - fZec38[i]))); + fRec39[i] = fRec66[i]; + fYec20[((i + fYec20_idx) & 1023)] = ((0.760313988f * fRec38[(i - 1)]) + (0.649555743f * fZec31[i])); + fYec21[((i + fYec21_idx) & 16383)] = (((((fYec20[(((i + fYec20_idx) - iZec42[i]) & 1023)] * fZec45[i]) * fZec47[i]) * fZec49[i]) * fZec51[i]) + (fZec52[i] * ((((((fYec20[(((i + fYec20_idx) - iZec53[i]) & 1023)] * fZec54[i]) * fZec55[i]) * fZec56[i]) + (0.5f * (((fZec44[i] * fYec20[(((i + fYec20_idx) - iZec57[i]) & 1023)]) * fZec58[i]) * fZec59[i]))) + (0.166666672f * ((fZec60[i] * fYec20[(((i + fYec20_idx) - iZec61[i]) & 1023)]) * fZec62[i]))) + (0.0416666679f * (fZec63[i] * fYec20[(((i + fYec20_idx) - iZec64[i]) & 1023)]))))); + fYec22[i] = fYec21[(((i + fYec21_idx) - std::min(8192, std::max(0, int(fZec65[i])))) & 16383)]; + fRec37[i] = (fYec22[(i - 1)] - (((fZec66[i] + (2.0f - fRec68[i])) * (fRec37[(i - 1)] - fYec22[i])) / (fRec68[i] - fZec66[i]))); + fYec23[((i + fYec23_idx) & 1023)] = ((0.760313988f * fRec39[(i - 1)]) + (0.649555743f * fZec33[i])); + fYec24[((i + fYec24_idx) & 16383)] = (((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, iZec69[i]))) & 1023)] * (0.0f - fZec71[i])) * (0.0f - (0.5f * fZec72[i]))) * (0.0f - (0.333333343f * fZec73[i]))) * (0.0f - (0.25f * fZec74[i]))) + ((fSlow26 + (fZec67[i] + (5.0f - fZec70[i]))) * ((((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 1)))) & 1023)] * (0.0f - fZec72[i])) * (0.0f - (0.5f * fZec73[i]))) * (0.0f - (0.333333343f * fZec74[i]))) + (0.5f * (((fZec71[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 2)))) & 1023)]) * (0.0f - fZec73[i])) * (0.0f - (0.5f * fZec74[i]))))) + (0.166666672f * ((fZec75[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 3)))) & 1023)]) * (0.0f - fZec74[i])))) + (0.0416666679f * ((fZec75[i] * fZec73[i]) * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 4)))) & 1023)]))))); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec69[i] = (fYec25[(i - 1)] - (((fZec77[i] + (2.0f - fRec70[i])) * (fRec69[(i - 1)] - fYec25[i])) / (fRec70[i] - fZec77[i]))); + fZec78[i] = ((0.760313988f * fRec37[i]) - (0.649555743f * fRec34[(i - 1)])); + fZec79[i] = ((0.760313988f * fRec69[i]) - (0.649555743f * fRec35[(i - 1)])); + fYec26[((i + fYec26_idx) & 16383)] = ((0.707106769f * fZec78[i]) - (0.707106769f * fZec79[i])); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec36[i] = (fYec27[(i - 1)] - (((fZec81[i] + (2.0f - fRec71[i])) * (fRec36[(i - 1)] - fYec27[i])) / (fRec71[i] - fZec81[i]))); + fRec34[i] = fRec36[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((0.707106769f * fZec78[i]) + (0.707106769f * fZec79[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec82[i])))) & 16383)]; + fRec72[i] = (fYec29[(i - 1)] - (((fZec83[i] + (2.0f - fRec73[i])) * (fRec72[(i - 1)] - fYec29[i])) / (fRec73[i] - fZec83[i]))); + fRec35[i] = fRec72[i]; + fZec84[i] = ((0.760313988f * fRec34[(i - 1)]) + (0.649555743f * fRec37[i])); + fZec85[i] = ((0.760313988f * fZec84[i]) - (0.649555743f * fRec31[(i - 1)])); + fZec86[i] = ((0.760313988f * fRec35[(i - 1)]) + (0.649555743f * fRec69[i])); + fZec87[i] = ((0.760313988f * fZec86[i]) - (0.649555743f * fRec32[(i - 1)])); + fYec30[((i + fYec30_idx) & 16383)] = ((0.707106769f * fZec85[i]) - (0.707106769f * fZec87[i])); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec88[i])))) & 16383)]; + fRec33[i] = (fYec31[(i - 1)] - (((fZec89[i] + (2.0f - fRec74[i])) * (fRec33[(i - 1)] - fYec31[i])) / (fRec74[i] - fZec89[i]))); + fRec31[i] = fRec33[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((0.707106769f * fZec85[i]) + (0.707106769f * fZec87[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - iZec91[i]) & 16383)]; + fRec75[i] = (fYec33[(i - 1)] - ((fZec93[i] * (fRec75[(i - 1)] - fYec33[i])) / fZec94[i])); + fRec32[i] = fRec75[i]; + fZec95[i] = ((0.760313988f * fRec31[(i - 1)]) + (0.649555743f * fZec84[i])); + fZec96[i] = ((0.760313988f * fZec95[i]) - (0.649555743f * fRec28[(i - 1)])); + fZec97[i] = ((0.760313988f * fRec32[(i - 1)]) + (0.649555743f * fZec86[i])); + fZec98[i] = ((0.760313988f * fZec97[i]) - (0.649555743f * fRec29[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = ((0.707106769f * fZec96[i]) - (0.707106769f * fZec98[i])); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec99[i])))) & 16383)]; + fRec30[i] = (fYec35[(i - 1)] - (((fZec100[i] + (2.0f - fRec77[i])) * (fRec30[(i - 1)] - fYec35[i])) / (fRec77[i] - fZec100[i]))); + fRec28[i] = fRec30[i]; + fYec36[((i + fYec36_idx) & 16383)] = ((0.707106769f * fZec96[i]) + (0.707106769f * fZec98[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - iZec102[i]) & 16383)]; + fRec78[i] = (fYec37[(i - 1)] - ((fZec104[i] * (fRec78[(i - 1)] - fYec37[i])) / fZec105[i])); + fRec29[i] = fRec78[i]; + fZec106[i] = ((0.760313988f * fRec28[(i - 1)]) + (0.649555743f * fZec95[i])); + fZec107[i] = ((0.760313988f * fZec106[i]) - (0.649555743f * fRec25[(i - 1)])); + fZec108[i] = ((0.760313988f * fRec29[(i - 1)]) + (0.649555743f * fZec97[i])); + fZec109[i] = ((0.760313988f * fZec108[i]) - (0.649555743f * fRec26[(i - 1)])); + fYec38[((i + fYec38_idx) & 16383)] = ((0.707106769f * fZec107[i]) - (0.707106769f * fZec109[i])); + fYec39[i] = fYec38[(((i + fYec38_idx) - iZec111[i]) & 16383)]; + fRec27[i] = (fYec39[(i - 1)] - ((fZec113[i] * (fRec27[(i - 1)] - fYec39[i])) / fZec114[i])); + fRec25[i] = fRec27[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((0.707106769f * fZec107[i]) + (0.707106769f * fZec109[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - iZec116[i]) & 16383)]; + fRec81[i] = (fYec41[(i - 1)] - ((fZec118[i] * (fRec81[(i - 1)] - fYec41[i])) / fZec119[i])); + fRec26[i] = fRec81[i]; + fZec120[i] = ((0.760313988f * fRec25[(i - 1)]) + (0.649555743f * fZec106[i])); + fZec121[i] = ((0.760313988f * fZec120[i]) - (0.649555743f * fRec22[(i - 1)])); + fZec122[i] = ((0.760313988f * fRec26[(i - 1)]) + (0.649555743f * fZec108[i])); + fZec123[i] = ((0.760313988f * fZec122[i]) - (0.649555743f * fRec23[(i - 1)])); + fYec42[((i + fYec42_idx) & 16383)] = ((0.707106769f * fZec121[i]) - (0.707106769f * fZec123[i])); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec124[i])))) & 16383)]; + fRec24[i] = (fYec43[(i - 1)] - (((fZec125[i] + (2.0f - fRec83[i])) * (fRec24[(i - 1)] - fYec43[i])) / (fRec83[i] - fZec125[i]))); + fRec22[i] = fRec24[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((0.707106769f * fZec121[i]) + (0.707106769f * fZec123[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - iZec127[i]) & 16383)]; + fRec84[i] = (fYec45[(i - 1)] - ((fZec129[i] * (fRec84[(i - 1)] - fYec45[i])) / fZec130[i])); + fRec23[i] = fRec84[i]; + fYec46[((i + fYec46_idx) & 16383)] = ((0.760313988f * fRec22[(i - 1)]) + (0.649555743f * fZec120[i])); + fYec47[((i + fYec47_idx) & 16383)] = (((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec134[i])) & 16383)] * fZec137[i]) * fZec139[i]) * fZec141[i]) * fZec143[i]) + (fZec144[i] * ((((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec145[i])) & 16383)] * fZec146[i]) * fZec147[i]) * fZec148[i]) + (0.5f * (((fZec136[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec149[i])) & 16383)]) * fZec150[i]) * fZec151[i]))) + (0.166666672f * ((fZec152[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec153[i])) & 16383)]) * fZec154[i]))) + (0.0416666679f * (fZec155[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec156[i])) & 16383)]))))); + fYec48[i] = fYec47[(((i + fYec47_idx) - std::min(8192, std::max(0, int(fZec157[i])))) & 16383)]; + fRec21[i] = (fYec48[(i - 1)] - (((fZec158[i] + (2.0f - fRec86[i])) * (fRec21[(i - 1)] - fYec48[i])) / (fRec86[i] - fZec158[i]))); + fRec20[i] = ((fSlow55 * fRec21[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec20[(i - 1)]) - (fSlow53 * fRec21[i])))); + fRec19[i] = (fRec20[i] - (fSlow58 * ((fSlow59 * fRec19[(i - 2)]) + (fSlow62 * fRec19[(i - 1)])))); + fRec18[i] = ((fSlow58 * (((fSlow61 * fRec19[i]) + (fSlow63 * fRec19[(i - 1)])) + (fSlow61 * fRec19[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec18[(i - 2)]) + (fSlow62 * fRec18[(i - 1)])))); + fZec159[i] = (fSlow73 * fRec17[(i - 1)]); + fRec17[i] = ((fSlow65 * (((fSlow61 * fRec18[i]) + (fSlow63 * fRec18[(i - 1)])) + (fSlow61 * fRec18[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec17[(i - 2)]) + fZec159[i]))); + fRec92[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec92[(i - 1)]) - (fRec21[i] + fRec21[(i - 1)])))); + fRec91[i] = (fRec92[i] - (fSlow58 * ((fSlow59 * fRec91[(i - 2)]) + (fSlow62 * fRec91[(i - 1)])))); + fRec90[i] = ((fSlow58 * (fRec91[(i - 2)] + (fRec91[i] + (2.0f * fRec91[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec90[(i - 2)]) + (fSlow62 * fRec90[(i - 1)])))); + fZec160[i] = (fRec90[(i - 2)] + (fRec90[i] + (2.0f * fRec90[(i - 1)]))); + fYec49[i] = (fSlow65 * fZec160[i]); + fRec89[i] = ((fSlow75 * fYec49[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec89[(i - 1)]) - (fSlow78 * fZec160[i])))); + fRec88[i] = (fRec89[i] - (fSlow79 * ((fSlow80 * fRec88[(i - 2)]) + (fSlow73 * fRec88[(i - 1)])))); + fRec87[i] = ((fSlow79 * (((fSlow72 * fRec88[i]) + (fSlow81 * fRec88[(i - 1)])) + (fSlow72 * fRec88[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec87[(i - 2)]) + (fSlow73 * fRec87[(i - 1)])))); + fRec95[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec95[(i - 1)]) - (fYec49[i] + fYec49[(i - 1)])))); + fRec94[i] = (fRec95[i] - (fSlow79 * ((fSlow80 * fRec94[(i - 2)]) + (fSlow73 * fRec94[(i - 1)])))); + fRec93[i] = ((fSlow79 * (fRec94[(i - 2)] + (fRec94[i] + (2.0f * fRec94[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec93[(i - 2)]) + (fSlow73 * fRec93[(i - 1)])))); + fYec50[((i + fYec50_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec17[(i - 2)] + (fSlow69 * (fZec159[i] + (fSlow70 * fRec17[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec87[i]) + (fSlow81 * fRec87[(i - 1)])) + (fSlow72 * fRec87[(i - 2)]))) + (fSlow89 * (fRec93[(i - 2)] + (fRec93[i] + (2.0f * fRec93[(i - 1)])))))))) + float(input0[i])); + fRec14[i] = ((fSlow84 * fRec14[(i - 1)]) + (fSlow85 * (((((fZec137[i] * fZec139[i]) * fZec141[i]) * fZec143[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec134[i])) & 1023)]) + (fZec144[i] * ((((((fZec146[i] * fZec147[i]) * fZec148[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec145[i])) & 1023)]) + (0.5f * (((fZec136[i] * fZec150[i]) * fZec151[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec149[i])) & 1023)]))) + (0.166666672f * ((fZec152[i] * fZec154[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec153[i])) & 1023)]))) + (0.0416666679f * (fZec155[i] * fYec50[(((i + fYec50_idx) - std::min(512, iZec156[i])) & 1023)]))))))); + fYec51[((i + fYec51_idx) & 16383)] = ((0.760313988f * fRec23[(i - 1)]) + (0.649555743f * fZec122[i])); + fYec52[((i + fYec52_idx) & 16383)] = (((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, iZec163[i]))) & 16383)] * (0.0f - fZec165[i])) * (0.0f - (0.5f * fZec166[i]))) * (0.0f - (0.333333343f * fZec167[i]))) * (0.0f - (0.25f * fZec168[i]))) + ((fSlow26 + (fZec161[i] + (5.0f - fZec164[i]))) * ((((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 1)))) & 16383)] * (0.0f - fZec166[i])) * (0.0f - (0.5f * fZec167[i]))) * (0.0f - (0.333333343f * fZec168[i]))) + (0.5f * (((fZec165[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 2)))) & 16383)]) * (0.0f - fZec167[i])) * (0.0f - (0.5f * fZec168[i]))))) + (0.166666672f * ((fZec169[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 3)))) & 16383)]) * (0.0f - fZec168[i])))) + (0.0416666679f * ((fZec169[i] * fZec167[i]) * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 4)))) & 16383)]))))); + fYec53[i] = fYec52[(((i + fYec52_idx) - std::min(8192, std::max(0, int(fZec170[i])))) & 16383)]; + fRec101[i] = (fYec53[(i - 1)] - (((fZec171[i] + (2.0f - fRec102[i])) * (fRec101[(i - 1)] - fYec53[i])) / (fRec102[i] - fZec171[i]))); + fRec100[i] = ((fSlow55 * fRec101[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec100[(i - 1)]) - (fSlow53 * fRec101[i])))); + fRec99[i] = (fRec100[i] - (fSlow58 * ((fSlow59 * fRec99[(i - 2)]) + (fSlow62 * fRec99[(i - 1)])))); + fRec98[i] = ((fSlow58 * (((fSlow61 * fRec99[i]) + (fSlow63 * fRec99[(i - 1)])) + (fSlow61 * fRec99[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec98[(i - 2)]) + (fSlow62 * fRec98[(i - 1)])))); + fZec172[i] = (fSlow73 * fRec97[(i - 1)]); + fRec97[i] = ((fSlow65 * (((fSlow61 * fRec98[i]) + (fSlow63 * fRec98[(i - 1)])) + (fSlow61 * fRec98[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec97[(i - 2)]) + fZec172[i]))); + fRec108[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec108[(i - 1)]) - (fRec101[i] + fRec101[(i - 1)])))); + fRec107[i] = (fRec108[i] - (fSlow58 * ((fSlow59 * fRec107[(i - 2)]) + (fSlow62 * fRec107[(i - 1)])))); + fRec106[i] = ((fSlow58 * (fRec107[(i - 2)] + (fRec107[i] + (2.0f * fRec107[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec106[(i - 2)]) + (fSlow62 * fRec106[(i - 1)])))); + fZec173[i] = (fRec106[(i - 2)] + (fRec106[i] + (2.0f * fRec106[(i - 1)]))); + fYec54[i] = (fSlow65 * fZec173[i]); + fRec105[i] = ((fSlow75 * fYec54[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec105[(i - 1)]) - (fSlow78 * fZec173[i])))); + fRec104[i] = (fRec105[i] - (fSlow79 * ((fSlow80 * fRec104[(i - 2)]) + (fSlow73 * fRec104[(i - 1)])))); + fRec103[i] = ((fSlow79 * (((fSlow72 * fRec104[i]) + (fSlow81 * fRec104[(i - 1)])) + (fSlow72 * fRec104[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec103[(i - 2)]) + (fSlow73 * fRec103[(i - 1)])))); + fRec111[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec111[(i - 1)]) - (fYec54[i] + fYec54[(i - 1)])))); + fRec110[i] = (fRec111[i] - (fSlow79 * ((fSlow80 * fRec110[(i - 2)]) + (fSlow73 * fRec110[(i - 1)])))); + fRec109[i] = ((fSlow79 * (fRec110[(i - 2)] + (fRec110[i] + (2.0f * fRec110[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec109[(i - 2)]) + (fSlow73 * fRec109[(i - 1)])))); + fYec55[((i + fYec55_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec97[(i - 2)] + (fSlow69 * (fZec172[i] + (fSlow70 * fRec97[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec103[i]) + (fSlow81 * fRec103[(i - 1)])) + (fSlow72 * fRec103[(i - 2)]))) + (fSlow89 * (fRec109[(i - 2)] + (fRec109[i] + (2.0f * fRec109[(i - 1)])))))))) + float(input1[i])); + fRec96[i] = ((fSlow84 * fRec96[(i - 1)]) + (fSlow85 * (((((fZec45[i] * fZec47[i]) * fZec49[i]) * fZec51[i]) * fYec55[(((i + fYec55_idx) - iZec42[i]) & 1023)]) + (fZec52[i] * ((((((fZec54[i] * fZec55[i]) * fZec56[i]) * fYec55[(((i + fYec55_idx) - iZec53[i]) & 1023)]) + (0.5f * (((fZec44[i] * fZec58[i]) * fZec59[i]) * fYec55[(((i + fYec55_idx) - iZec57[i]) & 1023)]))) + (0.166666672f * ((fZec60[i] * fZec62[i]) * fYec55[(((i + fYec55_idx) - iZec61[i]) & 1023)]))) + (0.0416666679f * (fZec63[i] * fYec55[(((i + fYec55_idx) - iZec64[i]) & 1023)]))))))); + fZec174[i] = ((fSlow93 * fRec14[i]) - (fSlow94 * fRec11[(i - 1)])); + fZec175[i] = ((fSlow93 * fRec96[i]) - (fSlow94 * fRec12[(i - 1)])); + fYec56[((i + fYec56_idx) & 16383)] = ((0.707106769f * fZec174[i]) - (0.707106769f * fZec175[i])); + fYec57[i] = fYec56[(((i + fYec56_idx) - iZec91[i]) & 16383)]; + fRec13[i] = (fYec57[(i - 1)] - ((fZec93[i] * (fRec13[(i - 1)] - fYec57[i])) / fZec94[i])); + fRec11[i] = fRec13[i]; + fYec58[((i + fYec58_idx) & 16383)] = ((0.707106769f * fZec174[i]) + (0.707106769f * fZec175[i])); + fYec59[i] = fYec58[(((i + fYec58_idx) - std::min(8192, std::max(0, int(fZec176[i])))) & 16383)]; + fRec112[i] = (fYec59[(i - 1)] - (((fZec177[i] + (2.0f - fRec113[i])) * (fRec112[(i - 1)] - fYec59[i])) / (fRec113[i] - fZec177[i]))); + fRec12[i] = fRec112[i]; + fZec178[i] = ((fSlow93 * fRec11[(i - 1)]) + (fSlow94 * fRec14[i])); + fZec179[i] = ((fSlow93 * fZec178[i]) - (fSlow94 * fRec8[(i - 1)])); + fZec180[i] = ((fSlow93 * fRec12[(i - 1)]) + (fSlow94 * fRec96[i])); + fZec181[i] = ((fSlow93 * fZec180[i]) - (fSlow94 * fRec9[(i - 1)])); + fYec60[((i + fYec60_idx) & 16383)] = ((0.707106769f * fZec179[i]) - (0.707106769f * fZec181[i])); + fYec61[i] = fYec60[(((i + fYec60_idx) - iZec111[i]) & 16383)]; + fRec10[i] = (fYec61[(i - 1)] - ((fZec113[i] * (fRec10[(i - 1)] - fYec61[i])) / fZec114[i])); + fRec8[i] = fRec10[i]; + fYec62[((i + fYec62_idx) & 16383)] = ((0.707106769f * fZec179[i]) + (0.707106769f * fZec181[i])); + fYec63[i] = fYec62[(((i + fYec62_idx) - iZec102[i]) & 16383)]; + fRec114[i] = (fYec63[(i - 1)] - ((fZec104[i] * (fRec114[(i - 1)] - fYec63[i])) / fZec105[i])); + fRec9[i] = fRec114[i]; + fZec182[i] = ((fSlow93 * fRec8[(i - 1)]) + (fSlow94 * fZec178[i])); + fZec183[i] = ((fSlow93 * fZec182[i]) - (fSlow94 * fRec5[(i - 1)])); + fZec184[i] = ((fSlow93 * fRec9[(i - 1)]) + (fSlow94 * fZec180[i])); + fZec185[i] = ((fSlow93 * fZec184[i]) - (fSlow94 * fRec6[(i - 1)])); + fYec64[((i + fYec64_idx) & 16383)] = ((0.707106769f * fZec183[i]) - (0.707106769f * fZec185[i])); + fYec65[i] = fYec64[(((i + fYec64_idx) - iZec116[i]) & 16383)]; + fRec7[i] = (fYec65[(i - 1)] - ((fZec118[i] * (fRec7[(i - 1)] - fYec65[i])) / fZec119[i])); + fRec5[i] = fRec7[i]; + fYec66[((i + fYec66_idx) & 16383)] = ((0.707106769f * fZec183[i]) + (0.707106769f * fZec185[i])); + fYec67[i] = fYec66[(((i + fYec66_idx) - std::min(8192, std::max(0, int(fZec186[i])))) & 16383)]; + fRec115[i] = (fYec67[(i - 1)] - (((fZec187[i] + (2.0f - fRec116[i])) * (fRec115[(i - 1)] - fYec67[i])) / (fRec116[i] - fZec187[i]))); + fRec6[i] = fRec115[i]; + fZec188[i] = ((fSlow93 * fRec5[(i - 1)]) + (fSlow94 * fZec182[i])); + fZec189[i] = ((fSlow93 * fZec188[i]) - (fSlow94 * fRec2[(i - 1)])); + fZec190[i] = ((fSlow93 * fRec6[(i - 1)]) + (fSlow94 * fZec184[i])); + fZec191[i] = ((fSlow93 * fZec190[i]) - (fSlow94 * fRec3[(i - 1)])); + fYec68[((i + fYec68_idx) & 16383)] = ((0.707106769f * fZec189[i]) - (0.707106769f * fZec191[i])); + fYec69[i] = fYec68[(((i + fYec68_idx) - std::min(8192, std::max(0, int(fZec192[i])))) & 16383)]; + fRec4[i] = (fYec69[(i - 1)] - (((fZec193[i] + (2.0f - fRec117[i])) * (fRec4[(i - 1)] - fYec69[i])) / (fRec117[i] - fZec193[i]))); + fRec2[i] = fRec4[i]; + fYec70[((i + fYec70_idx) & 16383)] = ((0.707106769f * fZec189[i]) + (0.707106769f * fZec191[i])); + fYec71[i] = fYec70[(((i + fYec70_idx) - iZec127[i]) & 16383)]; + fRec118[i] = (fYec71[(i - 1)] - ((fZec129[i] * (fRec118[(i - 1)] - fYec71[i])) / fZec130[i])); + fRec3[i] = fRec118[i]; + fRec0[i] = ((fSlow93 * fRec2[(i - 1)]) + (fSlow94 * fZec188[i])); + fRec1[i] = ((fSlow93 * fRec3[(i - 1)]) + (fSlow94 * fZec190[i])); + + } + /* Post code */ + fYec70_idx_save = vsize; + for (int j299 = 0; (j299 < 4); j299 = (j299 + 1)) { + fYec71_perm[j299] = fYec71_tmp[(vsize + j299)]; + + } + for (int j301 = 0; (j301 < 4); j301 = (j301 + 1)) { + fRec118_perm[j301] = fRec118_tmp[(vsize + j301)]; + + } + fYec68_idx_save = vsize; + for (int j293 = 0; (j293 < 4); j293 = (j293 + 1)) { + fYec69_perm[j293] = fYec69_tmp[(vsize + j293)]; + + } + fYec66_idx_save = vsize; + for (int j285 = 0; (j285 < 4); j285 = (j285 + 1)) { + fYec67_perm[j285] = fYec67_tmp[(vsize + j285)]; + + } + for (int j287 = 0; (j287 < 4); j287 = (j287 + 1)) { + fRec115_perm[j287] = fRec115_tmp[(vsize + j287)]; + + } + fYec64_idx_save = vsize; + for (int j277 = 0; (j277 < 4); j277 = (j277 + 1)) { + fYec65_perm[j277] = fYec65_tmp[(vsize + j277)]; + + } + fYec62_idx_save = vsize; + for (int j271 = 0; (j271 < 4); j271 = (j271 + 1)) { + fYec63_perm[j271] = fYec63_tmp[(vsize + j271)]; + + } + for (int j273 = 0; (j273 < 4); j273 = (j273 + 1)) { + fRec114_perm[j273] = fRec114_tmp[(vsize + j273)]; + + } + fYec60_idx_save = vsize; + for (int j265 = 0; (j265 < 4); j265 = (j265 + 1)) { + fYec61_perm[j265] = fYec61_tmp[(vsize + j265)]; + + } + fYec58_idx_save = vsize; + for (int j259 = 0; (j259 < 4); j259 = (j259 + 1)) { + fYec59_perm[j259] = fYec59_tmp[(vsize + j259)]; + + } + for (int j261 = 0; (j261 < 4); j261 = (j261 + 1)) { + fRec112_perm[j261] = fRec112_tmp[(vsize + j261)]; + + } + fYec56_idx_save = vsize; + for (int j251 = 0; (j251 < 4); j251 = (j251 + 1)) { + fYec57_perm[j251] = fYec57_tmp[(vsize + j251)]; + + } + fYec55_idx_save = vsize; + for (int j243 = 0; (j243 < 4); j243 = (j243 + 1)) { + fRec111_perm[j243] = fRec111_tmp[(vsize + j243)]; + + } + for (int j245 = 0; (j245 < 4); j245 = (j245 + 1)) { + fRec110_perm[j245] = fRec110_tmp[(vsize + j245)]; + + } + for (int j247 = 0; (j247 < 4); j247 = (j247 + 1)) { + fRec109_perm[j247] = fRec109_tmp[(vsize + j247)]; + + } + for (int j235 = 0; (j235 < 4); j235 = (j235 + 1)) { + fYec54_perm[j235] = fYec54_tmp[(vsize + j235)]; + + } + for (int j229 = 0; (j229 < 4); j229 = (j229 + 1)) { + fRec108_perm[j229] = fRec108_tmp[(vsize + j229)]; + + } + for (int j231 = 0; (j231 < 4); j231 = (j231 + 1)) { + fRec107_perm[j231] = fRec107_tmp[(vsize + j231)]; + + } + for (int j233 = 0; (j233 < 4); j233 = (j233 + 1)) { + fRec106_perm[j233] = fRec106_tmp[(vsize + j233)]; + + } + for (int j237 = 0; (j237 < 4); j237 = (j237 + 1)) { + fRec105_perm[j237] = fRec105_tmp[(vsize + j237)]; + + } + for (int j239 = 0; (j239 < 4); j239 = (j239 + 1)) { + fRec104_perm[j239] = fRec104_tmp[(vsize + j239)]; + + } + for (int j241 = 0; (j241 < 4); j241 = (j241 + 1)) { + fRec103_perm[j241] = fRec103_tmp[(vsize + j241)]; + + } + fYec51_idx_save = vsize; + fYec52_idx_save = vsize; + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fYec53_perm[j217] = fYec53_tmp[(vsize + j217)]; + + } + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec101_perm[j219] = fRec101_tmp[(vsize + j219)]; + + } + for (int j221 = 0; (j221 < 4); j221 = (j221 + 1)) { + fRec100_perm[j221] = fRec100_tmp[(vsize + j221)]; + + } + for (int j223 = 0; (j223 < 4); j223 = (j223 + 1)) { + fRec99_perm[j223] = fRec99_tmp[(vsize + j223)]; + + } + for (int j225 = 0; (j225 < 4); j225 = (j225 + 1)) { + fRec98_perm[j225] = fRec98_tmp[(vsize + j225)]; + + } + for (int j227 = 0; (j227 < 4); j227 = (j227 + 1)) { + fRec97_perm[j227] = fRec97_tmp[(vsize + j227)]; + + } + for (int j249 = 0; (j249 < 4); j249 = (j249 + 1)) { + fRec96_perm[j249] = fRec96_tmp[(vsize + j249)]; + + } + fYec50_idx_save = vsize; + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec95_perm[j207] = fRec95_tmp[(vsize + j207)]; + + } + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fRec94_perm[j209] = fRec94_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec93_perm[j211] = fRec93_tmp[(vsize + j211)]; + + } + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fYec49_perm[j199] = fYec49_tmp[(vsize + j199)]; + + } + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fRec92_perm[j193] = fRec92_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec91_perm[j195] = fRec91_tmp[(vsize + j195)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec90_perm[j197] = fRec90_tmp[(vsize + j197)]; + + } + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fRec89_perm[j201] = fRec89_tmp[(vsize + j201)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec88_perm[j203] = fRec88_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec87_perm[j205] = fRec87_tmp[(vsize + j205)]; + + } + fYec46_idx_save = vsize; + fYec47_idx_save = vsize; + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fYec48_perm[j181] = fYec48_tmp[(vsize + j181)]; + + } + fYec44_idx_save = vsize; + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fYec45_perm[j173] = fYec45_tmp[(vsize + j173)]; + + } + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec84_perm[j175] = fRec84_tmp[(vsize + j175)]; + + } + fYec42_idx_save = vsize; + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fYec43_perm[j165] = fYec43_tmp[(vsize + j165)]; + + } + fYec40_idx_save = vsize; + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fYec41_perm[j157] = fYec41_tmp[(vsize + j157)]; + + } + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec81_perm[j159] = fRec81_tmp[(vsize + j159)]; + + } + fYec38_idx_save = vsize; + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fYec39_perm[j149] = fYec39_tmp[(vsize + j149)]; + + } + fYec36_idx_save = vsize; + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fYec37_perm[j141] = fYec37_tmp[(vsize + j141)]; + + } + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec78_perm[j143] = fRec78_tmp[(vsize + j143)]; + + } + fYec34_idx_save = vsize; + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fYec35_perm[j133] = fYec35_tmp[(vsize + j133)]; + + } + fYec32_idx_save = vsize; + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fYec33_perm[j125] = fYec33_tmp[(vsize + j125)]; + + } + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec75_perm[j127] = fRec75_tmp[(vsize + j127)]; + + } + fYec30_idx_save = vsize; + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fYec31_perm[j117] = fYec31_tmp[(vsize + j117)]; + + } + fYec28_idx_save = vsize; + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fYec29_perm[j109] = fYec29_tmp[(vsize + j109)]; + + } + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec72_perm[j111] = fRec72_tmp[(vsize + j111)]; + + } + fYec26_idx_save = vsize; + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fYec27_perm[j101] = fYec27_tmp[(vsize + j101)]; + + } + fYec23_idx_save = vsize; + fYec24_idx_save = vsize; + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fYec25_perm[j95] = fYec25_tmp[(vsize + j95)]; + + } + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fRec69_perm[j97] = fRec69_tmp[(vsize + j97)]; + + } + fYec20_idx_save = vsize; + fYec21_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec22_perm[j89] = fYec22_tmp[(vsize + j89)]; + + } + fYec18_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec19_perm[j81] = fYec19_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec66_perm[j83] = fRec66_tmp[(vsize + j83)]; + + } + fYec16_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec17_perm[j73] = fYec17_tmp[(vsize + j73)]; + + } + fYec14_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec15_perm[j65] = fYec15_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec63_perm[j67] = fRec63_tmp[(vsize + j67)]; + + } + fYec12_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec13_perm[j57] = fYec13_tmp[(vsize + j57)]; + + } + fYec10_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec11_perm[j49] = fYec11_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec60_perm[j51] = fRec60_tmp[(vsize + j51)]; + + } + fYec8_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec9_perm[j41] = fYec9_tmp[(vsize + j41)]; + + } + fYec6_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec7_perm[j33] = fYec7_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec57_perm[j35] = fRec57_tmp[(vsize + j35)]; + + } + fYec4_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec5_perm[j25] = fYec5_tmp[(vsize + j25)]; + + } + fYec2_idx_save = vsize; + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fYec3_perm[j17] = fYec3_tmp[(vsize + j17)]; + + } + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fRec54_perm[j19] = fRec54_tmp[(vsize + j19)]; + + } + fYec0_idx_save = vsize; + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fYec1_perm[j9] = fYec1_tmp[(vsize + j9)]; + + } + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec52_perm[j11] = fRec52_tmp[(vsize + j11)]; + + } + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + fRec50_perm[j13] = fRec50_tmp[(vsize + j13)]; + + } + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fRec51_perm[j21] = fRec51_tmp[(vsize + j21)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec49_perm[j27] = fRec49_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec47_perm[j29] = fRec47_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec48_perm[j37] = fRec48_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec46_perm[j43] = fRec46_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec44_perm[j45] = fRec44_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec45_perm[j53] = fRec45_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec43_perm[j59] = fRec43_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec41_perm[j61] = fRec41_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec42_perm[j69] = fRec42_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec40_perm[j75] = fRec40_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec38_perm[j77] = fRec38_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec39_perm[j85] = fRec39_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec37_perm[j91] = fRec37_tmp[(vsize + j91)]; + + } + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec36_perm[j103] = fRec36_tmp[(vsize + j103)]; + + } + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fRec34_perm[j105] = fRec34_tmp[(vsize + j105)]; + + } + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fRec35_perm[j113] = fRec35_tmp[(vsize + j113)]; + + } + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec33_perm[j119] = fRec33_tmp[(vsize + j119)]; + + } + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fRec31_perm[j121] = fRec31_tmp[(vsize + j121)]; + + } + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fRec32_perm[j129] = fRec32_tmp[(vsize + j129)]; + + } + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec30_perm[j135] = fRec30_tmp[(vsize + j135)]; + + } + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fRec28_perm[j137] = fRec28_tmp[(vsize + j137)]; + + } + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fRec29_perm[j145] = fRec29_tmp[(vsize + j145)]; + + } + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec27_perm[j151] = fRec27_tmp[(vsize + j151)]; + + } + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fRec25_perm[j153] = fRec25_tmp[(vsize + j153)]; + + } + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fRec26_perm[j161] = fRec26_tmp[(vsize + j161)]; + + } + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec24_perm[j167] = fRec24_tmp[(vsize + j167)]; + + } + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fRec22_perm[j169] = fRec22_tmp[(vsize + j169)]; + + } + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fRec23_perm[j177] = fRec23_tmp[(vsize + j177)]; + + } + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec21_perm[j183] = fRec21_tmp[(vsize + j183)]; + + } + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fRec20_perm[j185] = fRec20_tmp[(vsize + j185)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec19_perm[j187] = fRec19_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec18_perm[j189] = fRec18_tmp[(vsize + j189)]; + + } + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec17_perm[j191] = fRec17_tmp[(vsize + j191)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec14_perm[j213] = fRec14_tmp[(vsize + j213)]; + + } + for (int j253 = 0; (j253 < 4); j253 = (j253 + 1)) { + fRec13_perm[j253] = fRec13_tmp[(vsize + j253)]; + + } + for (int j255 = 0; (j255 < 4); j255 = (j255 + 1)) { + fRec11_perm[j255] = fRec11_tmp[(vsize + j255)]; + + } + for (int j263 = 0; (j263 < 4); j263 = (j263 + 1)) { + fRec12_perm[j263] = fRec12_tmp[(vsize + j263)]; + + } + for (int j267 = 0; (j267 < 4); j267 = (j267 + 1)) { + fRec10_perm[j267] = fRec10_tmp[(vsize + j267)]; + + } + for (int j269 = 0; (j269 < 4); j269 = (j269 + 1)) { + fRec8_perm[j269] = fRec8_tmp[(vsize + j269)]; + + } + for (int j275 = 0; (j275 < 4); j275 = (j275 + 1)) { + fRec9_perm[j275] = fRec9_tmp[(vsize + j275)]; + + } + for (int j279 = 0; (j279 < 4); j279 = (j279 + 1)) { + fRec7_perm[j279] = fRec7_tmp[(vsize + j279)]; + + } + for (int j281 = 0; (j281 < 4); j281 = (j281 + 1)) { + fRec5_perm[j281] = fRec5_tmp[(vsize + j281)]; + + } + for (int j289 = 0; (j289 < 4); j289 = (j289 + 1)) { + fRec6_perm[j289] = fRec6_tmp[(vsize + j289)]; + + } + for (int j295 = 0; (j295 < 4); j295 = (j295 + 1)) { + fRec4_perm[j295] = fRec4_tmp[(vsize + j295)]; + + } + for (int j297 = 0; (j297 < 4); j297 = (j297 + 1)) { + fRec2_perm[j297] = fRec2_tmp[(vsize + j297)]; + + } + for (int j303 = 0; (j303 < 4); j303 = (j303 + 1)) { + fRec3_perm[j303] = fRec3_tmp[(vsize + j303)]; + + } + for (int j305 = 0; (j305 < 4); j305 = (j305 + 1)) { + fRec0_perm[j305] = fRec0_tmp[(vsize + j305)]; + + } + for (int j307 = 0; (j307 < 4); j307 = (j307 + 1)) { + fRec1_perm[j307] = fRec1_tmp[(vsize + j307)]; + + } + /* Vectorizable loop 170 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[i]); + + } + /* Vectorizable loop 171 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[i]); + + } + } + } -}; - +}; //---------------------------------------------------------------------------- // SuperCollider/Faust interface @@ -1398,7 +7421,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1481,9 +7504,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1588,7 +7611,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1651,7 +7674,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1680,9 +7703,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF + +#endif diff --git a/source/DEINDUGens/faust_src/GreyholeRaw.cpp b/source/DEINDUGens/faust_src/GreyholeRaw.cpp index aacd64ef89..3768a3c379 100644 --- a/source/DEINDUGens/faust_src/GreyholeRaw.cpp +++ b/source/DEINDUGens/faust_src/GreyholeRaw.cpp @@ -1,20 +1,15 @@ -//---------------------------------------------------------- -// version: "1.0" -// author: "Julian Parker, bug fixes by Till Bovermann" -// license: "GPL2+" -// name: "GreyholeRaw" -// copyright: "(c) Julian Parker 2013" -// -// Code generated with Faust 0.9.98 (http://faust.grame.fr) -//---------------------------------------------------------- +/* ------------------------------------------------------------ +author: "Julian Parker, bug fixes by Till Bovermann" +copyright: "(c) Julian Parker 2013" +license: "GPL2+" +name: "GreyholeRaw" +version: "1.0" +Code generated with Faust 2.15.11 (https://faust.grame.fr) +Compilation options: -vec -lv 0 -vs 8 -ftz 0 -mcd 16 +------------------------------------------------------------ */ -/* link with : "primes" */ -#include -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -36,6 +31,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + #include #include #include @@ -48,9 +48,15 @@ using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -82,7 +88,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -111,6 +117,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -178,8 +186,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -209,842 +218,5078 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +/* link with : "primes" */ +#include +#include +#include +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - float fVec0[2]; - int iVec1[2]; - float fConst0; - float fConst1; - FAUSTFLOAT fslider1; - float fVec2[2]; - float fConst2; - FAUSTFLOAT fslider2; - float fVec3[2]; - float fRec39[2]; - float fRec40[2]; - int IOTA; - float fVec4[131072]; - FAUSTFLOAT fslider3; - float fRec41[2]; - float fRec42[2]; - float fRec43[2]; - float fRec44[2]; - FAUSTFLOAT fslider4; - float fVec5[2]; - float fVec6[131072]; - float fVec7[16384]; - FAUSTFLOAT fslider5; - float fRec45[2]; - float fRec38[2]; - float fRec36[2]; - float fVec8[16384]; - float fRec47[2]; - float fRec46[2]; - float fRec37[2]; - float fVec9[16384]; - float fRec48[2]; - float fRec35[2]; - float fRec33[2]; - float fVec10[16384]; - float fRec50[2]; - float fRec49[2]; - float fRec34[2]; - float fVec11[16384]; - float fRec51[2]; - float fRec32[2]; - float fRec30[2]; - float fVec12[16384]; - float fRec53[2]; - float fRec52[2]; - float fRec31[2]; - float fVec13[16384]; - float fRec54[2]; - float fRec29[2]; - float fRec27[2]; - float fVec14[16384]; - float fRec56[2]; - float fRec55[2]; - float fRec28[2]; - float fVec15[16384]; - float fRec57[2]; - float fRec26[2]; - float fRec24[2]; - float fVec16[16384]; - float fRec59[2]; - float fRec58[2]; - float fRec25[2]; - float fVec17[16384]; - float fRec60[2]; - float fRec23[2]; - float fRec21[2]; - float fVec18[16384]; - float fRec62[2]; - float fRec61[2]; - float fRec22[2]; - float fVec19[16384]; - float fRec63[2]; - float fRec20[2]; - float fRec18[2]; - float fVec20[16384]; - float fRec65[2]; - float fRec64[2]; - float fRec19[2]; - float fVec21[16384]; - float fRec66[2]; - float fRec17[2]; - float fRec15[2]; - float fVec22[16384]; - float fRec68[2]; - float fRec67[2]; - float fRec16[2]; - float fVec23[16384]; - float fRec69[2]; - float fRec14[2]; - float fRec12[2]; - float fVec24[16384]; - float fRec71[2]; - float fRec70[2]; - float fRec13[2]; - float fVec25[16384]; - float fRec72[2]; - float fRec11[2]; - float fRec9[2]; - float fVec26[16384]; - float fRec74[2]; - float fRec73[2]; - float fRec10[2]; - float fVec27[16384]; - float fRec75[2]; - float fRec8[2]; - float fRec6[2]; - float fVec28[16384]; - float fRec77[2]; - float fRec76[2]; - float fRec7[2]; - float fVec29[16384]; - float fRec78[2]; - float fRec5[2]; - float fRec3[2]; - float fVec30[16384]; - float fRec80[2]; - float fRec79[2]; - float fRec4[2]; - FAUSTFLOAT fslider6; - float fVec31[2]; - float fRec2[2]; - float fRec0[1024]; - float fRec81[2]; - float fRec1[1024]; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("version", "1.0"); + float fConst0; + FAUSTFLOAT fHslider0; + float fRec39_perm[4]; + float fRec40_perm[4]; + float fRec41_perm[4]; + float fRec42_perm[4]; + float fConst1; + FAUSTFLOAT fHslider1; + float fVec0_perm[4]; + float fRec43_perm[4]; + int iVec1_perm[4]; + float fRec44_perm[4]; + FAUSTFLOAT fHslider2; + float fRec45_perm[4]; + FAUSTFLOAT fHslider3; + float fVec2_perm[4]; + FAUSTFLOAT fHslider4; + float fVec3_perm[4]; + float fConst2; + FAUSTFLOAT fHslider5; + float fVec4_perm[4]; + float fYec0[131072]; + int fYec0_idx; + int fYec0_idx_save; + float fYec1[16384]; + int fYec1_idx; + int fYec1_idx_save; + float fYec2_perm[4]; + float fRec38_perm[4]; + float fRec36_perm[4]; + float fRec47_perm[4]; + float fYec3[131072]; + int fYec3_idx; + int fYec3_idx_save; + float fYec4[16384]; + int fYec4_idx; + int fYec4_idx_save; + float fYec5_perm[4]; + float fRec46_perm[4]; + float fRec37_perm[4]; + float fRec48_perm[4]; + float fYec6[16384]; + int fYec6_idx; + int fYec6_idx_save; + float fYec7_perm[4]; + float fRec35_perm[4]; + float fRec33_perm[4]; + float fRec50_perm[4]; + float fYec8[16384]; + int fYec8_idx; + int fYec8_idx_save; + float fYec9_perm[4]; + float fRec49_perm[4]; + float fRec34_perm[4]; + float fRec51_perm[4]; + float fYec10[16384]; + int fYec10_idx; + int fYec10_idx_save; + float fYec11_perm[4]; + float fRec32_perm[4]; + float fRec30_perm[4]; + float fRec53_perm[4]; + float fYec12[16384]; + int fYec12_idx; + int fYec12_idx_save; + float fYec13_perm[4]; + float fRec52_perm[4]; + float fRec31_perm[4]; + float fRec54_perm[4]; + float fYec14[16384]; + int fYec14_idx; + int fYec14_idx_save; + float fYec15_perm[4]; + float fRec29_perm[4]; + float fRec27_perm[4]; + float fRec56_perm[4]; + float fYec16[16384]; + int fYec16_idx; + int fYec16_idx_save; + float fYec17_perm[4]; + float fRec55_perm[4]; + float fRec28_perm[4]; + float fRec57_perm[4]; + float fYec18[16384]; + int fYec18_idx; + int fYec18_idx_save; + float fYec19_perm[4]; + float fRec26_perm[4]; + float fRec24_perm[4]; + float fRec59_perm[4]; + float fYec20[16384]; + int fYec20_idx; + int fYec20_idx_save; + float fYec21_perm[4]; + float fRec58_perm[4]; + float fRec25_perm[4]; + float fRec60_perm[4]; + float fYec22[16384]; + int fYec22_idx; + int fYec22_idx_save; + float fYec23_perm[4]; + float fRec23_perm[4]; + float fRec21_perm[4]; + float fRec62_perm[4]; + float fYec24[16384]; + int fYec24_idx; + int fYec24_idx_save; + float fYec25_perm[4]; + float fRec61_perm[4]; + float fRec22_perm[4]; + float fRec63_perm[4]; + float fYec26[16384]; + int fYec26_idx; + int fYec26_idx_save; + float fYec27_perm[4]; + float fRec20_perm[4]; + float fRec18_perm[4]; + float fRec65_perm[4]; + float fYec28[16384]; + int fYec28_idx; + int fYec28_idx_save; + float fYec29_perm[4]; + float fRec64_perm[4]; + float fRec19_perm[4]; + float fRec66_perm[4]; + float fYec30[16384]; + int fYec30_idx; + int fYec30_idx_save; + float fYec31_perm[4]; + float fRec17_perm[4]; + float fRec15_perm[4]; + float fRec68_perm[4]; + float fYec32[16384]; + int fYec32_idx; + int fYec32_idx_save; + float fYec33_perm[4]; + float fRec67_perm[4]; + float fRec16_perm[4]; + float fRec69_perm[4]; + float fYec34[16384]; + int fYec34_idx; + int fYec34_idx_save; + float fYec35_perm[4]; + float fRec14_perm[4]; + float fRec12_perm[4]; + float fRec71_perm[4]; + float fYec36[16384]; + int fYec36_idx; + int fYec36_idx_save; + float fYec37_perm[4]; + float fRec70_perm[4]; + float fRec13_perm[4]; + float fRec72_perm[4]; + float fYec38[16384]; + int fYec38_idx; + int fYec38_idx_save; + float fYec39_perm[4]; + float fRec11_perm[4]; + float fRec9_perm[4]; + float fRec74_perm[4]; + float fYec40[16384]; + int fYec40_idx; + int fYec40_idx_save; + float fYec41_perm[4]; + float fRec73_perm[4]; + float fRec10_perm[4]; + float fRec75_perm[4]; + float fYec42[16384]; + int fYec42_idx; + int fYec42_idx_save; + float fYec43_perm[4]; + float fRec8_perm[4]; + float fRec6_perm[4]; + float fRec77_perm[4]; + float fYec44[16384]; + int fYec44_idx; + int fYec44_idx_save; + float fYec45_perm[4]; + float fRec76_perm[4]; + float fRec7_perm[4]; + float fRec78_perm[4]; + float fYec46[16384]; + int fYec46_idx; + int fYec46_idx_save; + float fYec47_perm[4]; + float fRec5_perm[4]; + float fRec3_perm[4]; + float fRec80_perm[4]; + float fYec48[16384]; + int fYec48_idx; + int fYec48_idx_save; + float fYec49_perm[4]; + float fRec79_perm[4]; + float fRec4_perm[4]; + FAUSTFLOAT fHslider6; + float fVec5_perm[4]; + float fRec2_perm[4]; + float fRec0[1024]; + int fRec0_idx; + int fRec0_idx_save; + float fRec81_perm[4]; + float fRec1[1024]; + int fRec1_idx; + int fRec1_idx_save; + + public: + + void metadata(Meta* m) { m->declare("author", "Julian Parker, bug fixes by Till Bovermann"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Julian Parker 2013"); + m->declare("delays.lib/name", "Faust Delay Library"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "GreyholeRaw"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); m->declare("license", "GPL2+"); - m->declare("name", "GreyholeRaw"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); - m->declare("copyright", "(c) Julian Parker 2013"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "GreyholeRaw"); m->declare("oscillators.lib/name", "Faust Oscillator Library"); m->declare("oscillators.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 2; } + virtual int getNumInputs() { + return 2; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 0; + break; + } + case 1: { + rate = 0; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05f, max(1e+03f, (float)fSamplingFreq)); - fConst1 = (0.00056689343f * fConst0); - fConst2 = (3.1415927f / fConst0); + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + fConst1 = (3.14159274f / fConst0); + fConst2 = (0.000566893432f * fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.5f; - fslider1 = 0.1f; - fslider2 = 2.0f; - fslider3 = 0.2f; - fslider4 = 0.9f; - fslider5 = 1.0f; - fslider6 = 0.0f; + fHslider0 = FAUSTFLOAT(0.20000000000000001f); + fHslider1 = FAUSTFLOAT(2.0f); + fHslider2 = FAUSTFLOAT(1.0f); + fHslider3 = FAUSTFLOAT(0.5f); + fHslider4 = FAUSTFLOAT(0.90000000000000002f); + fHslider5 = FAUSTFLOAT(0.10000000000000001f); + fHslider6 = FAUSTFLOAT(0.0f); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) iVec1[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - IOTA = 0; - for (int i=0; i<131072; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fVec5[i] = 0; - for (int i=0; i<131072; i++) fVec6[i] = 0; - for (int i=0; i<16384; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<16384; i++) fVec8[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<16384; i++) fVec9[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<16384; i++) fVec10[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<16384; i++) fVec11[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<16384; i++) fVec12[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<16384; i++) fVec13[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<16384; i++) fVec14[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<16384; i++) fVec15[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<16384; i++) fVec16[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<16384; i++) fVec17[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<16384; i++) fVec18[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<16384; i++) fVec19[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<16384; i++) fVec20[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<16384; i++) fVec21[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<16384; i++) fVec22[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<16384; i++) fVec23[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<16384; i++) fVec24[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<16384; i++) fVec25[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<16384; i++) fVec26[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<16384; i++) fVec27[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<16384; i++) fVec28[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<16384; i++) fVec29[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<16384; i++) fVec30[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fVec31[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<1024; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<1024; i++) fRec1[i] = 0; + for (int l0 = 0; (l0 < 4); l0 = (l0 + 1)) { + fRec39_perm[l0] = 0.0f; + + } + for (int l1 = 0; (l1 < 4); l1 = (l1 + 1)) { + fRec40_perm[l1] = 0.0f; + + } + for (int l2 = 0; (l2 < 4); l2 = (l2 + 1)) { + fRec41_perm[l2] = 0.0f; + + } + for (int l3 = 0; (l3 < 4); l3 = (l3 + 1)) { + fRec42_perm[l3] = 0.0f; + + } + for (int l4 = 0; (l4 < 4); l4 = (l4 + 1)) { + fVec0_perm[l4] = 0.0f; + + } + for (int l5 = 0; (l5 < 4); l5 = (l5 + 1)) { + fRec43_perm[l5] = 0.0f; + + } + for (int l6 = 0; (l6 < 4); l6 = (l6 + 1)) { + iVec1_perm[l6] = 0; + + } + for (int l7 = 0; (l7 < 4); l7 = (l7 + 1)) { + fRec44_perm[l7] = 0.0f; + + } + for (int l8 = 0; (l8 < 4); l8 = (l8 + 1)) { + fRec45_perm[l8] = 0.0f; + + } + for (int l9 = 0; (l9 < 4); l9 = (l9 + 1)) { + fVec2_perm[l9] = 0.0f; + + } + for (int l10 = 0; (l10 < 4); l10 = (l10 + 1)) { + fVec3_perm[l10] = 0.0f; + + } + for (int l11 = 0; (l11 < 4); l11 = (l11 + 1)) { + fVec4_perm[l11] = 0.0f; + + } + for (int l12 = 0; (l12 < 131072); l12 = (l12 + 1)) { + fYec0[l12] = 0.0f; + + } + fYec0_idx = 0; + fYec0_idx_save = 0; + for (int l13 = 0; (l13 < 16384); l13 = (l13 + 1)) { + fYec1[l13] = 0.0f; + + } + fYec1_idx = 0; + fYec1_idx_save = 0; + for (int l14 = 0; (l14 < 4); l14 = (l14 + 1)) { + fYec2_perm[l14] = 0.0f; + + } + for (int l15 = 0; (l15 < 4); l15 = (l15 + 1)) { + fRec38_perm[l15] = 0.0f; + + } + for (int l16 = 0; (l16 < 4); l16 = (l16 + 1)) { + fRec36_perm[l16] = 0.0f; + + } + for (int l17 = 0; (l17 < 4); l17 = (l17 + 1)) { + fRec47_perm[l17] = 0.0f; + + } + for (int l18 = 0; (l18 < 131072); l18 = (l18 + 1)) { + fYec3[l18] = 0.0f; + + } + fYec3_idx = 0; + fYec3_idx_save = 0; + for (int l19 = 0; (l19 < 16384); l19 = (l19 + 1)) { + fYec4[l19] = 0.0f; + + } + fYec4_idx = 0; + fYec4_idx_save = 0; + for (int l20 = 0; (l20 < 4); l20 = (l20 + 1)) { + fYec5_perm[l20] = 0.0f; + + } + for (int l21 = 0; (l21 < 4); l21 = (l21 + 1)) { + fRec46_perm[l21] = 0.0f; + + } + for (int l22 = 0; (l22 < 4); l22 = (l22 + 1)) { + fRec37_perm[l22] = 0.0f; + + } + for (int l23 = 0; (l23 < 4); l23 = (l23 + 1)) { + fRec48_perm[l23] = 0.0f; + + } + for (int l24 = 0; (l24 < 16384); l24 = (l24 + 1)) { + fYec6[l24] = 0.0f; + + } + fYec6_idx = 0; + fYec6_idx_save = 0; + for (int l25 = 0; (l25 < 4); l25 = (l25 + 1)) { + fYec7_perm[l25] = 0.0f; + + } + for (int l26 = 0; (l26 < 4); l26 = (l26 + 1)) { + fRec35_perm[l26] = 0.0f; + + } + for (int l27 = 0; (l27 < 4); l27 = (l27 + 1)) { + fRec33_perm[l27] = 0.0f; + + } + for (int l28 = 0; (l28 < 4); l28 = (l28 + 1)) { + fRec50_perm[l28] = 0.0f; + + } + for (int l29 = 0; (l29 < 16384); l29 = (l29 + 1)) { + fYec8[l29] = 0.0f; + + } + fYec8_idx = 0; + fYec8_idx_save = 0; + for (int l30 = 0; (l30 < 4); l30 = (l30 + 1)) { + fYec9_perm[l30] = 0.0f; + + } + for (int l31 = 0; (l31 < 4); l31 = (l31 + 1)) { + fRec49_perm[l31] = 0.0f; + + } + for (int l32 = 0; (l32 < 4); l32 = (l32 + 1)) { + fRec34_perm[l32] = 0.0f; + + } + for (int l33 = 0; (l33 < 4); l33 = (l33 + 1)) { + fRec51_perm[l33] = 0.0f; + + } + for (int l34 = 0; (l34 < 16384); l34 = (l34 + 1)) { + fYec10[l34] = 0.0f; + + } + fYec10_idx = 0; + fYec10_idx_save = 0; + for (int l35 = 0; (l35 < 4); l35 = (l35 + 1)) { + fYec11_perm[l35] = 0.0f; + + } + for (int l36 = 0; (l36 < 4); l36 = (l36 + 1)) { + fRec32_perm[l36] = 0.0f; + + } + for (int l37 = 0; (l37 < 4); l37 = (l37 + 1)) { + fRec30_perm[l37] = 0.0f; + + } + for (int l38 = 0; (l38 < 4); l38 = (l38 + 1)) { + fRec53_perm[l38] = 0.0f; + + } + for (int l39 = 0; (l39 < 16384); l39 = (l39 + 1)) { + fYec12[l39] = 0.0f; + + } + fYec12_idx = 0; + fYec12_idx_save = 0; + for (int l40 = 0; (l40 < 4); l40 = (l40 + 1)) { + fYec13_perm[l40] = 0.0f; + + } + for (int l41 = 0; (l41 < 4); l41 = (l41 + 1)) { + fRec52_perm[l41] = 0.0f; + + } + for (int l42 = 0; (l42 < 4); l42 = (l42 + 1)) { + fRec31_perm[l42] = 0.0f; + + } + for (int l43 = 0; (l43 < 4); l43 = (l43 + 1)) { + fRec54_perm[l43] = 0.0f; + + } + for (int l44 = 0; (l44 < 16384); l44 = (l44 + 1)) { + fYec14[l44] = 0.0f; + + } + fYec14_idx = 0; + fYec14_idx_save = 0; + for (int l45 = 0; (l45 < 4); l45 = (l45 + 1)) { + fYec15_perm[l45] = 0.0f; + + } + for (int l46 = 0; (l46 < 4); l46 = (l46 + 1)) { + fRec29_perm[l46] = 0.0f; + + } + for (int l47 = 0; (l47 < 4); l47 = (l47 + 1)) { + fRec27_perm[l47] = 0.0f; + + } + for (int l48 = 0; (l48 < 4); l48 = (l48 + 1)) { + fRec56_perm[l48] = 0.0f; + + } + for (int l49 = 0; (l49 < 16384); l49 = (l49 + 1)) { + fYec16[l49] = 0.0f; + + } + fYec16_idx = 0; + fYec16_idx_save = 0; + for (int l50 = 0; (l50 < 4); l50 = (l50 + 1)) { + fYec17_perm[l50] = 0.0f; + + } + for (int l51 = 0; (l51 < 4); l51 = (l51 + 1)) { + fRec55_perm[l51] = 0.0f; + + } + for (int l52 = 0; (l52 < 4); l52 = (l52 + 1)) { + fRec28_perm[l52] = 0.0f; + + } + for (int l53 = 0; (l53 < 4); l53 = (l53 + 1)) { + fRec57_perm[l53] = 0.0f; + + } + for (int l54 = 0; (l54 < 16384); l54 = (l54 + 1)) { + fYec18[l54] = 0.0f; + + } + fYec18_idx = 0; + fYec18_idx_save = 0; + for (int l55 = 0; (l55 < 4); l55 = (l55 + 1)) { + fYec19_perm[l55] = 0.0f; + + } + for (int l56 = 0; (l56 < 4); l56 = (l56 + 1)) { + fRec26_perm[l56] = 0.0f; + + } + for (int l57 = 0; (l57 < 4); l57 = (l57 + 1)) { + fRec24_perm[l57] = 0.0f; + + } + for (int l58 = 0; (l58 < 4); l58 = (l58 + 1)) { + fRec59_perm[l58] = 0.0f; + + } + for (int l59 = 0; (l59 < 16384); l59 = (l59 + 1)) { + fYec20[l59] = 0.0f; + + } + fYec20_idx = 0; + fYec20_idx_save = 0; + for (int l60 = 0; (l60 < 4); l60 = (l60 + 1)) { + fYec21_perm[l60] = 0.0f; + + } + for (int l61 = 0; (l61 < 4); l61 = (l61 + 1)) { + fRec58_perm[l61] = 0.0f; + + } + for (int l62 = 0; (l62 < 4); l62 = (l62 + 1)) { + fRec25_perm[l62] = 0.0f; + + } + for (int l63 = 0; (l63 < 4); l63 = (l63 + 1)) { + fRec60_perm[l63] = 0.0f; + + } + for (int l64 = 0; (l64 < 16384); l64 = (l64 + 1)) { + fYec22[l64] = 0.0f; + + } + fYec22_idx = 0; + fYec22_idx_save = 0; + for (int l65 = 0; (l65 < 4); l65 = (l65 + 1)) { + fYec23_perm[l65] = 0.0f; + + } + for (int l66 = 0; (l66 < 4); l66 = (l66 + 1)) { + fRec23_perm[l66] = 0.0f; + + } + for (int l67 = 0; (l67 < 4); l67 = (l67 + 1)) { + fRec21_perm[l67] = 0.0f; + + } + for (int l68 = 0; (l68 < 4); l68 = (l68 + 1)) { + fRec62_perm[l68] = 0.0f; + + } + for (int l69 = 0; (l69 < 16384); l69 = (l69 + 1)) { + fYec24[l69] = 0.0f; + + } + fYec24_idx = 0; + fYec24_idx_save = 0; + for (int l70 = 0; (l70 < 4); l70 = (l70 + 1)) { + fYec25_perm[l70] = 0.0f; + + } + for (int l71 = 0; (l71 < 4); l71 = (l71 + 1)) { + fRec61_perm[l71] = 0.0f; + + } + for (int l72 = 0; (l72 < 4); l72 = (l72 + 1)) { + fRec22_perm[l72] = 0.0f; + + } + for (int l73 = 0; (l73 < 4); l73 = (l73 + 1)) { + fRec63_perm[l73] = 0.0f; + + } + for (int l74 = 0; (l74 < 16384); l74 = (l74 + 1)) { + fYec26[l74] = 0.0f; + + } + fYec26_idx = 0; + fYec26_idx_save = 0; + for (int l75 = 0; (l75 < 4); l75 = (l75 + 1)) { + fYec27_perm[l75] = 0.0f; + + } + for (int l76 = 0; (l76 < 4); l76 = (l76 + 1)) { + fRec20_perm[l76] = 0.0f; + + } + for (int l77 = 0; (l77 < 4); l77 = (l77 + 1)) { + fRec18_perm[l77] = 0.0f; + + } + for (int l78 = 0; (l78 < 4); l78 = (l78 + 1)) { + fRec65_perm[l78] = 0.0f; + + } + for (int l79 = 0; (l79 < 16384); l79 = (l79 + 1)) { + fYec28[l79] = 0.0f; + + } + fYec28_idx = 0; + fYec28_idx_save = 0; + for (int l80 = 0; (l80 < 4); l80 = (l80 + 1)) { + fYec29_perm[l80] = 0.0f; + + } + for (int l81 = 0; (l81 < 4); l81 = (l81 + 1)) { + fRec64_perm[l81] = 0.0f; + + } + for (int l82 = 0; (l82 < 4); l82 = (l82 + 1)) { + fRec19_perm[l82] = 0.0f; + + } + for (int l83 = 0; (l83 < 4); l83 = (l83 + 1)) { + fRec66_perm[l83] = 0.0f; + + } + for (int l84 = 0; (l84 < 16384); l84 = (l84 + 1)) { + fYec30[l84] = 0.0f; + + } + fYec30_idx = 0; + fYec30_idx_save = 0; + for (int l85 = 0; (l85 < 4); l85 = (l85 + 1)) { + fYec31_perm[l85] = 0.0f; + + } + for (int l86 = 0; (l86 < 4); l86 = (l86 + 1)) { + fRec17_perm[l86] = 0.0f; + + } + for (int l87 = 0; (l87 < 4); l87 = (l87 + 1)) { + fRec15_perm[l87] = 0.0f; + + } + for (int l88 = 0; (l88 < 4); l88 = (l88 + 1)) { + fRec68_perm[l88] = 0.0f; + + } + for (int l89 = 0; (l89 < 16384); l89 = (l89 + 1)) { + fYec32[l89] = 0.0f; + + } + fYec32_idx = 0; + fYec32_idx_save = 0; + for (int l90 = 0; (l90 < 4); l90 = (l90 + 1)) { + fYec33_perm[l90] = 0.0f; + + } + for (int l91 = 0; (l91 < 4); l91 = (l91 + 1)) { + fRec67_perm[l91] = 0.0f; + + } + for (int l92 = 0; (l92 < 4); l92 = (l92 + 1)) { + fRec16_perm[l92] = 0.0f; + + } + for (int l93 = 0; (l93 < 4); l93 = (l93 + 1)) { + fRec69_perm[l93] = 0.0f; + + } + for (int l94 = 0; (l94 < 16384); l94 = (l94 + 1)) { + fYec34[l94] = 0.0f; + + } + fYec34_idx = 0; + fYec34_idx_save = 0; + for (int l95 = 0; (l95 < 4); l95 = (l95 + 1)) { + fYec35_perm[l95] = 0.0f; + + } + for (int l96 = 0; (l96 < 4); l96 = (l96 + 1)) { + fRec14_perm[l96] = 0.0f; + + } + for (int l97 = 0; (l97 < 4); l97 = (l97 + 1)) { + fRec12_perm[l97] = 0.0f; + + } + for (int l98 = 0; (l98 < 4); l98 = (l98 + 1)) { + fRec71_perm[l98] = 0.0f; + + } + for (int l99 = 0; (l99 < 16384); l99 = (l99 + 1)) { + fYec36[l99] = 0.0f; + + } + fYec36_idx = 0; + fYec36_idx_save = 0; + for (int l100 = 0; (l100 < 4); l100 = (l100 + 1)) { + fYec37_perm[l100] = 0.0f; + + } + for (int l101 = 0; (l101 < 4); l101 = (l101 + 1)) { + fRec70_perm[l101] = 0.0f; + + } + for (int l102 = 0; (l102 < 4); l102 = (l102 + 1)) { + fRec13_perm[l102] = 0.0f; + + } + for (int l103 = 0; (l103 < 4); l103 = (l103 + 1)) { + fRec72_perm[l103] = 0.0f; + + } + for (int l104 = 0; (l104 < 16384); l104 = (l104 + 1)) { + fYec38[l104] = 0.0f; + + } + fYec38_idx = 0; + fYec38_idx_save = 0; + for (int l105 = 0; (l105 < 4); l105 = (l105 + 1)) { + fYec39_perm[l105] = 0.0f; + + } + for (int l106 = 0; (l106 < 4); l106 = (l106 + 1)) { + fRec11_perm[l106] = 0.0f; + + } + for (int l107 = 0; (l107 < 4); l107 = (l107 + 1)) { + fRec9_perm[l107] = 0.0f; + + } + for (int l108 = 0; (l108 < 4); l108 = (l108 + 1)) { + fRec74_perm[l108] = 0.0f; + + } + for (int l109 = 0; (l109 < 16384); l109 = (l109 + 1)) { + fYec40[l109] = 0.0f; + + } + fYec40_idx = 0; + fYec40_idx_save = 0; + for (int l110 = 0; (l110 < 4); l110 = (l110 + 1)) { + fYec41_perm[l110] = 0.0f; + + } + for (int l111 = 0; (l111 < 4); l111 = (l111 + 1)) { + fRec73_perm[l111] = 0.0f; + + } + for (int l112 = 0; (l112 < 4); l112 = (l112 + 1)) { + fRec10_perm[l112] = 0.0f; + + } + for (int l113 = 0; (l113 < 4); l113 = (l113 + 1)) { + fRec75_perm[l113] = 0.0f; + + } + for (int l114 = 0; (l114 < 16384); l114 = (l114 + 1)) { + fYec42[l114] = 0.0f; + + } + fYec42_idx = 0; + fYec42_idx_save = 0; + for (int l115 = 0; (l115 < 4); l115 = (l115 + 1)) { + fYec43_perm[l115] = 0.0f; + + } + for (int l116 = 0; (l116 < 4); l116 = (l116 + 1)) { + fRec8_perm[l116] = 0.0f; + + } + for (int l117 = 0; (l117 < 4); l117 = (l117 + 1)) { + fRec6_perm[l117] = 0.0f; + + } + for (int l118 = 0; (l118 < 4); l118 = (l118 + 1)) { + fRec77_perm[l118] = 0.0f; + + } + for (int l119 = 0; (l119 < 16384); l119 = (l119 + 1)) { + fYec44[l119] = 0.0f; + + } + fYec44_idx = 0; + fYec44_idx_save = 0; + for (int l120 = 0; (l120 < 4); l120 = (l120 + 1)) { + fYec45_perm[l120] = 0.0f; + + } + for (int l121 = 0; (l121 < 4); l121 = (l121 + 1)) { + fRec76_perm[l121] = 0.0f; + + } + for (int l122 = 0; (l122 < 4); l122 = (l122 + 1)) { + fRec7_perm[l122] = 0.0f; + + } + for (int l123 = 0; (l123 < 4); l123 = (l123 + 1)) { + fRec78_perm[l123] = 0.0f; + + } + for (int l124 = 0; (l124 < 16384); l124 = (l124 + 1)) { + fYec46[l124] = 0.0f; + + } + fYec46_idx = 0; + fYec46_idx_save = 0; + for (int l125 = 0; (l125 < 4); l125 = (l125 + 1)) { + fYec47_perm[l125] = 0.0f; + + } + for (int l126 = 0; (l126 < 4); l126 = (l126 + 1)) { + fRec5_perm[l126] = 0.0f; + + } + for (int l127 = 0; (l127 < 4); l127 = (l127 + 1)) { + fRec3_perm[l127] = 0.0f; + + } + for (int l128 = 0; (l128 < 4); l128 = (l128 + 1)) { + fRec80_perm[l128] = 0.0f; + + } + for (int l129 = 0; (l129 < 16384); l129 = (l129 + 1)) { + fYec48[l129] = 0.0f; + + } + fYec48_idx = 0; + fYec48_idx_save = 0; + for (int l130 = 0; (l130 < 4); l130 = (l130 + 1)) { + fYec49_perm[l130] = 0.0f; + + } + for (int l131 = 0; (l131 < 4); l131 = (l131 + 1)) { + fRec79_perm[l131] = 0.0f; + + } + for (int l132 = 0; (l132 < 4); l132 = (l132 + 1)) { + fRec4_perm[l132] = 0.0f; + + } + for (int l133 = 0; (l133 < 4); l133 = (l133 + 1)) { + fVec5_perm[l133] = 0.0f; + + } + for (int l134 = 0; (l134 < 4); l134 = (l134 + 1)) { + fRec2_perm[l134] = 0.0f; + + } + for (int l135 = 0; (l135 < 1024); l135 = (l135 + 1)) { + fRec0[l135] = 0.0f; + + } + fRec0_idx = 0; + fRec0_idx_save = 0; + for (int l136 = 0; (l136 < 4); l136 = (l136 + 1)) { + fRec81_perm[l136] = 0.0f; + + } + for (int l137 = 0; (l137 < 1024); l137 = (l137 + 1)) { + fRec1[l137] = 0.0f; + + } + fRec1_idx = 0; + fRec1_idx_save = 0; + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); } + virtual void instanceInit(int samplingFreq) { instanceConstants(samplingFreq); instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->addHorizontalSlider("damping", &fslider6, 0.0f, 0.0f, 0.99f, 0.001f); - ui_interface->addHorizontalSlider("delayTime", &fslider3, 0.2f, 0.001f, 1.45f, 0.0001f); - ui_interface->addHorizontalSlider("diffusion", &fslider0, 0.5f, 0.0f, 0.99f, 0.0001f); - ui_interface->addHorizontalSlider("feedback", &fslider4, 0.9f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("modDepth", &fslider1, 0.1f, 0.0f, 1.0f, 0.001f); - ui_interface->addHorizontalSlider("modFreq", &fslider2, 2.0f, 0.0f, 1e+01f, 0.01f); - ui_interface->addHorizontalSlider("size", &fslider5, 1.0f, 0.5f, 3.0f, 0.0001f); + ui_interface->openVerticalBox("GreyholeRaw"); + ui_interface->addHorizontalSlider("damping", &fHslider6, 0.0f, 0.0f, 0.99000001f, 0.00100000005f); + ui_interface->addHorizontalSlider("delayTime", &fHslider0, 0.200000003f, 0.00100000005f, 1.45000005f, 9.99999975e-05f); + ui_interface->addHorizontalSlider("diffusion", &fHslider3, 0.5f, 0.0f, 0.99000001f, 9.99999975e-05f); + ui_interface->addHorizontalSlider("feedback", &fHslider4, 0.899999976f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("modDepth", &fHslider5, 0.100000001f, 0.0f, 1.0f, 0.00100000005f); + ui_interface->addHorizontalSlider("modFreq", &fHslider1, 2.0f, 0.0f, 10.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("size", &fHslider2, 1.0f, 0.5f, 3.0f, 9.99999975e-05f); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - float fSlow0 = float(fslider0); - float fSlow1 = float(fslider1); - float fSlow2 = float(fslider2); - float fSlow3 = floorf(min((float)65533, (fConst0 * float(fslider3)))); - float fSlow4 = float(fslider4); - float fSlow5 = float(fslider5); - float fSlow6 = (49 * fSlow5); - int iSlow7 = primes(fSlow6); - float fSlow8 = (0.0001f * iSlow7); - int iSlow9 = primes((fSlow6 + 10)); - float fSlow10 = (0.0001f * iSlow9); - float fSlow11 = (36 * fSlow5); - int iSlow12 = primes(fSlow11); - float fSlow13 = (0.001f * iSlow12); - int iSlow14 = primes((fSlow11 + 10)); - float fSlow15 = (0.001f * iSlow14); - float fSlow16 = (23 * fSlow5); - int iSlow17 = primes(fSlow16); - float fSlow18 = (0.001f * iSlow17); - int iSlow19 = primes((fSlow16 + 10)); - float fSlow20 = (0.001f * iSlow19); - int iSlow21 = primes((10 * fSlow5)); - float fSlow22 = (0.001f * iSlow21); - int iSlow23 = primes((10 * (fSlow5 + 1))); - float fSlow24 = (0.001f * iSlow23); - float fSlow25 = (68 * fSlow5); - int iSlow26 = primes(fSlow25); - float fSlow27 = (0.0001f * iSlow26); - int iSlow28 = primes((fSlow25 + 10)); - float fSlow29 = (0.0001f * iSlow28); - float fSlow30 = (55 * fSlow5); - int iSlow31 = primes(fSlow30); - float fSlow32 = (0.001f * iSlow31); - int iSlow33 = primes((fSlow30 + 10)); - float fSlow34 = (0.001f * iSlow33); - float fSlow35 = (42 * fSlow5); - int iSlow36 = primes(fSlow35); - float fSlow37 = (0.001f * iSlow36); - int iSlow38 = primes((fSlow35 + 10)); - float fSlow39 = (0.001f * iSlow38); - float fSlow40 = (29 * fSlow5); - int iSlow41 = primes(fSlow40); - float fSlow42 = (0.001f * iSlow41); - int iSlow43 = primes((fSlow40 + 10)); - float fSlow44 = (0.001f * iSlow43); - float fSlow45 = (87 * fSlow5); - int iSlow46 = primes(fSlow45); - float fSlow47 = (0.0001f * iSlow46); - int iSlow48 = primes((fSlow45 + 10)); - float fSlow49 = (0.0001f * iSlow48); - float fSlow50 = (74 * fSlow5); - int iSlow51 = primes(fSlow50); - float fSlow52 = (0.001f * iSlow51); - int iSlow53 = primes((fSlow50 + 10)); - float fSlow54 = (0.001f * iSlow53); - float fSlow55 = (61 * fSlow5); - int iSlow56 = primes(fSlow55); - float fSlow57 = (0.001f * iSlow56); - int iSlow58 = primes((fSlow55 + 10)); - float fSlow59 = (0.001f * iSlow58); - float fSlow60 = (48 * fSlow5); - int iSlow61 = primes(fSlow60); - float fSlow62 = (0.001f * iSlow61); - int iSlow63 = primes((fSlow60 + 10)); - float fSlow64 = (0.001f * iSlow63); - float fSlow65 = float(fslider6); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - for (int i=0; i 0.0f) & (fRec42[1] < 1.0f))))?fRec41[1]:0):((int(((fRec42[1] == 0.0f) & (fSlow3 != fRec43[1]))))?4.5351473e-05f:((int(((fRec42[1] == 1.0f) & (fSlow3 != fRec44[1]))))?-4.5351473e-05f:0))); - fRec41[0] = fTemp23; - fRec42[0] = max(0.0f, min(1.0f, (fRec42[1] + fTemp23))); - fRec43[0] = ((int(((fRec42[1] >= 1.0f) & (fRec44[1] != fSlow3))))?fSlow3:fRec43[1]); - fRec44[0] = ((int(((fRec42[1] <= 0.0f) & (fRec43[1] != fSlow3))))?fSlow3:fRec44[1]); - int iTemp24 = int(min((float)65536, max((float)0, fRec43[0]))); - float fTemp25 = (1.0f - fRec42[0]); - int iTemp26 = int(min((float)65536, max((float)0, fRec44[0]))); - fVec5[0] = fSlow4; - float fTemp27 = (fSlow4 + fVec5[1]); - float fTemp28 = ((float)input0[i] + (0.5f * (((fVec4[(IOTA-iTemp24)&131071] * fTemp25) + (fVec4[(IOTA-iTemp26)&131071] * fRec42[0])) * fTemp27))); - float fTemp29 = ((fRec27[1] * fTemp7) + (fTemp1 * fTemp28)); - float fTemp30 = ((fRec30[1] * fTemp7) + (fTemp1 * fTemp29)); - float fTemp31 = ((fRec33[1] * fTemp7) + (fTemp1 * fTemp30)); - float fTemp32 = ((fRec36[1] * fTemp7) + (fTemp1 * fTemp31)); - float fTemp33 = (fConst1 * (fTemp8 * (fRec39[0] + 1.0f))); - float fTemp34 = (fTemp33 + 8.500005f); - int iTemp35 = int(fTemp34); - float fTemp36 = floorf(fTemp34); - float fTemp37 = (fTemp33 + (9.0f - fTemp36)); - float fTemp38 = (fTemp33 + (8.0f - fTemp36)); - float fTemp39 = (fTemp33 + (7.0f - fTemp36)); - float fTemp40 = (fTemp33 + (6.0f - fTemp36)); - float fTemp41 = (fTemp37 * fTemp38); - float fTemp42 = (((((fRec1[(IOTA-int((int(min(512, max(0, iTemp35))) + 1)))&1023] * (0 - fTemp37)) * (0 - (0.5f * fTemp38))) * (0 - (0.33333334f * fTemp39))) * (0 - (0.25f * fTemp40))) + ((fTemp33 + (1e+01f - fTemp36)) * ((((((fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 1)))) + 1)))&1023] * (0 - fTemp38)) * (0 - (0.5f * fTemp39))) * (0 - (0.33333334f * fTemp40))) + (0.5f * (((fTemp37 * fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 2)))) + 1)))&1023]) * (0 - fTemp39)) * (0 - (0.5f * fTemp40))))) + (0.16666667f * ((fTemp41 * fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 3)))) + 1)))&1023]) * (0 - fTemp40)))) + (0.041666668f * ((fTemp41 * fTemp39) * fRec1[(IOTA-int((int(min(512, max(0, (iTemp35 + 4)))) + 1)))&1023]))))); - fVec6[IOTA&131071] = fTemp42; - float fTemp43 = ((float)input1[i] + (0.5f * (fTemp27 * ((fVec6[(IOTA-iTemp26)&131071] * fRec42[0]) + (fVec6[(IOTA-iTemp24)&131071] * fTemp25))))); - float fTemp44 = ((fRec28[1] * fTemp7) + (fTemp1 * fTemp43)); - float fTemp45 = ((fRec31[1] * fTemp7) + (fTemp1 * fTemp44)); - float fTemp46 = ((fRec34[1] * fTemp7) + (fTemp1 * fTemp45)); - float fTemp47 = ((fRec37[1] * fTemp7) + (fTemp1 * fTemp46)); - float fTemp48 = ((6.123234e-17f * fTemp32) - fTemp47); - fVec7[IOTA&16383] = fTemp48; - fRec45[0] = (fSlow8 + (0.9999f * ((iSlow7 * iTemp12) + fRec45[1]))); - float fTemp49 = (fRec45[0] + -1.49999f); - int iTemp50 = int(min(8192, max(0, int(fTemp49)))); - float fTemp51 = floorf(fTemp49); - float fTemp52 = (fTemp51 + (2.0f - fRec45[0])); - float fTemp53 = (fRec45[0] - fTemp51); - fRec38[0] = (fVec7[(IOTA-int((iTemp50 + 1)))&16383] + ((fRec38[1] * (0 - (fTemp52 / fTemp53))) + ((fTemp52 * fVec7[(IOTA-iTemp50)&16383]) / fTemp53))); - fRec36[0] = fRec38[0]; - float fTemp54 = (fTemp32 + (6.123234e-17f * fTemp47)); - fVec8[IOTA&16383] = fTemp54; - fRec47[0] = (fSlow10 + (0.9999f * ((iSlow9 * iTemp12) + fRec47[1]))); - float fTemp55 = (fRec47[0] + -1.49999f); - int iTemp56 = int(min(8192, max(0, int(fTemp55)))); - float fTemp57 = floorf(fTemp55); - float fTemp58 = (fTemp57 + (2.0f - fRec47[0])); - float fTemp59 = (fRec47[0] - fTemp57); - fRec46[0] = (fVec8[(IOTA-int((iTemp56 + 1)))&16383] + ((fRec46[1] * (0 - (fTemp58 / fTemp59))) + ((fTemp58 * fVec8[(IOTA-iTemp56)&16383]) / fTemp59))); - fRec37[0] = fRec46[0]; - float fTemp60 = ((fRec36[1] * fTemp1) + (fTemp31 * fTemp6)); - float fTemp61 = ((fTemp1 * fRec37[1]) + (fTemp46 * fTemp6)); - float fTemp62 = ((6.123234e-17f * fTemp60) - fTemp61); - fVec9[IOTA&16383] = fTemp62; - fRec48[0] = (fSlow13 + (0.999f * ((iSlow12 * iTemp12) + fRec48[1]))); - float fTemp63 = (fRec48[0] + -1.49999f); - int iTemp64 = int(min(8192, max(0, int(fTemp63)))); - float fTemp65 = floorf(fTemp63); - float fTemp66 = (fTemp65 + (2.0f - fRec48[0])); - float fTemp67 = (fRec48[0] - fTemp65); - fRec35[0] = (fVec9[(IOTA-int((iTemp64 + 1)))&16383] + ((fRec35[1] * (0 - (fTemp66 / fTemp67))) + ((fTemp66 * fVec9[(IOTA-iTemp64)&16383]) / fTemp67))); - fRec33[0] = fRec35[0]; - float fTemp68 = ((6.123234e-17f * fTemp61) + fTemp60); - fVec10[IOTA&16383] = fTemp68; - fRec50[0] = (fSlow15 + (0.999f * ((iSlow14 * iTemp12) + fRec50[1]))); - float fTemp69 = (fRec50[0] + -1.49999f); - int iTemp70 = int(min(8192, max(0, int(fTemp69)))); - float fTemp71 = floorf(fTemp69); - float fTemp72 = (fTemp71 + (2.0f - fRec50[0])); - float fTemp73 = (fRec50[0] - fTemp71); - fRec49[0] = ((((fVec10[(IOTA-iTemp70)&16383] * fTemp72) / fTemp73) + fVec10[(IOTA-int((iTemp70 + 1)))&16383]) + (fRec49[1] * (0 - (fTemp72 / fTemp73)))); - fRec34[0] = fRec49[0]; - float fTemp74 = ((fRec33[1] * fTemp1) + (fTemp30 * fTemp6)); - float fTemp75 = ((fTemp1 * fRec34[1]) + (fTemp45 * fTemp6)); - float fTemp76 = ((6.123234e-17f * fTemp74) - fTemp75); - fVec11[IOTA&16383] = fTemp76; - fRec51[0] = (fSlow18 + (0.999f * ((iSlow17 * iTemp12) + fRec51[1]))); - float fTemp77 = (fRec51[0] + -1.49999f); - int iTemp78 = int(min(8192, max(0, int(fTemp77)))); - float fTemp79 = floorf(fTemp77); - float fTemp80 = (fTemp79 + (2.0f - fRec51[0])); - float fTemp81 = (fRec51[0] - fTemp79); - fRec32[0] = (fVec11[(IOTA-int((iTemp78 + 1)))&16383] + ((fRec32[1] * (0 - (fTemp80 / fTemp81))) + ((fTemp80 * fVec11[(IOTA-iTemp78)&16383]) / fTemp81))); - fRec30[0] = fRec32[0]; - float fTemp82 = (fTemp74 + (6.123234e-17f * fTemp75)); - fVec12[IOTA&16383] = fTemp82; - fRec53[0] = (fSlow20 + (0.999f * ((iSlow19 * iTemp12) + fRec53[1]))); - float fTemp83 = (fRec53[0] + -1.49999f); - int iTemp84 = int(min(8192, max(0, int(fTemp83)))); - float fTemp85 = floorf(fTemp83); - float fTemp86 = (fTemp85 + (2.0f - fRec53[0])); - float fTemp87 = (fRec53[0] - fTemp85); - fRec52[0] = (fVec12[(IOTA-int((iTemp84 + 1)))&16383] + ((fRec52[1] * (0 - (fTemp86 / fTemp87))) + ((fTemp86 * fVec12[(IOTA-iTemp84)&16383]) / fTemp87))); - fRec31[0] = fRec52[0]; - float fTemp88 = ((fRec30[1] * fTemp1) + (fTemp29 * fTemp6)); - float fTemp89 = ((fTemp1 * fRec31[1]) + (fTemp44 * fTemp6)); - float fTemp90 = ((6.123234e-17f * fTemp88) - fTemp89); - fVec13[IOTA&16383] = fTemp90; - fRec54[0] = (fSlow22 + (0.999f * ((iSlow21 * iTemp12) + fRec54[1]))); - float fTemp91 = (fRec54[0] + -1.49999f); - int iTemp92 = int(min(8192, max(0, int(fTemp91)))); - float fTemp93 = floorf(fTemp91); - float fTemp94 = (fTemp93 + (2.0f - fRec54[0])); - float fTemp95 = (fRec54[0] - fTemp93); - fRec29[0] = (fVec13[(IOTA-int((iTemp92 + 1)))&16383] + ((fRec29[1] * (0 - (fTemp94 / fTemp95))) + ((fTemp94 * fVec13[(IOTA-iTemp92)&16383]) / fTemp95))); - fRec27[0] = fRec29[0]; - float fTemp96 = (fTemp88 + (6.123234e-17f * fTemp89)); - fVec14[IOTA&16383] = fTemp96; - fRec56[0] = (fSlow24 + (0.999f * ((iSlow23 * iTemp12) + fRec56[1]))); - float fTemp97 = (fRec56[0] + -1.49999f); - int iTemp98 = int(min(8192, max(0, int(fTemp97)))); - float fTemp99 = floorf(fTemp97); - float fTemp100 = (fTemp99 + (2.0f - fRec56[0])); - float fTemp101 = (fRec56[0] - fTemp99); - fRec55[0] = (fVec14[(IOTA-int((iTemp98 + 1)))&16383] + ((fRec55[1] * (0 - (fTemp100 / fTemp101))) + ((fTemp100 * fVec14[(IOTA-iTemp98)&16383]) / fTemp101))); - fRec28[0] = fRec55[0]; - float fTemp102 = ((fRec27[1] * fTemp1) + (fTemp28 * fTemp6)); - float fTemp103 = ((fTemp4 * fRec15[1]) + (fTemp102 * fTemp5)); - float fTemp104 = ((fTemp4 * fRec18[1]) + (fTemp5 * fTemp103)); - float fTemp105 = ((fTemp4 * fRec21[1]) + (fTemp5 * fTemp104)); - float fTemp106 = ((fRec24[1] * fTemp4) + (fTemp5 * fTemp105)); - float fTemp107 = ((fTemp1 * fRec28[1]) + (fTemp43 * fTemp6)); - float fTemp108 = ((fTemp4 * fRec16[1]) + (fTemp5 * fTemp107)); - float fTemp109 = ((fTemp4 * fRec19[1]) + (fTemp5 * fTemp108)); - float fTemp110 = ((fTemp4 * fRec22[1]) + (fTemp5 * fTemp109)); - float fTemp111 = ((fTemp4 * fRec25[1]) + (fTemp5 * fTemp110)); - float fTemp112 = ((6.123234e-17f * fTemp106) - fTemp111); - fVec15[IOTA&16383] = fTemp112; - fRec57[0] = (fSlow27 + (0.9999f * ((iSlow26 * iTemp12) + fRec57[1]))); - float fTemp113 = (fRec57[0] + -1.49999f); - int iTemp114 = int(min(8192, max(0, int(fTemp113)))); - float fTemp115 = floorf(fTemp113); - float fTemp116 = (fTemp115 + (2.0f - fRec57[0])); - float fTemp117 = (fRec57[0] - fTemp115); - fRec26[0] = (fVec15[(IOTA-int((iTemp114 + 1)))&16383] + ((fRec26[1] * (0 - (fTemp116 / fTemp117))) + ((fTemp116 * fVec15[(IOTA-iTemp114)&16383]) / fTemp117))); - fRec24[0] = fRec26[0]; - float fTemp118 = (fTemp106 + (6.123234e-17f * fTemp111)); - fVec16[IOTA&16383] = fTemp118; - fRec59[0] = (fSlow29 + (0.9999f * ((iSlow28 * iTemp12) + fRec59[1]))); - float fTemp119 = (fRec59[0] + -1.49999f); - int iTemp120 = int(min(8192, max(0, int(fTemp119)))); - float fTemp121 = floorf(fTemp119); - float fTemp122 = (fTemp121 + (2.0f - fRec59[0])); - float fTemp123 = (fRec59[0] - fTemp121); - fRec58[0] = (fVec16[(IOTA-int((iTemp120 + 1)))&16383] + ((fRec58[1] * (0 - (fTemp122 / fTemp123))) + ((fTemp122 * fVec16[(IOTA-iTemp120)&16383]) / fTemp123))); - fRec25[0] = fRec58[0]; - float fTemp124 = ((fRec24[1] * fTemp5) + (fTemp3 * fTemp105)); - float fTemp125 = ((fTemp5 * fRec25[1]) + (fTemp3 * fTemp110)); - float fTemp126 = ((6.123234e-17f * fTemp124) - fTemp125); - fVec17[IOTA&16383] = fTemp126; - fRec60[0] = (fSlow32 + (0.999f * ((iSlow31 * iTemp12) + fRec60[1]))); - float fTemp127 = (fRec60[0] + -1.49999f); - int iTemp128 = int(min(8192, max(0, int(fTemp127)))); - float fTemp129 = floorf(fTemp127); - float fTemp130 = (fTemp129 + (2.0f - fRec60[0])); - float fTemp131 = (fRec60[0] - fTemp129); - fRec23[0] = (fVec17[(IOTA-int((iTemp128 + 1)))&16383] + (((0 - (fTemp130 / fTemp131)) * fRec23[1]) + ((fVec17[(IOTA-iTemp128)&16383] * fTemp130) / fTemp131))); - fRec21[0] = fRec23[0]; - float fTemp132 = (fTemp124 + (6.123234e-17f * fTemp125)); - fVec18[IOTA&16383] = fTemp132; - fRec62[0] = (fSlow34 + (0.999f * ((iSlow33 * iTemp12) + fRec62[1]))); - float fTemp133 = (fRec62[0] + -1.49999f); - int iTemp134 = int(min(8192, max(0, int(fTemp133)))); - float fTemp135 = floorf(fTemp133); - float fTemp136 = (fTemp135 + (2.0f - fRec62[0])); - float fTemp137 = (fRec62[0] - fTemp135); - fRec61[0] = (fVec18[(IOTA-int((iTemp134 + 1)))&16383] + ((fRec61[1] * (0 - (fTemp136 / fTemp137))) + ((fTemp136 * fVec18[(IOTA-iTemp134)&16383]) / fTemp137))); - fRec22[0] = fRec61[0]; - float fTemp138 = ((fRec21[1] * fTemp5) + (fTemp3 * fTemp104)); - float fTemp139 = ((fTemp5 * fRec22[1]) + (fTemp3 * fTemp109)); - float fTemp140 = ((6.123234e-17f * fTemp138) - fTemp139); - fVec19[IOTA&16383] = fTemp140; - fRec63[0] = (fSlow37 + (0.999f * ((iSlow36 * iTemp12) + fRec63[1]))); - float fTemp141 = (fRec63[0] + -1.49999f); - int iTemp142 = int(min(8192, max(0, int(fTemp141)))); - float fTemp143 = floorf(fTemp141); - float fTemp144 = (fTemp143 + (2.0f - fRec63[0])); - float fTemp145 = (fRec63[0] - fTemp143); - fRec20[0] = ((((fVec19[(IOTA-iTemp142)&16383] * fTemp144) / fTemp145) + fVec19[(IOTA-int((iTemp142 + 1)))&16383]) + (fRec20[1] * (0 - (fTemp144 / fTemp145)))); - fRec18[0] = fRec20[0]; - float fTemp146 = (fTemp138 + (6.123234e-17f * fTemp139)); - fVec20[IOTA&16383] = fTemp146; - fRec65[0] = (fSlow39 + (0.999f * ((iSlow38 * iTemp12) + fRec65[1]))); - float fTemp147 = (fRec65[0] + -1.49999f); - int iTemp148 = int(min(8192, max(0, int(fTemp147)))); - float fTemp149 = floorf(fTemp147); - float fTemp150 = (fTemp149 + (2.0f - fRec65[0])); - float fTemp151 = (fRec65[0] - fTemp149); - fRec64[0] = (fVec20[(IOTA-int((iTemp148 + 1)))&16383] + ((fRec64[1] * (0 - (fTemp150 / fTemp151))) + ((fTemp150 * fVec20[(IOTA-iTemp148)&16383]) / fTemp151))); - fRec19[0] = fRec64[0]; - float fTemp152 = ((fRec18[1] * fTemp5) + (fTemp3 * fTemp103)); - float fTemp153 = ((fTemp5 * fRec19[1]) + (fTemp3 * fTemp108)); - float fTemp154 = ((6.123234e-17f * fTemp152) - fTemp153); - fVec21[IOTA&16383] = fTemp154; - fRec66[0] = (fSlow42 + (0.999f * ((iSlow41 * iTemp12) + fRec66[1]))); - float fTemp155 = (fRec66[0] + -1.49999f); - int iTemp156 = int(min(8192, max(0, int(fTemp155)))); - float fTemp157 = floorf(fTemp155); - float fTemp158 = (fTemp157 + (2.0f - fRec66[0])); - float fTemp159 = (fRec66[0] - fTemp157); - fRec17[0] = ((((fVec21[(IOTA-iTemp156)&16383] * fTemp158) / fTemp159) + fVec21[(IOTA-int((iTemp156 + 1)))&16383]) + (fRec17[1] * (0 - (fTemp158 / fTemp159)))); - fRec15[0] = fRec17[0]; - float fTemp160 = (fTemp152 + (6.123234e-17f * fTemp153)); - fVec22[IOTA&16383] = fTemp160; - fRec68[0] = (fSlow44 + (0.999f * ((iSlow43 * iTemp12) + fRec68[1]))); - float fTemp161 = (fRec68[0] + -1.49999f); - int iTemp162 = int(min(8192, max(0, int(fTemp161)))); - float fTemp163 = floorf(fTemp161); - float fTemp164 = (fTemp163 + (2.0f - fRec68[0])); - float fTemp165 = (fRec68[0] - fTemp163); - fRec67[0] = (fVec22[(IOTA-int((iTemp162 + 1)))&16383] + ((fRec67[1] * (0 - (fTemp164 / fTemp165))) + ((fTemp164 * fVec22[(IOTA-iTemp162)&16383]) / fTemp165))); - fRec16[0] = fRec67[0]; - float fTemp166 = ((fRec15[1] * fTemp5) + (fTemp3 * fTemp102)); - float fTemp167 = ((fTemp1 * fTemp166) + (fTemp7 * fRec3[1])); - float fTemp168 = ((fTemp1 * fTemp167) + (fTemp7 * fRec6[1])); - float fTemp169 = ((fTemp1 * fTemp168) + (fTemp7 * fRec9[1])); - float fTemp170 = (fTemp1 * fTemp169); - float fTemp171 = (fRec12[1] * fTemp7); - float fTemp172 = ((fTemp5 * fRec16[1]) + (fTemp3 * fTemp107)); - float fTemp173 = ((fRec4[1] * fTemp7) + (fTemp1 * fTemp172)); - float fTemp174 = ((fRec7[1] * fTemp7) + (fTemp1 * fTemp173)); - float fTemp175 = ((fRec10[1] * fTemp7) + (fTemp1 * fTemp174)); - float fTemp176 = ((fRec13[1] * fTemp7) + (fTemp1 * fTemp175)); - float fTemp177 = ((6.123234e-17f * (fTemp170 + fTemp171)) - fTemp176); - fVec23[IOTA&16383] = fTemp177; - fRec69[0] = (fSlow47 + (0.9999f * ((iSlow46 * iTemp12) + fRec69[1]))); - float fTemp178 = (fRec69[0] + -1.49999f); - int iTemp179 = int(min(8192, max(0, int(fTemp178)))); - float fTemp180 = floorf(fTemp178); - float fTemp181 = (fTemp180 + (2.0f - fRec69[0])); - float fTemp182 = (fRec69[0] - fTemp180); - fRec14[0] = ((((fVec23[(IOTA-iTemp179)&16383] * fTemp181) / fTemp182) + fVec23[(IOTA-int((iTemp179 + 1)))&16383]) + (fRec14[1] * (0 - (fTemp181 / fTemp182)))); - fRec12[0] = fRec14[0]; - float fTemp183 = ((fTemp170 + (6.123234e-17f * fTemp176)) + fTemp171); - fVec24[IOTA&16383] = fTemp183; - fRec71[0] = (fSlow49 + (0.9999f * ((iSlow48 * iTemp12) + fRec71[1]))); - float fTemp184 = (fRec71[0] + -1.49999f); - int iTemp185 = int(min(8192, max(0, int(fTemp184)))); - float fTemp186 = floorf(fTemp184); - float fTemp187 = (fTemp186 + (2.0f - fRec71[0])); - float fTemp188 = (fRec71[0] - fTemp186); - fRec70[0] = (fVec24[(IOTA-int((iTemp185 + 1)))&16383] + ((fRec70[1] * (0 - (fTemp187 / fTemp188))) + ((fTemp187 * fVec24[(IOTA-iTemp185)&16383]) / fTemp188))); - fRec13[0] = fRec70[0]; - float fTemp189 = ((fTemp1 * fRec12[1]) + (fTemp169 * fTemp6)); - float fTemp190 = ((fTemp1 * fRec13[1]) + (fTemp175 * fTemp6)); - float fTemp191 = ((6.123234e-17f * fTemp189) - fTemp190); - fVec25[IOTA&16383] = fTemp191; - fRec72[0] = (fSlow52 + (0.999f * ((iSlow51 * iTemp12) + fRec72[1]))); - float fTemp192 = (fRec72[0] + -1.49999f); - int iTemp193 = int(min(8192, max(0, int(fTemp192)))); - float fTemp194 = floorf(fTemp192); - float fTemp195 = (fTemp194 + (2.0f - fRec72[0])); - float fTemp196 = (fRec72[0] - fTemp194); - fRec11[0] = ((((fVec25[(IOTA-iTemp193)&16383] * fTemp195) / fTemp196) + fVec25[(IOTA-int((iTemp193 + 1)))&16383]) + (fRec11[1] * (0 - (fTemp195 / fTemp196)))); - fRec9[0] = fRec11[0]; - float fTemp197 = (fTemp189 + (6.123234e-17f * fTemp190)); - fVec26[IOTA&16383] = fTemp197; - fRec74[0] = (fSlow54 + (0.999f * ((iSlow53 * iTemp12) + fRec74[1]))); - float fTemp198 = (fRec74[0] + -1.49999f); - int iTemp199 = int(min(8192, max(0, int(fTemp198)))); - float fTemp200 = floorf(fTemp198); - float fTemp201 = (fTemp200 + (2.0f - fRec74[0])); - float fTemp202 = (fRec74[0] - fTemp200); - fRec73[0] = (fVec26[(IOTA-int((iTemp199 + 1)))&16383] + ((fRec73[1] * (0 - (fTemp201 / fTemp202))) + ((fTemp201 * fVec26[(IOTA-iTemp199)&16383]) / fTemp202))); - fRec10[0] = fRec73[0]; - float fTemp203 = ((fTemp1 * fRec9[1]) + (fTemp168 * fTemp6)); - float fTemp204 = ((fTemp1 * fRec10[1]) + (fTemp174 * fTemp6)); - float fTemp205 = ((6.123234e-17f * fTemp203) - fTemp204); - fVec27[IOTA&16383] = fTemp205; - fRec75[0] = (fSlow57 + (0.999f * ((iSlow56 * iTemp12) + fRec75[1]))); - float fTemp206 = (fRec75[0] + -1.49999f); - int iTemp207 = int(min(8192, max(0, int(fTemp206)))); - float fTemp208 = floorf(fTemp206); - float fTemp209 = (fTemp208 + (2.0f - fRec75[0])); - float fTemp210 = (fRec75[0] - fTemp208); - fRec8[0] = ((((fVec27[(IOTA-iTemp207)&16383] * fTemp209) / fTemp210) + fVec27[(IOTA-int((iTemp207 + 1)))&16383]) + (fRec8[1] * (0 - (fTemp209 / fTemp210)))); - fRec6[0] = fRec8[0]; - float fTemp211 = (fTemp203 + (6.123234e-17f * fTemp204)); - fVec28[IOTA&16383] = fTemp211; - fRec77[0] = (fSlow59 + (0.999f * ((iSlow58 * iTemp12) + fRec77[1]))); - float fTemp212 = (fRec77[0] + -1.49999f); - int iTemp213 = int(min(8192, max(0, int(fTemp212)))); - float fTemp214 = floorf(fTemp212); - float fTemp215 = (fTemp214 + (2.0f - fRec77[0])); - float fTemp216 = (fRec77[0] - fTemp214); - fRec76[0] = (fVec28[(IOTA-int((iTemp213 + 1)))&16383] + ((fRec76[1] * (0 - (fTemp215 / fTemp216))) + ((fTemp215 * fVec28[(IOTA-iTemp213)&16383]) / fTemp216))); - fRec7[0] = fRec76[0]; - float fTemp217 = ((fTemp1 * fRec6[1]) + (fTemp167 * fTemp6)); - float fTemp218 = ((fTemp1 * fRec7[1]) + (fTemp173 * fTemp6)); - float fTemp219 = ((6.123234e-17f * fTemp217) - fTemp218); - fVec29[IOTA&16383] = fTemp219; - fRec78[0] = (fSlow62 + (0.999f * ((iSlow61 * iTemp12) + fRec78[1]))); - float fTemp220 = (fRec78[0] + -1.49999f); - int iTemp221 = int(min(8192, max(0, int(fTemp220)))); - float fTemp222 = floorf(fTemp220); - float fTemp223 = (fTemp222 + (2.0f - fRec78[0])); - float fTemp224 = (fRec78[0] - fTemp222); - fRec5[0] = ((((fVec29[(IOTA-iTemp221)&16383] * fTemp223) / fTemp224) + fVec29[(IOTA-int((iTemp221 + 1)))&16383]) + (fRec5[1] * (0 - (fTemp223 / fTemp224)))); - fRec3[0] = fRec5[0]; - float fTemp225 = (fTemp217 + (6.123234e-17f * fTemp218)); - fVec30[IOTA&16383] = fTemp225; - fRec80[0] = (fSlow64 + (0.999f * ((iSlow63 * iTemp12) + fRec80[1]))); - float fTemp226 = (fRec80[0] + -1.49999f); - int iTemp227 = int(min(8192, max(0, int(fTemp226)))); - float fTemp228 = floorf(fTemp226); - float fTemp229 = (fTemp228 + (2.0f - fRec80[0])); - float fTemp230 = (fRec80[0] - fTemp228); - fRec79[0] = (fVec30[(IOTA-int((iTemp227 + 1)))&16383] + ((fRec79[1] * (0 - (fTemp229 / fTemp230))) + ((fTemp229 * fVec30[(IOTA-iTemp227)&16383]) / fTemp230))); - fRec4[0] = fRec79[0]; - fVec31[0] = fSlow65; - float fTemp231 = (fSlow65 + fVec31[1]); - float fTemp232 = (1.0f - (0.5f * fTemp231)); - fRec2[0] = ((((fTemp1 * fRec3[1]) + (fTemp166 * fTemp6)) * fTemp232) + (0.5f * (fTemp231 * fRec2[1]))); - fRec0[IOTA&1023] = fRec2[0]; - fRec81[0] = ((0.5f * (fTemp231 * fRec81[1])) + (fTemp232 * ((fTemp172 * fTemp6) + (fTemp1 * fRec4[1])))); - fRec1[IOTA&1023] = fRec81[0]; - output0[i] = (FAUSTFLOAT)fRec0[(IOTA-0)&1023]; - output1[i] = (FAUSTFLOAT)fRec1[(IOTA-0)&1023]; - // post processing - fRec81[1] = fRec81[0]; - fRec2[1] = fRec2[0]; - fVec31[1] = fVec31[0]; - fRec4[1] = fRec4[0]; - fRec79[1] = fRec79[0]; - fRec80[1] = fRec80[0]; - fRec3[1] = fRec3[0]; - fRec5[1] = fRec5[0]; - fRec78[1] = fRec78[0]; - fRec7[1] = fRec7[0]; - fRec76[1] = fRec76[0]; - fRec77[1] = fRec77[0]; - fRec6[1] = fRec6[0]; - fRec8[1] = fRec8[0]; - fRec75[1] = fRec75[0]; - fRec10[1] = fRec10[0]; - fRec73[1] = fRec73[0]; - fRec74[1] = fRec74[0]; - fRec9[1] = fRec9[0]; - fRec11[1] = fRec11[0]; - fRec72[1] = fRec72[0]; - fRec13[1] = fRec13[0]; - fRec70[1] = fRec70[0]; - fRec71[1] = fRec71[0]; - fRec12[1] = fRec12[0]; - fRec14[1] = fRec14[0]; - fRec69[1] = fRec69[0]; - fRec16[1] = fRec16[0]; - fRec67[1] = fRec67[0]; - fRec68[1] = fRec68[0]; - fRec15[1] = fRec15[0]; - fRec17[1] = fRec17[0]; - fRec66[1] = fRec66[0]; - fRec19[1] = fRec19[0]; - fRec64[1] = fRec64[0]; - fRec65[1] = fRec65[0]; - fRec18[1] = fRec18[0]; - fRec20[1] = fRec20[0]; - fRec63[1] = fRec63[0]; - fRec22[1] = fRec22[0]; - fRec61[1] = fRec61[0]; - fRec62[1] = fRec62[0]; - fRec21[1] = fRec21[0]; - fRec23[1] = fRec23[0]; - fRec60[1] = fRec60[0]; - fRec25[1] = fRec25[0]; - fRec58[1] = fRec58[0]; - fRec59[1] = fRec59[0]; - fRec24[1] = fRec24[0]; - fRec26[1] = fRec26[0]; - fRec57[1] = fRec57[0]; - fRec28[1] = fRec28[0]; - fRec55[1] = fRec55[0]; - fRec56[1] = fRec56[0]; - fRec27[1] = fRec27[0]; - fRec29[1] = fRec29[0]; - fRec54[1] = fRec54[0]; - fRec31[1] = fRec31[0]; - fRec52[1] = fRec52[0]; - fRec53[1] = fRec53[0]; - fRec30[1] = fRec30[0]; - fRec32[1] = fRec32[0]; - fRec51[1] = fRec51[0]; - fRec34[1] = fRec34[0]; - fRec49[1] = fRec49[0]; - fRec50[1] = fRec50[0]; - fRec33[1] = fRec33[0]; - fRec35[1] = fRec35[0]; - fRec48[1] = fRec48[0]; - fRec37[1] = fRec37[0]; - fRec46[1] = fRec46[0]; - fRec47[1] = fRec47[0]; - fRec36[1] = fRec36[0]; - fRec38[1] = fRec38[0]; - fRec45[1] = fRec45[0]; - fVec5[1] = fVec5[0]; - fRec44[1] = fRec44[0]; - fRec43[1] = fRec43[0]; - fRec42[1] = fRec42[0]; - fRec41[1] = fRec41[0]; - IOTA = IOTA+1; - fRec40[1] = fRec40[0]; - fRec39[1] = fRec39[0]; - fVec3[1] = fVec3[0]; - fVec2[1] = fVec2[0]; - iVec1[1] = iVec1[0]; - fVec0[1] = fVec0[0]; + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0_ptr = inputs[0]; + FAUSTFLOAT* input1_ptr = inputs[1]; + FAUSTFLOAT* output0_ptr = outputs[0]; + FAUSTFLOAT* output1_ptr = outputs[1]; + float fSlow0 = std::floor(std::min(65533.0f, (fConst0 * float(fHslider0)))); + float fZec0[8]; + float fRec39_tmp[12]; + float* fRec39 = &fRec39_tmp[4]; + float fRec40_tmp[12]; + float* fRec40 = &fRec40_tmp[4]; + float fRec41_tmp[12]; + float* fRec41 = &fRec41_tmp[4]; + float fRec42_tmp[12]; + float* fRec42 = &fRec42_tmp[4]; + float fSlow1 = float(fHslider1); + float fVec0_tmp[12]; + float* fVec0 = &fVec0_tmp[4]; + float fZec1[8]; + float fZec2[8]; + float fZec3[8]; + float fRec43_tmp[12]; + float* fRec43 = &fRec43_tmp[4]; + int iVec1_tmp[12]; + int* iVec1 = &iVec1_tmp[4]; + int iZec4[8]; + float fRec44_tmp[12]; + float* fRec44 = &fRec44_tmp[4]; + float fSlow2 = float(fHslider2); + float fSlow3 = (49.0f * fSlow2); + int iSlow4 = int(primes(int(fSlow3))); + float fSlow5 = (9.99999975e-05f * float(iSlow4)); + float fRec45_tmp[12]; + float* fRec45 = &fRec45_tmp[4]; + float fSlow6 = float(fHslider3); + float fVec2_tmp[12]; + float* fVec2 = &fVec2_tmp[4]; + float fZec5[8]; + float fZec6[8]; + float fSlow7 = float(fHslider4); + float fVec3_tmp[12]; + float* fVec3 = &fVec3_tmp[4]; + float fZec7[8]; + float fZec8[8]; + float fSlow8 = float(fHslider5); + float fVec4_tmp[12]; + float* fVec4 = &fVec4_tmp[4]; + float fZec9[8]; + float fZec10[8]; + float fZec11[8]; + int iZec12[8]; + float fZec13[8]; + float fZec14[8]; + float fZec15[8]; + float fZec16[8]; + float fZec17[8]; + float fZec18[8]; + int iZec19[8]; + int iZec20[8]; + float fZec21[8]; + float fZec22[8]; + float fZec23[8]; + float fZec24[8]; + float fZec25[8]; + float fZec26[8]; + float fYec2_tmp[12]; + float* fYec2 = &fYec2_tmp[4]; + float fZec27[8]; + float fRec38_tmp[12]; + float* fRec38 = &fRec38_tmp[4]; + float fRec36_tmp[12]; + float* fRec36 = &fRec36_tmp[4]; + int iSlow9 = int(primes(int((fSlow3 + 10.0f)))); + float fSlow10 = (9.99999975e-05f * float(iSlow9)); + float fRec47_tmp[12]; + float* fRec47 = &fRec47_tmp[4]; + float fZec28[8]; + float fZec29[8]; + int iZec30[8]; + float fZec31[8]; + float fZec32[8]; + float fZec33[8]; + float fZec34[8]; + float fZec35[8]; + float fZec36[8]; + float fZec37[8]; + float fZec38[8]; + float fZec39[8]; + float fZec40[8]; + float fZec41[8]; + float fYec5_tmp[12]; + float* fYec5 = &fYec5_tmp[4]; + float fZec42[8]; + float fRec46_tmp[12]; + float* fRec46 = &fRec46_tmp[4]; + float fRec37_tmp[12]; + float* fRec37 = &fRec37_tmp[4]; + float fSlow11 = (36.0f * fSlow2); + int iSlow12 = int(primes(int(fSlow11))); + float fSlow13 = (0.00100000005f * float(iSlow12)); + float fRec48_tmp[12]; + float* fRec48 = &fRec48_tmp[4]; + float fZec43[8]; + float fYec7_tmp[12]; + float* fYec7 = &fYec7_tmp[4]; + float fZec44[8]; + float fRec35_tmp[12]; + float* fRec35 = &fRec35_tmp[4]; + float fRec33_tmp[12]; + float* fRec33 = &fRec33_tmp[4]; + int iSlow14 = int(primes(int((fSlow11 + 10.0f)))); + float fSlow15 = (0.00100000005f * float(iSlow14)); + float fRec50_tmp[12]; + float* fRec50 = &fRec50_tmp[4]; + float fZec45[8]; + float fYec9_tmp[12]; + float* fYec9 = &fYec9_tmp[4]; + float fZec46[8]; + float fRec49_tmp[12]; + float* fRec49 = &fRec49_tmp[4]; + float fRec34_tmp[12]; + float* fRec34 = &fRec34_tmp[4]; + float fSlow16 = (23.0f * fSlow2); + int iSlow17 = int(primes(int(fSlow16))); + float fSlow18 = (0.00100000005f * float(iSlow17)); + float fRec51_tmp[12]; + float* fRec51 = &fRec51_tmp[4]; + float fZec47[8]; + float fYec11_tmp[12]; + float* fYec11 = &fYec11_tmp[4]; + float fZec48[8]; + float fRec32_tmp[12]; + float* fRec32 = &fRec32_tmp[4]; + float fRec30_tmp[12]; + float* fRec30 = &fRec30_tmp[4]; + int iSlow19 = int(primes(int((fSlow16 + 10.0f)))); + float fSlow20 = (0.00100000005f * float(iSlow19)); + float fRec53_tmp[12]; + float* fRec53 = &fRec53_tmp[4]; + float fZec49[8]; + float fYec13_tmp[12]; + float* fYec13 = &fYec13_tmp[4]; + float fZec50[8]; + float fRec52_tmp[12]; + float* fRec52 = &fRec52_tmp[4]; + float fRec31_tmp[12]; + float* fRec31 = &fRec31_tmp[4]; + int iSlow21 = int(primes(int((10.0f * fSlow2)))); + float fSlow22 = (0.00100000005f * float(iSlow21)); + float fRec54_tmp[12]; + float* fRec54 = &fRec54_tmp[4]; + float fZec51[8]; + float fYec15_tmp[12]; + float* fYec15 = &fYec15_tmp[4]; + float fZec52[8]; + float fRec29_tmp[12]; + float* fRec29 = &fRec29_tmp[4]; + float fRec27_tmp[12]; + float* fRec27 = &fRec27_tmp[4]; + int iSlow23 = int(primes(int((10.0f * (fSlow2 + 1.0f))))); + float fSlow24 = (0.00100000005f * float(iSlow23)); + float fRec56_tmp[12]; + float* fRec56 = &fRec56_tmp[4]; + float fZec53[8]; + float fYec17_tmp[12]; + float* fYec17 = &fYec17_tmp[4]; + float fZec54[8]; + float fRec55_tmp[12]; + float* fRec55 = &fRec55_tmp[4]; + float fRec28_tmp[12]; + float* fRec28 = &fRec28_tmp[4]; + float fSlow25 = (68.0f * fSlow2); + int iSlow26 = int(primes(int(fSlow25))); + float fSlow27 = (9.99999975e-05f * float(iSlow26)); + float fRec57_tmp[12]; + float* fRec57 = &fRec57_tmp[4]; + float fZec55[8]; + float fZec56[8]; + float fZec57[8]; + float fZec58[8]; + float fZec59[8]; + float fZec60[8]; + float fZec61[8]; + float fZec62[8]; + float fYec19_tmp[12]; + float* fYec19 = &fYec19_tmp[4]; + float fZec63[8]; + float fRec26_tmp[12]; + float* fRec26 = &fRec26_tmp[4]; + float fRec24_tmp[12]; + float* fRec24 = &fRec24_tmp[4]; + int iSlow28 = int(primes(int((fSlow25 + 10.0f)))); + float fSlow29 = (9.99999975e-05f * float(iSlow28)); + float fRec59_tmp[12]; + float* fRec59 = &fRec59_tmp[4]; + float fZec64[8]; + float fZec65[8]; + float fZec66[8]; + float fZec67[8]; + float fZec68[8]; + float fYec21_tmp[12]; + float* fYec21 = &fYec21_tmp[4]; + float fZec69[8]; + float fRec58_tmp[12]; + float* fRec58 = &fRec58_tmp[4]; + float fRec25_tmp[12]; + float* fRec25 = &fRec25_tmp[4]; + float fSlow30 = (55.0f * fSlow2); + int iSlow31 = int(primes(int(fSlow30))); + float fSlow32 = (0.00100000005f * float(iSlow31)); + float fRec60_tmp[12]; + float* fRec60 = &fRec60_tmp[4]; + float fZec70[8]; + float fYec23_tmp[12]; + float* fYec23 = &fYec23_tmp[4]; + float fZec71[8]; + float fRec23_tmp[12]; + float* fRec23 = &fRec23_tmp[4]; + float fRec21_tmp[12]; + float* fRec21 = &fRec21_tmp[4]; + int iSlow33 = int(primes(int((fSlow30 + 10.0f)))); + float fSlow34 = (0.00100000005f * float(iSlow33)); + float fRec62_tmp[12]; + float* fRec62 = &fRec62_tmp[4]; + float fZec72[8]; + float fYec25_tmp[12]; + float* fYec25 = &fYec25_tmp[4]; + float fZec73[8]; + float fRec61_tmp[12]; + float* fRec61 = &fRec61_tmp[4]; + float fRec22_tmp[12]; + float* fRec22 = &fRec22_tmp[4]; + float fSlow35 = (42.0f * fSlow2); + int iSlow36 = int(primes(int(fSlow35))); + float fSlow37 = (0.00100000005f * float(iSlow36)); + float fRec63_tmp[12]; + float* fRec63 = &fRec63_tmp[4]; + float fZec74[8]; + float fYec27_tmp[12]; + float* fYec27 = &fYec27_tmp[4]; + float fZec75[8]; + float fRec20_tmp[12]; + float* fRec20 = &fRec20_tmp[4]; + float fRec18_tmp[12]; + float* fRec18 = &fRec18_tmp[4]; + int iSlow38 = int(primes(int((fSlow35 + 10.0f)))); + float fSlow39 = (0.00100000005f * float(iSlow38)); + float fRec65_tmp[12]; + float* fRec65 = &fRec65_tmp[4]; + float fZec76[8]; + float fYec29_tmp[12]; + float* fYec29 = &fYec29_tmp[4]; + float fZec77[8]; + float fRec64_tmp[12]; + float* fRec64 = &fRec64_tmp[4]; + float fRec19_tmp[12]; + float* fRec19 = &fRec19_tmp[4]; + float fSlow40 = (29.0f * fSlow2); + int iSlow41 = int(primes(int(fSlow40))); + float fSlow42 = (0.00100000005f * float(iSlow41)); + float fRec66_tmp[12]; + float* fRec66 = &fRec66_tmp[4]; + float fZec78[8]; + float fYec31_tmp[12]; + float* fYec31 = &fYec31_tmp[4]; + float fZec79[8]; + float fRec17_tmp[12]; + float* fRec17 = &fRec17_tmp[4]; + float fRec15_tmp[12]; + float* fRec15 = &fRec15_tmp[4]; + int iSlow43 = int(primes(int((fSlow40 + 10.0f)))); + float fSlow44 = (0.00100000005f * float(iSlow43)); + float fRec68_tmp[12]; + float* fRec68 = &fRec68_tmp[4]; + float fZec80[8]; + float fYec33_tmp[12]; + float* fYec33 = &fYec33_tmp[4]; + float fZec81[8]; + float fRec67_tmp[12]; + float* fRec67 = &fRec67_tmp[4]; + float fRec16_tmp[12]; + float* fRec16 = &fRec16_tmp[4]; + float fSlow45 = (87.0f * fSlow2); + int iSlow46 = int(primes(int(fSlow45))); + float fSlow47 = (9.99999975e-05f * float(iSlow46)); + float fRec69_tmp[12]; + float* fRec69 = &fRec69_tmp[4]; + float fZec82[8]; + float fZec83[8]; + float fZec84[8]; + float fZec85[8]; + float fZec86[8]; + float fYec35_tmp[12]; + float* fYec35 = &fYec35_tmp[4]; + float fZec87[8]; + float fRec14_tmp[12]; + float* fRec14 = &fRec14_tmp[4]; + float fRec12_tmp[12]; + float* fRec12 = &fRec12_tmp[4]; + int iSlow48 = int(primes(int((fSlow45 + 10.0f)))); + float fSlow49 = (9.99999975e-05f * float(iSlow48)); + float fRec71_tmp[12]; + float* fRec71 = &fRec71_tmp[4]; + float fZec88[8]; + float fZec89[8]; + float fZec90[8]; + float fZec91[8]; + float fZec92[8]; + float fYec37_tmp[12]; + float* fYec37 = &fYec37_tmp[4]; + float fZec93[8]; + float fRec70_tmp[12]; + float* fRec70 = &fRec70_tmp[4]; + float fRec13_tmp[12]; + float* fRec13 = &fRec13_tmp[4]; + float fSlow50 = (74.0f * fSlow2); + int iSlow51 = int(primes(int(fSlow50))); + float fSlow52 = (0.00100000005f * float(iSlow51)); + float fRec72_tmp[12]; + float* fRec72 = &fRec72_tmp[4]; + float fZec94[8]; + float fYec39_tmp[12]; + float* fYec39 = &fYec39_tmp[4]; + float fZec95[8]; + float fRec11_tmp[12]; + float* fRec11 = &fRec11_tmp[4]; + float fRec9_tmp[12]; + float* fRec9 = &fRec9_tmp[4]; + int iSlow53 = int(primes(int((fSlow50 + 10.0f)))); + float fSlow54 = (0.00100000005f * float(iSlow53)); + float fRec74_tmp[12]; + float* fRec74 = &fRec74_tmp[4]; + float fZec96[8]; + float fYec41_tmp[12]; + float* fYec41 = &fYec41_tmp[4]; + float fZec97[8]; + float fRec73_tmp[12]; + float* fRec73 = &fRec73_tmp[4]; + float fRec10_tmp[12]; + float* fRec10 = &fRec10_tmp[4]; + float fSlow55 = (61.0f * fSlow2); + int iSlow56 = int(primes(int(fSlow55))); + float fSlow57 = (0.00100000005f * float(iSlow56)); + float fRec75_tmp[12]; + float* fRec75 = &fRec75_tmp[4]; + float fZec98[8]; + float fYec43_tmp[12]; + float* fYec43 = &fYec43_tmp[4]; + float fZec99[8]; + float fRec8_tmp[12]; + float* fRec8 = &fRec8_tmp[4]; + float fRec6_tmp[12]; + float* fRec6 = &fRec6_tmp[4]; + int iSlow58 = int(primes(int((fSlow55 + 10.0f)))); + float fSlow59 = (0.00100000005f * float(iSlow58)); + float fRec77_tmp[12]; + float* fRec77 = &fRec77_tmp[4]; + float fZec100[8]; + float fYec45_tmp[12]; + float* fYec45 = &fYec45_tmp[4]; + float fZec101[8]; + float fRec76_tmp[12]; + float* fRec76 = &fRec76_tmp[4]; + float fRec7_tmp[12]; + float* fRec7 = &fRec7_tmp[4]; + float fSlow60 = (48.0f * fSlow2); + int iSlow61 = int(primes(int(fSlow60))); + float fSlow62 = (0.00100000005f * float(iSlow61)); + float fRec78_tmp[12]; + float* fRec78 = &fRec78_tmp[4]; + float fZec102[8]; + float fYec47_tmp[12]; + float* fYec47 = &fYec47_tmp[4]; + float fZec103[8]; + float fRec5_tmp[12]; + float* fRec5 = &fRec5_tmp[4]; + float fRec3_tmp[12]; + float* fRec3 = &fRec3_tmp[4]; + int iSlow63 = int(primes(int((fSlow60 + 10.0f)))); + float fSlow64 = (0.00100000005f * float(iSlow63)); + float fRec80_tmp[12]; + float* fRec80 = &fRec80_tmp[4]; + float fZec104[8]; + float fYec49_tmp[12]; + float* fYec49 = &fYec49_tmp[4]; + float fZec105[8]; + float fRec79_tmp[12]; + float* fRec79 = &fRec79_tmp[4]; + float fRec4_tmp[12]; + float* fRec4 = &fRec4_tmp[4]; + float fSlow65 = float(fHslider6); + float fVec5_tmp[12]; + float* fVec5 = &fVec5_tmp[4]; + float fZec106[8]; + float fZec107[8]; + float fRec2_tmp[12]; + float* fRec2 = &fRec2_tmp[4]; + float fRec81_tmp[12]; + float* fRec81 = &fRec81_tmp[4]; + int vindex = 0; + /* Main loop */ + for (vindex = 0; (vindex <= (count - 8)); vindex = (vindex + 8)) { + FAUSTFLOAT* input0 = &input0_ptr[vindex]; + FAUSTFLOAT* input1 = &input1_ptr[vindex]; + FAUSTFLOAT* output0 = &output0_ptr[vindex]; + FAUSTFLOAT* output1 = &output1_ptr[vindex]; + int vsize = 8; + /* Vectorizable loop 0 */ + /* Pre code */ + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fVec0_tmp[j8] = fVec0_perm[j8]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec0[i] = fSlow1; + + } + /* Post code */ + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fVec0_perm[j9] = fVec0_tmp[(vsize + j9)]; + + } + /* Vectorizable loop 1 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = (fConst1 * (fSlow1 + fVec0[(i - 1)])); + + } + /* Vectorizable loop 2 */ + /* Pre code */ + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + iVec1_tmp[j12] = iVec1_perm[j12]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iVec1[i] = 1; + + } + /* Post code */ + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + iVec1_perm[j13] = iVec1_tmp[(vsize + j13)]; + + } + /* Vectorizable loop 3 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec2[i] = std::sin(fZec1[i]); + + } + /* Vectorizable loop 4 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec3[i] = std::cos(fZec1[i]); + + } + /* Vectorizable loop 5 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec4[i] = (1 - iVec1[(i - 1)]); + + } + /* Vectorizable loop 6 */ + /* Pre code */ + for (int j22 = 0; (j22 < 4); j22 = (j22 + 1)) { + fVec4_tmp[j22] = fVec4_perm[j22]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec4[i] = fSlow8; + + } + /* Post code */ + for (int j23 = 0; (j23 < 4); j23 = (j23 + 1)) { + fVec4_perm[j23] = fVec4_tmp[(vsize + j23)]; + + } + /* Recursive loop 7 */ + /* Pre code */ + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec43_tmp[j10] = fRec43_perm[j10]; + + } + for (int j14 = 0; (j14 < 4); j14 = (j14 + 1)) { + fRec44_tmp[j14] = fRec44_perm[j14]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec43[i] = ((fRec44[(i - 1)] * fZec2[i]) + (fRec43[(i - 1)] * fZec3[i])); + fRec44[i] = ((float(iZec4[i]) + (fRec44[(i - 1)] * fZec3[i])) - (fRec43[(i - 1)] * fZec2[i])); + + } + /* Post code */ + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec43_perm[j11] = fRec43_tmp[(vsize + j11)]; + + } + for (int j15 = 0; (j15 < 4); j15 = (j15 + 1)) { + fRec44_perm[j15] = fRec44_tmp[(vsize + j15)]; + + } + /* Vectorizable loop 8 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec9[i] = (fSlow8 + fVec4[(i - 1)]); + + } + /* Vectorizable loop 9 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec10[i] = (fConst2 * ((fRec43[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 10 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec28[i] = (fConst2 * ((fRec44[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 11 */ + /* Pre code */ + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fVec2_tmp[j18] = fVec2_perm[j18]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec2[i] = fSlow6; + + } + /* Post code */ + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fVec2_perm[j19] = fVec2_tmp[(vsize + j19)]; + + } + /* Vectorizable loop 12 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec11[i] = (fZec10[i] + 8.50000477f); + + } + /* Vectorizable loop 13 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec29[i] = (fZec28[i] + 8.50000477f); + + } + /* Recursive loop 14 */ + /* Pre code */ + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fRec45_tmp[j16] = fRec45_perm[j16]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec45[i] = (fSlow5 + (0.999899983f * (fRec45[(i - 1)] + float((iSlow4 * iZec4[i]))))); + + } + /* Post code */ + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fRec45_perm[j17] = fRec45_tmp[(vsize + j17)]; + + } + /* Vectorizable loop 15 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec5[i] = (0.5f * (fSlow6 + fVec2[(i - 1)])); + + } + /* Vectorizable loop 16 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec13[i] = std::floor(fZec11[i]); + + } + /* Recursive loop 17 */ + /* Pre code */ + for (int j30 = 0; (j30 < 4); j30 = (j30 + 1)) { + fRec47_tmp[j30] = fRec47_perm[j30]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec47[i] = (fSlow10 + (0.999899983f * (fRec47[(i - 1)] + float((iSlow9 * iZec4[i]))))); + + } + /* Post code */ + for (int j31 = 0; (j31 < 4); j31 = (j31 + 1)) { + fRec47_perm[j31] = fRec47_tmp[(vsize + j31)]; + + } + /* Vectorizable loop 18 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec31[i] = std::floor(fZec29[i]); + + } + /* Recursive loop 19 */ + /* Pre code */ + for (int j38 = 0; (j38 < 4); j38 = (j38 + 1)) { + fRec48_tmp[j38] = fRec48_perm[j38]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec48[i] = (fSlow13 + (0.999000013f * (fRec48[(i - 1)] + float((iSlow12 * iZec4[i]))))); + + } + /* Post code */ + for (int j39 = 0; (j39 < 4); j39 = (j39 + 1)) { + fRec48_perm[j39] = fRec48_tmp[(vsize + j39)]; + + } + /* Recursive loop 20 */ + /* Pre code */ + for (int j46 = 0; (j46 < 4); j46 = (j46 + 1)) { + fRec50_tmp[j46] = fRec50_perm[j46]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec50[i] = (fSlow15 + (0.999000013f * (fRec50[(i - 1)] + float((iSlow14 * iZec4[i]))))); + + } + /* Post code */ + for (int j47 = 0; (j47 < 4); j47 = (j47 + 1)) { + fRec50_perm[j47] = fRec50_tmp[(vsize + j47)]; + + } + /* Recursive loop 21 */ + /* Pre code */ + for (int j54 = 0; (j54 < 4); j54 = (j54 + 1)) { + fRec51_tmp[j54] = fRec51_perm[j54]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec51[i] = (fSlow18 + (0.999000013f * (fRec51[(i - 1)] + float((iSlow17 * iZec4[i]))))); + + } + /* Post code */ + for (int j55 = 0; (j55 < 4); j55 = (j55 + 1)) { + fRec51_perm[j55] = fRec51_tmp[(vsize + j55)]; + + } + /* Recursive loop 22 */ + /* Pre code */ + for (int j62 = 0; (j62 < 4); j62 = (j62 + 1)) { + fRec53_tmp[j62] = fRec53_perm[j62]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec53[i] = (fSlow20 + (0.999000013f * (fRec53[(i - 1)] + float((iSlow19 * iZec4[i]))))); + + } + /* Post code */ + for (int j63 = 0; (j63 < 4); j63 = (j63 + 1)) { + fRec53_perm[j63] = fRec53_tmp[(vsize + j63)]; + + } + /* Recursive loop 23 */ + /* Pre code */ + for (int j70 = 0; (j70 < 4); j70 = (j70 + 1)) { + fRec54_tmp[j70] = fRec54_perm[j70]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec54[i] = (fSlow22 + (0.999000013f * (fRec54[(i - 1)] + float((iSlow21 * iZec4[i]))))); + + } + /* Post code */ + for (int j71 = 0; (j71 < 4); j71 = (j71 + 1)) { + fRec54_perm[j71] = fRec54_tmp[(vsize + j71)]; + + } + /* Recursive loop 24 */ + /* Pre code */ + for (int j78 = 0; (j78 < 4); j78 = (j78 + 1)) { + fRec56_tmp[j78] = fRec56_perm[j78]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec56[i] = (fSlow24 + (0.999000013f * (fRec56[(i - 1)] + float((iSlow23 * iZec4[i]))))); + + } + /* Post code */ + for (int j79 = 0; (j79 < 4); j79 = (j79 + 1)) { + fRec56_perm[j79] = fRec56_tmp[(vsize + j79)]; + + } + /* Recursive loop 25 */ + /* Pre code */ + for (int j86 = 0; (j86 < 4); j86 = (j86 + 1)) { + fRec57_tmp[j86] = fRec57_perm[j86]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec57[i] = (fSlow27 + (0.999899983f * (fRec57[(i - 1)] + float((iSlow26 * iZec4[i]))))); + + } + /* Post code */ + for (int j87 = 0; (j87 < 4); j87 = (j87 + 1)) { + fRec57_perm[j87] = fRec57_tmp[(vsize + j87)]; + + } + /* Recursive loop 26 */ + /* Pre code */ + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fRec59_tmp[j94] = fRec59_perm[j94]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec59[i] = (fSlow29 + (0.999899983f * (fRec59[(i - 1)] + float((iSlow28 * iZec4[i]))))); + + } + /* Post code */ + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fRec59_perm[j95] = fRec59_tmp[(vsize + j95)]; + + } + /* Recursive loop 27 */ + /* Pre code */ + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec60_tmp[j102] = fRec60_perm[j102]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec60[i] = (fSlow32 + (0.999000013f * (fRec60[(i - 1)] + float((iSlow31 * iZec4[i]))))); + + } + /* Post code */ + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec60_perm[j103] = fRec60_tmp[(vsize + j103)]; + + } + /* Recursive loop 28 */ + /* Pre code */ + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec62_tmp[j110] = fRec62_perm[j110]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec62[i] = (fSlow34 + (0.999000013f * (fRec62[(i - 1)] + float((iSlow33 * iZec4[i]))))); + + } + /* Post code */ + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec62_perm[j111] = fRec62_tmp[(vsize + j111)]; + + } + /* Recursive loop 29 */ + /* Pre code */ + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec63_tmp[j118] = fRec63_perm[j118]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec63[i] = (fSlow37 + (0.999000013f * (fRec63[(i - 1)] + float((iSlow36 * iZec4[i]))))); + + } + /* Post code */ + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec63_perm[j119] = fRec63_tmp[(vsize + j119)]; + + } + /* Recursive loop 30 */ + /* Pre code */ + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec65_tmp[j126] = fRec65_perm[j126]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec65[i] = (fSlow39 + (0.999000013f * (fRec65[(i - 1)] + float((iSlow38 * iZec4[i]))))); + + } + /* Post code */ + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec65_perm[j127] = fRec65_tmp[(vsize + j127)]; + + } + /* Recursive loop 31 */ + /* Pre code */ + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec66_tmp[j134] = fRec66_perm[j134]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec66[i] = (fSlow42 + (0.999000013f * (fRec66[(i - 1)] + float((iSlow41 * iZec4[i]))))); + + } + /* Post code */ + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec66_perm[j135] = fRec66_tmp[(vsize + j135)]; + + } + /* Recursive loop 32 */ + /* Pre code */ + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec68_tmp[j142] = fRec68_perm[j142]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec68[i] = (fSlow44 + (0.999000013f * (fRec68[(i - 1)] + float((iSlow43 * iZec4[i]))))); + + } + /* Post code */ + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec68_perm[j143] = fRec68_tmp[(vsize + j143)]; + + } + /* Recursive loop 33 */ + /* Pre code */ + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec69_tmp[j150] = fRec69_perm[j150]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec69[i] = (fSlow47 + (0.999899983f * (fRec69[(i - 1)] + float((iSlow46 * iZec4[i]))))); + + } + /* Post code */ + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec69_perm[j151] = fRec69_tmp[(vsize + j151)]; + + } + /* Recursive loop 34 */ + /* Pre code */ + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec71_tmp[j158] = fRec71_perm[j158]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec71[i] = (fSlow49 + (0.999899983f * (fRec71[(i - 1)] + float((iSlow48 * iZec4[i]))))); + + } + /* Post code */ + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec71_perm[j159] = fRec71_tmp[(vsize + j159)]; + + } + /* Recursive loop 35 */ + /* Pre code */ + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec72_tmp[j166] = fRec72_perm[j166]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec72[i] = (fSlow52 + (0.999000013f * (fRec72[(i - 1)] + float((iSlow51 * iZec4[i]))))); + + } + /* Post code */ + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec72_perm[j167] = fRec72_tmp[(vsize + j167)]; + + } + /* Recursive loop 36 */ + /* Pre code */ + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec74_tmp[j174] = fRec74_perm[j174]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec74[i] = (fSlow54 + (0.999000013f * (fRec74[(i - 1)] + float((iSlow53 * iZec4[i]))))); + + } + /* Post code */ + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec74_perm[j175] = fRec74_tmp[(vsize + j175)]; + + } + /* Recursive loop 37 */ + /* Pre code */ + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec75_tmp[j182] = fRec75_perm[j182]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec75[i] = (fSlow57 + (0.999000013f * (fRec75[(i - 1)] + float((iSlow56 * iZec4[i]))))); + + } + /* Post code */ + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec75_perm[j183] = fRec75_tmp[(vsize + j183)]; + + } + /* Recursive loop 38 */ + /* Pre code */ + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec77_tmp[j190] = fRec77_perm[j190]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec77[i] = (fSlow59 + (0.999000013f * (fRec77[(i - 1)] + float((iSlow58 * iZec4[i]))))); + + } + /* Post code */ + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec77_perm[j191] = fRec77_tmp[(vsize + j191)]; + + } + /* Recursive loop 39 */ + /* Pre code */ + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fRec78_tmp[j198] = fRec78_perm[j198]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec78[i] = (fSlow62 + (0.999000013f * (fRec78[(i - 1)] + float((iSlow61 * iZec4[i]))))); + + } + /* Post code */ + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fRec78_perm[j199] = fRec78_tmp[(vsize + j199)]; + + } + /* Recursive loop 40 */ + /* Pre code */ + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec80_tmp[j206] = fRec80_perm[j206]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec80[i] = (fSlow64 + (0.999000013f * (fRec80[(i - 1)] + float((iSlow63 * iZec4[i]))))); + + } + /* Post code */ + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec80_perm[j207] = fRec80_tmp[(vsize + j207)]; + + } + /* Vectorizable loop 41 */ + /* Pre code */ + for (int j214 = 0; (j214 < 4); j214 = (j214 + 1)) { + fVec5_tmp[j214] = fVec5_perm[j214]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec5[i] = fSlow65; + + } + /* Post code */ + for (int j215 = 0; (j215 < 4); j215 = (j215 + 1)) { + fVec5_perm[j215] = fVec5_tmp[(vsize + j215)]; + + } + /* Recursive loop 42 */ + /* Pre code */ + for (int j0 = 0; (j0 < 4); j0 = (j0 + 1)) { + fRec39_tmp[j0] = fRec39_perm[j0]; + + } + for (int j2 = 0; (j2 < 4); j2 = (j2 + 1)) { + fRec40_tmp[j2] = fRec40_perm[j2]; + + } + for (int j4 = 0; (j4 < 4); j4 = (j4 + 1)) { + fRec41_tmp[j4] = fRec41_perm[j4]; + + } + for (int j6 = 0; (j6 < 4); j6 = (j6 + 1)) { + fRec42_tmp[j6] = fRec42_perm[j6]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec0[i] = ((fRec39[(i - 1)] != 0.0f)?(((fRec40[(i - 1)] > 0.0f) & (fRec40[(i - 1)] < 1.0f))?fRec39[(i - 1)]:0.0f):(((fRec40[(i - 1)] == 0.0f) & (fSlow0 != fRec41[(i - 1)]))?4.53514731e-05f:(((fRec40[(i - 1)] == 1.0f) & (fSlow0 != fRec42[(i - 1)]))?-4.53514731e-05f:0.0f))); + fRec39[i] = fZec0[i]; + fRec40[i] = std::max(0.0f, std::min(1.0f, (fRec40[(i - 1)] + fZec0[i]))); + fRec41[i] = (((fRec40[(i - 1)] >= 1.0f) & (fRec42[(i - 1)] != fSlow0))?fSlow0:fRec41[(i - 1)]); + fRec42[i] = (((fRec40[(i - 1)] <= 0.0f) & (fRec41[(i - 1)] != fSlow0))?fSlow0:fRec42[(i - 1)]); + + } + /* Post code */ + for (int j1 = 0; (j1 < 4); j1 = (j1 + 1)) { + fRec39_perm[j1] = fRec39_tmp[(vsize + j1)]; + + } + for (int j3 = 0; (j3 < 4); j3 = (j3 + 1)) { + fRec40_perm[j3] = fRec40_tmp[(vsize + j3)]; + + } + for (int j5 = 0; (j5 < 4); j5 = (j5 + 1)) { + fRec41_perm[j5] = fRec41_tmp[(vsize + j5)]; + + } + for (int j7 = 0; (j7 < 4); j7 = (j7 + 1)) { + fRec42_perm[j7] = fRec42_tmp[(vsize + j7)]; + + } + /* Vectorizable loop 43 */ + /* Pre code */ + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fVec3_tmp[j20] = fVec3_perm[j20]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec3[i] = fSlow7; + + } + /* Post code */ + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fVec3_perm[j21] = fVec3_tmp[(vsize + j21)]; + + } + /* Vectorizable loop 44 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec14[i] = (fZec10[i] + (9.0f - fZec13[i])); + + } + /* Vectorizable loop 45 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec15[i] = (fZec10[i] + (8.0f - fZec13[i])); + + } + /* Vectorizable loop 46 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec26[i] = (fRec45[i] + -1.49998999f); + + } + /* Vectorizable loop 47 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec32[i] = (fZec28[i] + (9.0f - fZec31[i])); + + } + /* Vectorizable loop 48 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec33[i] = (fZec28[i] + (8.0f - fZec31[i])); + + } + /* Vectorizable loop 49 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec41[i] = (fRec47[i] + -1.49998999f); + + } + /* Vectorizable loop 50 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec43[i] = (fRec48[i] + -1.49998999f); + + } + /* Vectorizable loop 51 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (fRec50[i] + -1.49998999f); + + } + /* Vectorizable loop 52 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (fRec51[i] + -1.49998999f); + + } + /* Vectorizable loop 53 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (fRec53[i] + -1.49998999f); + + } + /* Vectorizable loop 54 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (fRec54[i] + -1.49998999f); + + } + /* Vectorizable loop 55 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec53[i] = (fRec56[i] + -1.49998999f); + + } + /* Vectorizable loop 56 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - fZec5[i]); + + } + /* Vectorizable loop 57 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (fRec57[i] + -1.49998999f); + + } + /* Vectorizable loop 58 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec68[i] = (fRec59[i] + -1.49998999f); + + } + /* Vectorizable loop 59 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec70[i] = (fRec60[i] + -1.49998999f); + + } + /* Vectorizable loop 60 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec72[i] = (fRec62[i] + -1.49998999f); + + } + /* Vectorizable loop 61 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fRec63[i] + -1.49998999f); + + } + /* Vectorizable loop 62 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec76[i] = (fRec65[i] + -1.49998999f); + + } + /* Vectorizable loop 63 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec78[i] = (fRec66[i] + -1.49998999f); + + } + /* Vectorizable loop 64 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec80[i] = (fRec68[i] + -1.49998999f); + + } + /* Vectorizable loop 65 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec86[i] = (fRec69[i] + -1.49998999f); + + } + /* Vectorizable loop 66 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec92[i] = (fRec71[i] + -1.49998999f); + + } + /* Vectorizable loop 67 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec72[i] + -1.49998999f); + + } + /* Vectorizable loop 68 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec96[i] = (fRec74[i] + -1.49998999f); + + } + /* Vectorizable loop 69 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec98[i] = (fRec75[i] + -1.49998999f); + + } + /* Vectorizable loop 70 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = (fRec77[i] + -1.49998999f); + + } + /* Vectorizable loop 71 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec102[i] = (fRec78[i] + -1.49998999f); + + } + /* Vectorizable loop 72 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fRec80[i] + -1.49998999f); + + } + /* Vectorizable loop 73 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec106[i] = (fSlow65 + fVec5[(i - 1)]); + + } + /* Vectorizable loop 74 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec6[i] = std::cos(fZec5[i]); + + } + /* Vectorizable loop 75 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec7[i] = (fSlow7 + fVec3[(i - 1)]); + + } + /* Vectorizable loop 76 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec8[i] = (1.0f - fRec40[i]); + + } + /* Vectorizable loop 77 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec12[i] = int(fZec11[i]); + + } + /* Vectorizable loop 78 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec16[i] = (fZec10[i] + (7.0f - fZec13[i])); + + } + /* Vectorizable loop 79 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec17[i] = (fZec10[i] + (6.0f - fZec13[i])); + + } + /* Vectorizable loop 80 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec18[i] = (fZec14[i] * fZec15[i]); + + } + /* Vectorizable loop 81 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec22[i] = std::sin(fZec5[i]); + + } + /* Vectorizable loop 82 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec19[i] = int(std::min(65536.0f, std::max(0.0f, fRec41[i]))); + + } + /* Vectorizable loop 83 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec20[i] = int(std::min(65536.0f, std::max(0.0f, fRec42[i]))); + + } + /* Vectorizable loop 84 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec36[i] = (fZec32[i] * fZec33[i]); + + } + /* Vectorizable loop 85 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec27[i] = std::floor(fZec26[i]); + + } + /* Vectorizable loop 86 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec30[i] = int(fZec29[i]); + + } + /* Vectorizable loop 87 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec34[i] = (fZec28[i] + (7.0f - fZec31[i])); + + } + /* Vectorizable loop 88 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec35[i] = (fZec28[i] + (6.0f - fZec31[i])); + + } + /* Vectorizable loop 89 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec42[i] = std::floor(fZec41[i]); + + } + /* Vectorizable loop 90 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec44[i] = std::floor(fZec43[i]); + + } + /* Vectorizable loop 91 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec46[i] = std::floor(fZec45[i]); + + } + /* Vectorizable loop 92 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec48[i] = std::floor(fZec47[i]); + + } + /* Vectorizable loop 93 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec50[i] = std::floor(fZec49[i]); + + } + /* Vectorizable loop 94 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = std::floor(fZec51[i]); + + } + /* Vectorizable loop 95 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = std::floor(fZec53[i]); + + } + /* Vectorizable loop 96 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = std::cos(fZec55[i]); + + } + /* Vectorizable loop 97 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = std::sin(fZec55[i]); + + } + /* Vectorizable loop 98 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = std::floor(fZec62[i]); + + } + /* Vectorizable loop 99 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec69[i] = std::floor(fZec68[i]); + + } + /* Vectorizable loop 100 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec71[i] = std::floor(fZec70[i]); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = std::floor(fZec72[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = std::floor(fZec74[i]); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec79[i] = std::floor(fZec78[i]); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec87[i] = std::floor(fZec86[i]); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = std::floor(fZec92[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec95[i] = std::floor(fZec94[i]); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec97[i] = std::floor(fZec96[i]); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec99[i] = std::floor(fZec98[i]); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec101[i] = std::floor(fZec100[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec103[i] = std::floor(fZec102[i]); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = std::floor(fZec104[i]); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec107[i] = (1.0f - (0.5f * fZec106[i])); + + } + /* Recursive loop 115 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 131071); + fYec1_idx = ((fYec1_idx + fYec1_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec2_tmp[j24] = fYec2_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec38_tmp[j26] = fRec38_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec36_tmp[j28] = fRec36_perm[j28]; + + } + fYec3_idx = ((fYec3_idx + fYec3_idx_save) & 131071); + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec5_tmp[j32] = fYec5_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec46_tmp[j34] = fRec46_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec37_tmp[j36] = fRec37_perm[j36]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec7_tmp[j40] = fYec7_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec35_tmp[j42] = fRec35_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec33_tmp[j44] = fRec33_perm[j44]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec9_tmp[j48] = fYec9_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec49_tmp[j50] = fRec49_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec34_tmp[j52] = fRec34_perm[j52]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec11_tmp[j56] = fYec11_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec32_tmp[j58] = fRec32_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec30_tmp[j60] = fRec30_perm[j60]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec13_tmp[j64] = fYec13_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec52_tmp[j66] = fRec52_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec31_tmp[j68] = fRec31_perm[j68]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec15_tmp[j72] = fYec15_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec29_tmp[j74] = fRec29_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec27_tmp[j76] = fRec27_perm[j76]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec17_tmp[j80] = fYec17_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec55_tmp[j82] = fRec55_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec28_tmp[j84] = fRec28_perm[j84]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec19_tmp[j88] = fYec19_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec26_tmp[j90] = fRec26_perm[j90]; + + } + for (int j92 = 0; (j92 < 4); j92 = (j92 + 1)) { + fRec24_tmp[j92] = fRec24_perm[j92]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 16383); + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fYec21_tmp[j96] = fYec21_perm[j96]; + + } + for (int j98 = 0; (j98 < 4); j98 = (j98 + 1)) { + fRec58_tmp[j98] = fRec58_perm[j98]; + + } + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fRec25_tmp[j100] = fRec25_perm[j100]; + + } + fYec22_idx = ((fYec22_idx + fYec22_idx_save) & 16383); + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fYec23_tmp[j104] = fYec23_perm[j104]; + + } + for (int j106 = 0; (j106 < 4); j106 = (j106 + 1)) { + fRec23_tmp[j106] = fRec23_perm[j106]; + + } + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fRec21_tmp[j108] = fRec21_perm[j108]; + + } + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fYec25_tmp[j112] = fYec25_perm[j112]; + + } + for (int j114 = 0; (j114 < 4); j114 = (j114 + 1)) { + fRec61_tmp[j114] = fRec61_perm[j114]; + + } + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fRec22_tmp[j116] = fRec22_perm[j116]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fYec27_tmp[j120] = fYec27_perm[j120]; + + } + for (int j122 = 0; (j122 < 4); j122 = (j122 + 1)) { + fRec20_tmp[j122] = fRec20_perm[j122]; + + } + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fRec18_tmp[j124] = fRec18_perm[j124]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fYec29_tmp[j128] = fYec29_perm[j128]; + + } + for (int j130 = 0; (j130 < 4); j130 = (j130 + 1)) { + fRec64_tmp[j130] = fRec64_perm[j130]; + + } + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fRec19_tmp[j132] = fRec19_perm[j132]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fYec31_tmp[j136] = fYec31_perm[j136]; + + } + for (int j138 = 0; (j138 < 4); j138 = (j138 + 1)) { + fRec17_tmp[j138] = fRec17_perm[j138]; + + } + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fRec15_tmp[j140] = fRec15_perm[j140]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fYec33_tmp[j144] = fYec33_perm[j144]; + + } + for (int j146 = 0; (j146 < 4); j146 = (j146 + 1)) { + fRec67_tmp[j146] = fRec67_perm[j146]; + + } + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fRec16_tmp[j148] = fRec16_perm[j148]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fYec35_tmp[j152] = fYec35_perm[j152]; + + } + for (int j154 = 0; (j154 < 4); j154 = (j154 + 1)) { + fRec14_tmp[j154] = fRec14_perm[j154]; + + } + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fRec12_tmp[j156] = fRec12_perm[j156]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fYec37_tmp[j160] = fYec37_perm[j160]; + + } + for (int j162 = 0; (j162 < 4); j162 = (j162 + 1)) { + fRec70_tmp[j162] = fRec70_perm[j162]; + + } + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fRec13_tmp[j164] = fRec13_perm[j164]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fYec39_tmp[j168] = fYec39_perm[j168]; + + } + for (int j170 = 0; (j170 < 4); j170 = (j170 + 1)) { + fRec11_tmp[j170] = fRec11_perm[j170]; + + } + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fRec9_tmp[j172] = fRec9_perm[j172]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fYec41_tmp[j176] = fYec41_perm[j176]; + + } + for (int j178 = 0; (j178 < 4); j178 = (j178 + 1)) { + fRec73_tmp[j178] = fRec73_perm[j178]; + + } + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fRec10_tmp[j180] = fRec10_perm[j180]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fYec43_tmp[j184] = fYec43_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec8_tmp[j186] = fRec8_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec6_tmp[j188] = fRec6_perm[j188]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fYec45_tmp[j192] = fYec45_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec76_tmp[j194] = fRec76_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec7_tmp[j196] = fRec7_perm[j196]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fYec47_tmp[j200] = fYec47_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec5_tmp[j202] = fRec5_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec3_tmp[j204] = fRec3_perm[j204]; + + } + fYec48_idx = ((fYec48_idx + fYec48_idx_save) & 16383); + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fYec49_tmp[j208] = fYec49_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec79_tmp[j210] = fRec79_perm[j210]; + + } + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec4_tmp[j212] = fRec4_perm[j212]; + + } + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fRec2_tmp[j216] = fRec2_perm[j216]; + + } + fRec0_idx = ((fRec0_idx + fRec0_idx_save) & 1023); + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec81_tmp[j218] = fRec81_perm[j218]; + + } + fRec1_idx = ((fRec1_idx + fRec1_idx_save) & 1023); + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fYec0[((i + fYec0_idx) & 131071)] = (((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, iZec12[i])) + 1)) & 1023)] * (0.0f - fZec14[i])) * (0.0f - (0.5f * fZec15[i]))) * (0.0f - (0.333333343f * fZec16[i]))) * (0.0f - (0.25f * fZec17[i]))) + ((fZec10[i] + (10.0f - fZec13[i])) * ((((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 1))) + 1)) & 1023)] * (0.0f - fZec15[i])) * (0.0f - (0.5f * fZec16[i]))) * (0.0f - (0.333333343f * fZec17[i]))) + (0.5f * (((fZec14[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec16[i])) * (0.0f - (0.5f * fZec17[i]))))) + (0.166666672f * ((fZec18[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec17[i])))) + (0.0416666679f * ((fZec18[i] * fZec16[i]) * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 4))) + 1)) & 1023)]))))); + fZec21[i] = ((0.5f * (fZec7[i] * ((fZec8[i] * fYec0[(((i + fYec0_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec0[(((i + fYec0_idx) - iZec20[i]) & 131071)])))) + float(input1[i])); + fZec23[i] = ((fZec6[i] * fZec21[i]) - (fZec22[i] * fRec28[(i - 1)])); + fZec24[i] = ((fZec6[i] * fZec23[i]) - (fZec22[i] * fRec31[(i - 1)])); + fZec25[i] = ((fZec6[i] * fZec24[i]) - (fZec22[i] * fRec34[(i - 1)])); + fYec1[((i + fYec1_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec25[i]) - (fZec22[i] * fRec37[(i - 1)]))); + fYec2[i] = fYec1[(((i + fYec1_idx) - std::min(8192, std::max(0, int(fZec26[i])))) & 16383)]; + fRec38[i] = (fYec2[(i - 1)] - (((fZec27[i] + (2.0f - fRec45[i])) * (fRec38[(i - 1)] - fYec2[i])) / (fRec45[i] - fZec27[i]))); + fRec36[i] = fRec38[i]; + fYec3[((i + fYec3_idx) & 131071)] = (((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, iZec30[i])) + 1)) & 1023)] * (0.0f - fZec32[i])) * (0.0f - (0.5f * fZec33[i]))) * (0.0f - (0.333333343f * fZec34[i]))) * (0.0f - (0.25f * fZec35[i]))) + ((fZec28[i] + (10.0f - fZec31[i])) * ((((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 1))) + 1)) & 1023)] * (0.0f - fZec33[i])) * (0.0f - (0.5f * fZec34[i]))) * (0.0f - (0.333333343f * fZec35[i]))) + (0.5f * (((fZec32[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec34[i])) * (0.0f - (0.5f * fZec35[i]))))) + (0.166666672f * ((fZec36[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec35[i])))) + (0.0416666679f * ((fZec36[i] * fZec34[i]) * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 4))) + 1)) & 1023)]))))); + fZec37[i] = ((0.5f * (((fZec8[i] * fYec3[(((i + fYec3_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec3[(((i + fYec3_idx) - iZec20[i]) & 131071)])) * fZec7[i])) + float(input0[i])); + fZec38[i] = ((fZec37[i] * fZec6[i]) - (fZec22[i] * fRec27[(i - 1)])); + fZec39[i] = ((fZec6[i] * fZec38[i]) - (fZec22[i] * fRec30[(i - 1)])); + fZec40[i] = ((fZec6[i] * fZec39[i]) - (fZec22[i] * fRec33[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((fZec6[i] * fZec40[i]) - (fZec22[i] * fRec36[(i - 1)])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec41[i])))) & 16383)]; + fRec46[i] = (fYec5[(i - 1)] - (((fZec42[i] + (2.0f - fRec47[i])) * (fRec46[(i - 1)] - fYec5[i])) / (fRec47[i] - fZec42[i]))); + fRec37[i] = fRec46[i]; + fYec6[((i + fYec6_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec37[(i - 1)]) + (fZec22[i] * fZec25[i]))); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec43[i])))) & 16383)]; + fRec35[i] = (fYec7[(i - 1)] - (((fZec44[i] + (2.0f - fRec48[i])) * (fRec35[(i - 1)] - fYec7[i])) / (fRec48[i] - fZec44[i]))); + fRec33[i] = fRec35[i]; + fYec8[((i + fYec8_idx) & 16383)] = ((fRec36[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec40[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec45[i])))) & 16383)]; + fRec49[i] = (fYec9[(i - 1)] - (((fZec46[i] + (2.0f - fRec50[i])) * (fRec49[(i - 1)] - fYec9[i])) / (fRec50[i] - fZec46[i]))); + fRec34[i] = fRec49[i]; + fYec10[((i + fYec10_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec34[(i - 1)]) + (fZec22[i] * fZec24[i]))); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec47[i])))) & 16383)]; + fRec32[i] = (fYec11[(i - 1)] - (((fZec48[i] + (2.0f - fRec51[i])) * (fRec32[(i - 1)] - fYec11[i])) / (fRec51[i] - fZec48[i]))); + fRec30[i] = fRec32[i]; + fYec12[((i + fYec12_idx) & 16383)] = ((fRec33[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec39[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec49[i])))) & 16383)]; + fRec52[i] = (fYec13[(i - 1)] - (((fZec50[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec13[i])) / (fRec53[i] - fZec50[i]))); + fRec31[i] = fRec52[i]; + fYec14[((i + fYec14_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec31[(i - 1)]) + (fZec22[i] * fZec23[i]))); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec51[i])))) & 16383)]; + fRec29[i] = (fYec15[(i - 1)] - (((fZec52[i] + (2.0f - fRec54[i])) * (fRec29[(i - 1)] - fYec15[i])) / (fRec54[i] - fZec52[i]))); + fRec27[i] = fRec29[i]; + fYec16[((i + fYec16_idx) & 16383)] = ((fRec30[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec38[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec53[i])))) & 16383)]; + fRec55[i] = (fYec17[(i - 1)] - (((fZec54[i] + (2.0f - fRec56[i])) * (fRec55[(i - 1)] - fYec17[i])) / (fRec56[i] - fZec54[i]))); + fRec28[i] = fRec55[i]; + fZec57[i] = ((fZec6[i] * fRec28[(i - 1)]) + (fZec22[i] * fZec21[i])); + fZec59[i] = ((fZec56[i] * fZec57[i]) - (fZec58[i] * fRec16[(i - 1)])); + fZec60[i] = ((fZec56[i] * fZec59[i]) - (fZec58[i] * fRec19[(i - 1)])); + fZec61[i] = ((fZec56[i] * fZec60[i]) - (fZec58[i] * fRec22[(i - 1)])); + fYec18[((i + fYec18_idx) & 16383)] = (0.0f - ((fZec56[i] * fZec61[i]) - (fZec58[i] * fRec25[(i - 1)]))); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec62[i])))) & 16383)]; + fRec26[i] = (fYec19[(i - 1)] - (((fZec63[i] + (2.0f - fRec57[i])) * (fRec26[(i - 1)] - fYec19[i])) / (fRec57[i] - fZec63[i]))); + fRec24[i] = fRec26[i]; + fZec64[i] = ((fRec27[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec37[i])); + fZec65[i] = ((fZec64[i] * fZec56[i]) - (fZec58[i] * fRec15[(i - 1)])); + fZec66[i] = ((fZec56[i] * fZec65[i]) - (fZec58[i] * fRec18[(i - 1)])); + fZec67[i] = ((fZec56[i] * fZec66[i]) - (fZec58[i] * fRec21[(i - 1)])); + fYec20[((i + fYec20_idx) & 16383)] = ((fZec56[i] * fZec67[i]) - (fRec24[(i - 1)] * fZec58[i])); + fYec21[i] = fYec20[(((i + fYec20_idx) - std::min(8192, std::max(0, int(fZec68[i])))) & 16383)]; + fRec58[i] = (fYec21[(i - 1)] - (((fZec69[i] + (2.0f - fRec59[i])) * (fRec58[(i - 1)] - fYec21[i])) / (fRec59[i] - fZec69[i]))); + fRec25[i] = fRec58[i]; + fYec22[((i + fYec22_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec25[(i - 1)]) + (fZec58[i] * fZec61[i]))); + fYec23[i] = fYec22[(((i + fYec22_idx) - std::min(8192, std::max(0, int(fZec70[i])))) & 16383)]; + fRec23[i] = (fYec23[(i - 1)] - (((fZec71[i] + (2.0f - fRec60[i])) * (fRec23[(i - 1)] - fYec23[i])) / (fRec60[i] - fZec71[i]))); + fRec21[i] = fRec23[i]; + fYec24[((i + fYec24_idx) & 16383)] = ((fRec24[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec67[i])); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec72[i])))) & 16383)]; + fRec61[i] = (fYec25[(i - 1)] - (((fZec73[i] + (2.0f - fRec62[i])) * (fRec61[(i - 1)] - fYec25[i])) / (fRec62[i] - fZec73[i]))); + fRec22[i] = fRec61[i]; + fYec26[((i + fYec26_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec22[(i - 1)]) + (fZec58[i] * fZec60[i]))); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec74[i])))) & 16383)]; + fRec20[i] = (fYec27[(i - 1)] - (((fZec75[i] + (2.0f - fRec63[i])) * (fRec20[(i - 1)] - fYec27[i])) / (fRec63[i] - fZec75[i]))); + fRec18[i] = fRec20[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((fRec21[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec66[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec64[i] = (fYec29[(i - 1)] - (((fZec77[i] + (2.0f - fRec65[i])) * (fRec64[(i - 1)] - fYec29[i])) / (fRec65[i] - fZec77[i]))); + fRec19[i] = fRec64[i]; + fYec30[((i + fYec30_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec19[(i - 1)]) + (fZec58[i] * fZec59[i]))); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec78[i])))) & 16383)]; + fRec17[i] = (fYec31[(i - 1)] - (((fZec79[i] + (2.0f - fRec66[i])) * (fRec17[(i - 1)] - fYec31[i])) / (fRec66[i] - fZec79[i]))); + fRec15[i] = fRec17[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((fRec18[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec65[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec67[i] = (fYec33[(i - 1)] - (((fZec81[i] + (2.0f - fRec68[i])) * (fRec67[(i - 1)] - fYec33[i])) / (fRec68[i] - fZec81[i]))); + fRec16[i] = fRec67[i]; + fZec82[i] = ((fZec56[i] * fRec16[(i - 1)]) + (fZec58[i] * fZec57[i])); + fZec83[i] = ((fZec6[i] * fZec82[i]) - (fZec22[i] * fRec4[(i - 1)])); + fZec84[i] = ((fZec6[i] * fZec83[i]) - (fZec22[i] * fRec7[(i - 1)])); + fZec85[i] = ((fZec6[i] * fZec84[i]) - (fZec22[i] * fRec10[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec85[i]) - (fZec22[i] * fRec13[(i - 1)]))); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec86[i])))) & 16383)]; + fRec14[i] = (fYec35[(i - 1)] - (((fZec87[i] + (2.0f - fRec69[i])) * (fRec14[(i - 1)] - fYec35[i])) / (fRec69[i] - fZec87[i]))); + fRec12[i] = fRec14[i]; + fZec88[i] = ((fRec15[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec64[i])); + fZec89[i] = ((fZec6[i] * fZec88[i]) - (fZec22[i] * fRec3[(i - 1)])); + fZec90[i] = ((fZec6[i] * fZec89[i]) - (fZec22[i] * fRec6[(i - 1)])); + fZec91[i] = ((fZec6[i] * fZec90[i]) - (fZec22[i] * fRec9[(i - 1)])); + fYec36[((i + fYec36_idx) & 16383)] = ((fZec6[i] * fZec91[i]) - (fRec12[(i - 1)] * fZec22[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - std::min(8192, std::max(0, int(fZec92[i])))) & 16383)]; + fRec70[i] = (fYec37[(i - 1)] - (((fZec93[i] + (2.0f - fRec71[i])) * (fRec70[(i - 1)] - fYec37[i])) / (fRec71[i] - fZec93[i]))); + fRec13[i] = fRec70[i]; + fYec38[((i + fYec38_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec13[(i - 1)]) + (fZec22[i] * fZec85[i]))); + fYec39[i] = fYec38[(((i + fYec38_idx) - std::min(8192, std::max(0, int(fZec94[i])))) & 16383)]; + fRec11[i] = (fYec39[(i - 1)] - (((fZec95[i] + (2.0f - fRec72[i])) * (fRec11[(i - 1)] - fYec39[i])) / (fRec72[i] - fZec95[i]))); + fRec9[i] = fRec11[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((fRec12[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec91[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - std::min(8192, std::max(0, int(fZec96[i])))) & 16383)]; + fRec73[i] = (fYec41[(i - 1)] - (((fZec97[i] + (2.0f - fRec74[i])) * (fRec73[(i - 1)] - fYec41[i])) / (fRec74[i] - fZec97[i]))); + fRec10[i] = fRec73[i]; + fYec42[((i + fYec42_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec10[(i - 1)]) + (fZec22[i] * fZec84[i]))); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec98[i])))) & 16383)]; + fRec8[i] = (fYec43[(i - 1)] - (((fZec99[i] + (2.0f - fRec75[i])) * (fRec8[(i - 1)] - fYec43[i])) / (fRec75[i] - fZec99[i]))); + fRec6[i] = fRec8[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((fRec9[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec90[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - std::min(8192, std::max(0, int(fZec100[i])))) & 16383)]; + fRec76[i] = (fYec45[(i - 1)] - (((fZec101[i] + (2.0f - fRec77[i])) * (fRec76[(i - 1)] - fYec45[i])) / (fRec77[i] - fZec101[i]))); + fRec7[i] = fRec76[i]; + fYec46[((i + fYec46_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec7[(i - 1)]) + (fZec22[i] * fZec83[i]))); + fYec47[i] = fYec46[(((i + fYec46_idx) - std::min(8192, std::max(0, int(fZec102[i])))) & 16383)]; + fRec5[i] = (fYec47[(i - 1)] - (((fZec103[i] + (2.0f - fRec78[i])) * (fRec5[(i - 1)] - fYec47[i])) / (fRec78[i] - fZec103[i]))); + fRec3[i] = fRec5[i]; + fYec48[((i + fYec48_idx) & 16383)] = ((fRec6[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec89[i])); + fYec49[i] = fYec48[(((i + fYec48_idx) - std::min(8192, std::max(0, int(fZec104[i])))) & 16383)]; + fRec79[i] = (fYec49[(i - 1)] - (((fZec105[i] + (2.0f - fRec80[i])) * (fRec79[(i - 1)] - fYec49[i])) / (fRec80[i] - fZec105[i]))); + fRec4[i] = fRec79[i]; + fRec2[i] = ((0.5f * (fRec2[(i - 1)] * fZec106[i])) + (((fRec3[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec88[i])) * fZec107[i])); + fRec0[((i + fRec0_idx) & 1023)] = fRec2[i]; + fRec81[i] = ((0.5f * (fRec81[(i - 1)] * fZec106[i])) + (fZec107[i] * ((fZec6[i] * fRec4[(i - 1)]) + (fZec22[i] * fZec82[i])))); + fRec1[((i + fRec1_idx) & 1023)] = fRec81[i]; + + } + /* Post code */ + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec81_perm[j219] = fRec81_tmp[(vsize + j219)]; + + } + fYec48_idx_save = vsize; + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fYec49_perm[j209] = fYec49_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec79_perm[j211] = fRec79_tmp[(vsize + j211)]; + + } + fYec46_idx_save = vsize; + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fYec47_perm[j201] = fYec47_tmp[(vsize + j201)]; + + } + fYec44_idx_save = vsize; + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fYec45_perm[j193] = fYec45_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec76_perm[j195] = fRec76_tmp[(vsize + j195)]; + + } + fYec42_idx_save = vsize; + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fYec43_perm[j185] = fYec43_tmp[(vsize + j185)]; + + } + fYec40_idx_save = vsize; + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fYec41_perm[j177] = fYec41_tmp[(vsize + j177)]; + + } + for (int j179 = 0; (j179 < 4); j179 = (j179 + 1)) { + fRec73_perm[j179] = fRec73_tmp[(vsize + j179)]; + + } + fYec38_idx_save = vsize; + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fYec39_perm[j169] = fYec39_tmp[(vsize + j169)]; + + } + fYec36_idx_save = vsize; + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fYec37_perm[j161] = fYec37_tmp[(vsize + j161)]; + + } + for (int j163 = 0; (j163 < 4); j163 = (j163 + 1)) { + fRec70_perm[j163] = fRec70_tmp[(vsize + j163)]; + + } + fYec34_idx_save = vsize; + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fYec35_perm[j153] = fYec35_tmp[(vsize + j153)]; + + } + fYec32_idx_save = vsize; + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fYec33_perm[j145] = fYec33_tmp[(vsize + j145)]; + + } + for (int j147 = 0; (j147 < 4); j147 = (j147 + 1)) { + fRec67_perm[j147] = fRec67_tmp[(vsize + j147)]; + + } + fYec30_idx_save = vsize; + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fYec31_perm[j137] = fYec31_tmp[(vsize + j137)]; + + } + fYec28_idx_save = vsize; + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fYec29_perm[j129] = fYec29_tmp[(vsize + j129)]; + + } + for (int j131 = 0; (j131 < 4); j131 = (j131 + 1)) { + fRec64_perm[j131] = fRec64_tmp[(vsize + j131)]; + + } + fYec26_idx_save = vsize; + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fYec27_perm[j121] = fYec27_tmp[(vsize + j121)]; + + } + fYec24_idx_save = vsize; + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fYec25_perm[j113] = fYec25_tmp[(vsize + j113)]; + + } + for (int j115 = 0; (j115 < 4); j115 = (j115 + 1)) { + fRec61_perm[j115] = fRec61_tmp[(vsize + j115)]; + + } + fYec22_idx_save = vsize; + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fYec23_perm[j105] = fYec23_tmp[(vsize + j105)]; + + } + fYec20_idx_save = vsize; + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fYec21_perm[j97] = fYec21_tmp[(vsize + j97)]; + + } + for (int j99 = 0; (j99 < 4); j99 = (j99 + 1)) { + fRec58_perm[j99] = fRec58_tmp[(vsize + j99)]; + + } + fYec18_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec19_perm[j89] = fYec19_tmp[(vsize + j89)]; + + } + fYec16_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec17_perm[j81] = fYec17_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec55_perm[j83] = fRec55_tmp[(vsize + j83)]; + + } + fYec14_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec15_perm[j73] = fYec15_tmp[(vsize + j73)]; + + } + fYec12_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec13_perm[j65] = fYec13_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec52_perm[j67] = fRec52_tmp[(vsize + j67)]; + + } + fYec10_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec11_perm[j57] = fYec11_tmp[(vsize + j57)]; + + } + fYec8_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec9_perm[j49] = fYec9_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec49_perm[j51] = fRec49_tmp[(vsize + j51)]; + + } + fYec6_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec7_perm[j41] = fYec7_tmp[(vsize + j41)]; + + } + fYec3_idx_save = vsize; + fYec4_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec5_perm[j33] = fYec5_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec46_perm[j35] = fRec46_tmp[(vsize + j35)]; + + } + fYec0_idx_save = vsize; + fYec1_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec2_perm[j25] = fYec2_tmp[(vsize + j25)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec38_perm[j27] = fRec38_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec36_perm[j29] = fRec36_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec37_perm[j37] = fRec37_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec35_perm[j43] = fRec35_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec33_perm[j45] = fRec33_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec34_perm[j53] = fRec34_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec32_perm[j59] = fRec32_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec30_perm[j61] = fRec30_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec31_perm[j69] = fRec31_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec29_perm[j75] = fRec29_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec27_perm[j77] = fRec27_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec28_perm[j85] = fRec28_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec26_perm[j91] = fRec26_tmp[(vsize + j91)]; + + } + for (int j93 = 0; (j93 < 4); j93 = (j93 + 1)) { + fRec24_perm[j93] = fRec24_tmp[(vsize + j93)]; + + } + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fRec25_perm[j101] = fRec25_tmp[(vsize + j101)]; + + } + for (int j107 = 0; (j107 < 4); j107 = (j107 + 1)) { + fRec23_perm[j107] = fRec23_tmp[(vsize + j107)]; + + } + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fRec21_perm[j109] = fRec21_tmp[(vsize + j109)]; + + } + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fRec22_perm[j117] = fRec22_tmp[(vsize + j117)]; + + } + for (int j123 = 0; (j123 < 4); j123 = (j123 + 1)) { + fRec20_perm[j123] = fRec20_tmp[(vsize + j123)]; + + } + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fRec18_perm[j125] = fRec18_tmp[(vsize + j125)]; + + } + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fRec19_perm[j133] = fRec19_tmp[(vsize + j133)]; + + } + for (int j139 = 0; (j139 < 4); j139 = (j139 + 1)) { + fRec17_perm[j139] = fRec17_tmp[(vsize + j139)]; + + } + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fRec15_perm[j141] = fRec15_tmp[(vsize + j141)]; + + } + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fRec16_perm[j149] = fRec16_tmp[(vsize + j149)]; + + } + for (int j155 = 0; (j155 < 4); j155 = (j155 + 1)) { + fRec14_perm[j155] = fRec14_tmp[(vsize + j155)]; + + } + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fRec12_perm[j157] = fRec12_tmp[(vsize + j157)]; + + } + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fRec13_perm[j165] = fRec13_tmp[(vsize + j165)]; + + } + for (int j171 = 0; (j171 < 4); j171 = (j171 + 1)) { + fRec11_perm[j171] = fRec11_tmp[(vsize + j171)]; + + } + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fRec9_perm[j173] = fRec9_tmp[(vsize + j173)]; + + } + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fRec10_perm[j181] = fRec10_tmp[(vsize + j181)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec8_perm[j187] = fRec8_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec6_perm[j189] = fRec6_tmp[(vsize + j189)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec7_perm[j197] = fRec7_tmp[(vsize + j197)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec5_perm[j203] = fRec5_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec3_perm[j205] = fRec3_tmp[(vsize + j205)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec4_perm[j213] = fRec4_tmp[(vsize + j213)]; + + } + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fRec2_perm[j217] = fRec2_tmp[(vsize + j217)]; + + } + fRec0_idx_save = vsize; + fRec1_idx_save = vsize; + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[((i + fRec0_idx) & 1023)]); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[((i + fRec1_idx) & 1023)]); + + } + } + /* Remaining frames */ + if (vindex < count) { + FAUSTFLOAT* input0 = &input0_ptr[vindex]; + FAUSTFLOAT* input1 = &input1_ptr[vindex]; + FAUSTFLOAT* output0 = &output0_ptr[vindex]; + FAUSTFLOAT* output1 = &output1_ptr[vindex]; + int vsize = (count - vindex); + /* Vectorizable loop 0 */ + /* Pre code */ + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fVec0_tmp[j8] = fVec0_perm[j8]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec0[i] = fSlow1; + + } + /* Post code */ + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fVec0_perm[j9] = fVec0_tmp[(vsize + j9)]; + + } + /* Vectorizable loop 1 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = (fConst1 * (fSlow1 + fVec0[(i - 1)])); + + } + /* Vectorizable loop 2 */ + /* Pre code */ + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + iVec1_tmp[j12] = iVec1_perm[j12]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iVec1[i] = 1; + + } + /* Post code */ + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + iVec1_perm[j13] = iVec1_tmp[(vsize + j13)]; + + } + /* Vectorizable loop 3 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec2[i] = std::sin(fZec1[i]); + + } + /* Vectorizable loop 4 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec3[i] = std::cos(fZec1[i]); + + } + /* Vectorizable loop 5 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec4[i] = (1 - iVec1[(i - 1)]); + + } + /* Vectorizable loop 6 */ + /* Pre code */ + for (int j22 = 0; (j22 < 4); j22 = (j22 + 1)) { + fVec4_tmp[j22] = fVec4_perm[j22]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec4[i] = fSlow8; + + } + /* Post code */ + for (int j23 = 0; (j23 < 4); j23 = (j23 + 1)) { + fVec4_perm[j23] = fVec4_tmp[(vsize + j23)]; + + } + /* Recursive loop 7 */ + /* Pre code */ + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec43_tmp[j10] = fRec43_perm[j10]; + + } + for (int j14 = 0; (j14 < 4); j14 = (j14 + 1)) { + fRec44_tmp[j14] = fRec44_perm[j14]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec43[i] = ((fRec44[(i - 1)] * fZec2[i]) + (fRec43[(i - 1)] * fZec3[i])); + fRec44[i] = ((float(iZec4[i]) + (fRec44[(i - 1)] * fZec3[i])) - (fRec43[(i - 1)] * fZec2[i])); + + } + /* Post code */ + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec43_perm[j11] = fRec43_tmp[(vsize + j11)]; + + } + for (int j15 = 0; (j15 < 4); j15 = (j15 + 1)) { + fRec44_perm[j15] = fRec44_tmp[(vsize + j15)]; + + } + /* Vectorizable loop 8 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec9[i] = (fSlow8 + fVec4[(i - 1)]); + + } + /* Vectorizable loop 9 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec10[i] = (fConst2 * ((fRec43[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 10 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec28[i] = (fConst2 * ((fRec44[i] + 1.0f) * fZec9[i])); + + } + /* Vectorizable loop 11 */ + /* Pre code */ + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fVec2_tmp[j18] = fVec2_perm[j18]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec2[i] = fSlow6; + + } + /* Post code */ + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fVec2_perm[j19] = fVec2_tmp[(vsize + j19)]; + + } + /* Vectorizable loop 12 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec11[i] = (fZec10[i] + 8.50000477f); + + } + /* Vectorizable loop 13 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec29[i] = (fZec28[i] + 8.50000477f); + + } + /* Recursive loop 14 */ + /* Pre code */ + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fRec45_tmp[j16] = fRec45_perm[j16]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec45[i] = (fSlow5 + (0.999899983f * (fRec45[(i - 1)] + float((iSlow4 * iZec4[i]))))); + + } + /* Post code */ + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fRec45_perm[j17] = fRec45_tmp[(vsize + j17)]; + + } + /* Vectorizable loop 15 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec5[i] = (0.5f * (fSlow6 + fVec2[(i - 1)])); + + } + /* Vectorizable loop 16 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec13[i] = std::floor(fZec11[i]); + + } + /* Recursive loop 17 */ + /* Pre code */ + for (int j30 = 0; (j30 < 4); j30 = (j30 + 1)) { + fRec47_tmp[j30] = fRec47_perm[j30]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec47[i] = (fSlow10 + (0.999899983f * (fRec47[(i - 1)] + float((iSlow9 * iZec4[i]))))); + + } + /* Post code */ + for (int j31 = 0; (j31 < 4); j31 = (j31 + 1)) { + fRec47_perm[j31] = fRec47_tmp[(vsize + j31)]; + + } + /* Vectorizable loop 18 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec31[i] = std::floor(fZec29[i]); + + } + /* Recursive loop 19 */ + /* Pre code */ + for (int j38 = 0; (j38 < 4); j38 = (j38 + 1)) { + fRec48_tmp[j38] = fRec48_perm[j38]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec48[i] = (fSlow13 + (0.999000013f * (fRec48[(i - 1)] + float((iSlow12 * iZec4[i]))))); + + } + /* Post code */ + for (int j39 = 0; (j39 < 4); j39 = (j39 + 1)) { + fRec48_perm[j39] = fRec48_tmp[(vsize + j39)]; + + } + /* Recursive loop 20 */ + /* Pre code */ + for (int j46 = 0; (j46 < 4); j46 = (j46 + 1)) { + fRec50_tmp[j46] = fRec50_perm[j46]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec50[i] = (fSlow15 + (0.999000013f * (fRec50[(i - 1)] + float((iSlow14 * iZec4[i]))))); + + } + /* Post code */ + for (int j47 = 0; (j47 < 4); j47 = (j47 + 1)) { + fRec50_perm[j47] = fRec50_tmp[(vsize + j47)]; + + } + /* Recursive loop 21 */ + /* Pre code */ + for (int j54 = 0; (j54 < 4); j54 = (j54 + 1)) { + fRec51_tmp[j54] = fRec51_perm[j54]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec51[i] = (fSlow18 + (0.999000013f * (fRec51[(i - 1)] + float((iSlow17 * iZec4[i]))))); + + } + /* Post code */ + for (int j55 = 0; (j55 < 4); j55 = (j55 + 1)) { + fRec51_perm[j55] = fRec51_tmp[(vsize + j55)]; + + } + /* Recursive loop 22 */ + /* Pre code */ + for (int j62 = 0; (j62 < 4); j62 = (j62 + 1)) { + fRec53_tmp[j62] = fRec53_perm[j62]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec53[i] = (fSlow20 + (0.999000013f * (fRec53[(i - 1)] + float((iSlow19 * iZec4[i]))))); + + } + /* Post code */ + for (int j63 = 0; (j63 < 4); j63 = (j63 + 1)) { + fRec53_perm[j63] = fRec53_tmp[(vsize + j63)]; + + } + /* Recursive loop 23 */ + /* Pre code */ + for (int j70 = 0; (j70 < 4); j70 = (j70 + 1)) { + fRec54_tmp[j70] = fRec54_perm[j70]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec54[i] = (fSlow22 + (0.999000013f * (fRec54[(i - 1)] + float((iSlow21 * iZec4[i]))))); + + } + /* Post code */ + for (int j71 = 0; (j71 < 4); j71 = (j71 + 1)) { + fRec54_perm[j71] = fRec54_tmp[(vsize + j71)]; + + } + /* Recursive loop 24 */ + /* Pre code */ + for (int j78 = 0; (j78 < 4); j78 = (j78 + 1)) { + fRec56_tmp[j78] = fRec56_perm[j78]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec56[i] = (fSlow24 + (0.999000013f * (fRec56[(i - 1)] + float((iSlow23 * iZec4[i]))))); + + } + /* Post code */ + for (int j79 = 0; (j79 < 4); j79 = (j79 + 1)) { + fRec56_perm[j79] = fRec56_tmp[(vsize + j79)]; + + } + /* Recursive loop 25 */ + /* Pre code */ + for (int j86 = 0; (j86 < 4); j86 = (j86 + 1)) { + fRec57_tmp[j86] = fRec57_perm[j86]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec57[i] = (fSlow27 + (0.999899983f * (fRec57[(i - 1)] + float((iSlow26 * iZec4[i]))))); + + } + /* Post code */ + for (int j87 = 0; (j87 < 4); j87 = (j87 + 1)) { + fRec57_perm[j87] = fRec57_tmp[(vsize + j87)]; + + } + /* Recursive loop 26 */ + /* Pre code */ + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fRec59_tmp[j94] = fRec59_perm[j94]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec59[i] = (fSlow29 + (0.999899983f * (fRec59[(i - 1)] + float((iSlow28 * iZec4[i]))))); + + } + /* Post code */ + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fRec59_perm[j95] = fRec59_tmp[(vsize + j95)]; + + } + /* Recursive loop 27 */ + /* Pre code */ + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec60_tmp[j102] = fRec60_perm[j102]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec60[i] = (fSlow32 + (0.999000013f * (fRec60[(i - 1)] + float((iSlow31 * iZec4[i]))))); + + } + /* Post code */ + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec60_perm[j103] = fRec60_tmp[(vsize + j103)]; + + } + /* Recursive loop 28 */ + /* Pre code */ + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec62_tmp[j110] = fRec62_perm[j110]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec62[i] = (fSlow34 + (0.999000013f * (fRec62[(i - 1)] + float((iSlow33 * iZec4[i]))))); + + } + /* Post code */ + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec62_perm[j111] = fRec62_tmp[(vsize + j111)]; + + } + /* Recursive loop 29 */ + /* Pre code */ + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec63_tmp[j118] = fRec63_perm[j118]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec63[i] = (fSlow37 + (0.999000013f * (fRec63[(i - 1)] + float((iSlow36 * iZec4[i]))))); + + } + /* Post code */ + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec63_perm[j119] = fRec63_tmp[(vsize + j119)]; + + } + /* Recursive loop 30 */ + /* Pre code */ + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec65_tmp[j126] = fRec65_perm[j126]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec65[i] = (fSlow39 + (0.999000013f * (fRec65[(i - 1)] + float((iSlow38 * iZec4[i]))))); + + } + /* Post code */ + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec65_perm[j127] = fRec65_tmp[(vsize + j127)]; + + } + /* Recursive loop 31 */ + /* Pre code */ + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec66_tmp[j134] = fRec66_perm[j134]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec66[i] = (fSlow42 + (0.999000013f * (fRec66[(i - 1)] + float((iSlow41 * iZec4[i]))))); + + } + /* Post code */ + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec66_perm[j135] = fRec66_tmp[(vsize + j135)]; + + } + /* Recursive loop 32 */ + /* Pre code */ + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec68_tmp[j142] = fRec68_perm[j142]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec68[i] = (fSlow44 + (0.999000013f * (fRec68[(i - 1)] + float((iSlow43 * iZec4[i]))))); + + } + /* Post code */ + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec68_perm[j143] = fRec68_tmp[(vsize + j143)]; + + } + /* Recursive loop 33 */ + /* Pre code */ + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec69_tmp[j150] = fRec69_perm[j150]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec69[i] = (fSlow47 + (0.999899983f * (fRec69[(i - 1)] + float((iSlow46 * iZec4[i]))))); + + } + /* Post code */ + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec69_perm[j151] = fRec69_tmp[(vsize + j151)]; + + } + /* Recursive loop 34 */ + /* Pre code */ + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec71_tmp[j158] = fRec71_perm[j158]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec71[i] = (fSlow49 + (0.999899983f * (fRec71[(i - 1)] + float((iSlow48 * iZec4[i]))))); + + } + /* Post code */ + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec71_perm[j159] = fRec71_tmp[(vsize + j159)]; + + } + /* Recursive loop 35 */ + /* Pre code */ + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec72_tmp[j166] = fRec72_perm[j166]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec72[i] = (fSlow52 + (0.999000013f * (fRec72[(i - 1)] + float((iSlow51 * iZec4[i]))))); + + } + /* Post code */ + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec72_perm[j167] = fRec72_tmp[(vsize + j167)]; + + } + /* Recursive loop 36 */ + /* Pre code */ + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec74_tmp[j174] = fRec74_perm[j174]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec74[i] = (fSlow54 + (0.999000013f * (fRec74[(i - 1)] + float((iSlow53 * iZec4[i]))))); + + } + /* Post code */ + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec74_perm[j175] = fRec74_tmp[(vsize + j175)]; + + } + /* Recursive loop 37 */ + /* Pre code */ + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec75_tmp[j182] = fRec75_perm[j182]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec75[i] = (fSlow57 + (0.999000013f * (fRec75[(i - 1)] + float((iSlow56 * iZec4[i]))))); + + } + /* Post code */ + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec75_perm[j183] = fRec75_tmp[(vsize + j183)]; + + } + /* Recursive loop 38 */ + /* Pre code */ + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec77_tmp[j190] = fRec77_perm[j190]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec77[i] = (fSlow59 + (0.999000013f * (fRec77[(i - 1)] + float((iSlow58 * iZec4[i]))))); + + } + /* Post code */ + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec77_perm[j191] = fRec77_tmp[(vsize + j191)]; + + } + /* Recursive loop 39 */ + /* Pre code */ + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fRec78_tmp[j198] = fRec78_perm[j198]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec78[i] = (fSlow62 + (0.999000013f * (fRec78[(i - 1)] + float((iSlow61 * iZec4[i]))))); + + } + /* Post code */ + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fRec78_perm[j199] = fRec78_tmp[(vsize + j199)]; + + } + /* Recursive loop 40 */ + /* Pre code */ + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec80_tmp[j206] = fRec80_perm[j206]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec80[i] = (fSlow64 + (0.999000013f * (fRec80[(i - 1)] + float((iSlow63 * iZec4[i]))))); + + } + /* Post code */ + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec80_perm[j207] = fRec80_tmp[(vsize + j207)]; + + } + /* Vectorizable loop 41 */ + /* Pre code */ + for (int j214 = 0; (j214 < 4); j214 = (j214 + 1)) { + fVec5_tmp[j214] = fVec5_perm[j214]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec5[i] = fSlow65; + + } + /* Post code */ + for (int j215 = 0; (j215 < 4); j215 = (j215 + 1)) { + fVec5_perm[j215] = fVec5_tmp[(vsize + j215)]; + + } + /* Recursive loop 42 */ + /* Pre code */ + for (int j0 = 0; (j0 < 4); j0 = (j0 + 1)) { + fRec39_tmp[j0] = fRec39_perm[j0]; + + } + for (int j2 = 0; (j2 < 4); j2 = (j2 + 1)) { + fRec40_tmp[j2] = fRec40_perm[j2]; + + } + for (int j4 = 0; (j4 < 4); j4 = (j4 + 1)) { + fRec41_tmp[j4] = fRec41_perm[j4]; + + } + for (int j6 = 0; (j6 < 4); j6 = (j6 + 1)) { + fRec42_tmp[j6] = fRec42_perm[j6]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec0[i] = ((fRec39[(i - 1)] != 0.0f)?(((fRec40[(i - 1)] > 0.0f) & (fRec40[(i - 1)] < 1.0f))?fRec39[(i - 1)]:0.0f):(((fRec40[(i - 1)] == 0.0f) & (fSlow0 != fRec41[(i - 1)]))?4.53514731e-05f:(((fRec40[(i - 1)] == 1.0f) & (fSlow0 != fRec42[(i - 1)]))?-4.53514731e-05f:0.0f))); + fRec39[i] = fZec0[i]; + fRec40[i] = std::max(0.0f, std::min(1.0f, (fRec40[(i - 1)] + fZec0[i]))); + fRec41[i] = (((fRec40[(i - 1)] >= 1.0f) & (fRec42[(i - 1)] != fSlow0))?fSlow0:fRec41[(i - 1)]); + fRec42[i] = (((fRec40[(i - 1)] <= 0.0f) & (fRec41[(i - 1)] != fSlow0))?fSlow0:fRec42[(i - 1)]); + + } + /* Post code */ + for (int j1 = 0; (j1 < 4); j1 = (j1 + 1)) { + fRec39_perm[j1] = fRec39_tmp[(vsize + j1)]; + + } + for (int j3 = 0; (j3 < 4); j3 = (j3 + 1)) { + fRec40_perm[j3] = fRec40_tmp[(vsize + j3)]; + + } + for (int j5 = 0; (j5 < 4); j5 = (j5 + 1)) { + fRec41_perm[j5] = fRec41_tmp[(vsize + j5)]; + + } + for (int j7 = 0; (j7 < 4); j7 = (j7 + 1)) { + fRec42_perm[j7] = fRec42_tmp[(vsize + j7)]; + + } + /* Vectorizable loop 43 */ + /* Pre code */ + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fVec3_tmp[j20] = fVec3_perm[j20]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fVec3[i] = fSlow7; + + } + /* Post code */ + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fVec3_perm[j21] = fVec3_tmp[(vsize + j21)]; + + } + /* Vectorizable loop 44 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec14[i] = (fZec10[i] + (9.0f - fZec13[i])); + + } + /* Vectorizable loop 45 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec15[i] = (fZec10[i] + (8.0f - fZec13[i])); + + } + /* Vectorizable loop 46 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec26[i] = (fRec45[i] + -1.49998999f); + + } + /* Vectorizable loop 47 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec32[i] = (fZec28[i] + (9.0f - fZec31[i])); + + } + /* Vectorizable loop 48 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec33[i] = (fZec28[i] + (8.0f - fZec31[i])); + + } + /* Vectorizable loop 49 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec41[i] = (fRec47[i] + -1.49998999f); + + } + /* Vectorizable loop 50 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec43[i] = (fRec48[i] + -1.49998999f); + + } + /* Vectorizable loop 51 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (fRec50[i] + -1.49998999f); + + } + /* Vectorizable loop 52 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (fRec51[i] + -1.49998999f); + + } + /* Vectorizable loop 53 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (fRec53[i] + -1.49998999f); + + } + /* Vectorizable loop 54 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (fRec54[i] + -1.49998999f); + + } + /* Vectorizable loop 55 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec53[i] = (fRec56[i] + -1.49998999f); + + } + /* Vectorizable loop 56 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - fZec5[i]); + + } + /* Vectorizable loop 57 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (fRec57[i] + -1.49998999f); + + } + /* Vectorizable loop 58 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec68[i] = (fRec59[i] + -1.49998999f); + + } + /* Vectorizable loop 59 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec70[i] = (fRec60[i] + -1.49998999f); + + } + /* Vectorizable loop 60 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec72[i] = (fRec62[i] + -1.49998999f); + + } + /* Vectorizable loop 61 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fRec63[i] + -1.49998999f); + + } + /* Vectorizable loop 62 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec76[i] = (fRec65[i] + -1.49998999f); + + } + /* Vectorizable loop 63 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec78[i] = (fRec66[i] + -1.49998999f); + + } + /* Vectorizable loop 64 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec80[i] = (fRec68[i] + -1.49998999f); + + } + /* Vectorizable loop 65 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec86[i] = (fRec69[i] + -1.49998999f); + + } + /* Vectorizable loop 66 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec92[i] = (fRec71[i] + -1.49998999f); + + } + /* Vectorizable loop 67 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec72[i] + -1.49998999f); + + } + /* Vectorizable loop 68 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec96[i] = (fRec74[i] + -1.49998999f); + + } + /* Vectorizable loop 69 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec98[i] = (fRec75[i] + -1.49998999f); + + } + /* Vectorizable loop 70 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = (fRec77[i] + -1.49998999f); + + } + /* Vectorizable loop 71 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec102[i] = (fRec78[i] + -1.49998999f); + + } + /* Vectorizable loop 72 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fRec80[i] + -1.49998999f); + + } + /* Vectorizable loop 73 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec106[i] = (fSlow65 + fVec5[(i - 1)]); + + } + /* Vectorizable loop 74 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec6[i] = std::cos(fZec5[i]); + + } + /* Vectorizable loop 75 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec7[i] = (fSlow7 + fVec3[(i - 1)]); + + } + /* Vectorizable loop 76 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec8[i] = (1.0f - fRec40[i]); + + } + /* Vectorizable loop 77 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec12[i] = int(fZec11[i]); + + } + /* Vectorizable loop 78 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec16[i] = (fZec10[i] + (7.0f - fZec13[i])); + + } + /* Vectorizable loop 79 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec17[i] = (fZec10[i] + (6.0f - fZec13[i])); + + } + /* Vectorizable loop 80 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec18[i] = (fZec14[i] * fZec15[i]); + + } + /* Vectorizable loop 81 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec22[i] = std::sin(fZec5[i]); + + } + /* Vectorizable loop 82 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec19[i] = int(std::min(65536.0f, std::max(0.0f, fRec41[i]))); + + } + /* Vectorizable loop 83 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec20[i] = int(std::min(65536.0f, std::max(0.0f, fRec42[i]))); + + } + /* Vectorizable loop 84 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec36[i] = (fZec32[i] * fZec33[i]); + + } + /* Vectorizable loop 85 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec27[i] = std::floor(fZec26[i]); + + } + /* Vectorizable loop 86 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec30[i] = int(fZec29[i]); + + } + /* Vectorizable loop 87 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec34[i] = (fZec28[i] + (7.0f - fZec31[i])); + + } + /* Vectorizable loop 88 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec35[i] = (fZec28[i] + (6.0f - fZec31[i])); + + } + /* Vectorizable loop 89 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec42[i] = std::floor(fZec41[i]); + + } + /* Vectorizable loop 90 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec44[i] = std::floor(fZec43[i]); + + } + /* Vectorizable loop 91 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec46[i] = std::floor(fZec45[i]); + + } + /* Vectorizable loop 92 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec48[i] = std::floor(fZec47[i]); + + } + /* Vectorizable loop 93 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec50[i] = std::floor(fZec49[i]); + + } + /* Vectorizable loop 94 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = std::floor(fZec51[i]); + + } + /* Vectorizable loop 95 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = std::floor(fZec53[i]); + + } + /* Vectorizable loop 96 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = std::cos(fZec55[i]); + + } + /* Vectorizable loop 97 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = std::sin(fZec55[i]); + + } + /* Vectorizable loop 98 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = std::floor(fZec62[i]); + + } + /* Vectorizable loop 99 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec69[i] = std::floor(fZec68[i]); + + } + /* Vectorizable loop 100 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec71[i] = std::floor(fZec70[i]); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = std::floor(fZec72[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = std::floor(fZec74[i]); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec79[i] = std::floor(fZec78[i]); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec87[i] = std::floor(fZec86[i]); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = std::floor(fZec92[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec95[i] = std::floor(fZec94[i]); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec97[i] = std::floor(fZec96[i]); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec99[i] = std::floor(fZec98[i]); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec101[i] = std::floor(fZec100[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec103[i] = std::floor(fZec102[i]); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = std::floor(fZec104[i]); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec107[i] = (1.0f - (0.5f * fZec106[i])); + + } + /* Recursive loop 115 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 131071); + fYec1_idx = ((fYec1_idx + fYec1_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec2_tmp[j24] = fYec2_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec38_tmp[j26] = fRec38_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec36_tmp[j28] = fRec36_perm[j28]; + + } + fYec3_idx = ((fYec3_idx + fYec3_idx_save) & 131071); + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec5_tmp[j32] = fYec5_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec46_tmp[j34] = fRec46_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec37_tmp[j36] = fRec37_perm[j36]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec7_tmp[j40] = fYec7_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec35_tmp[j42] = fRec35_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec33_tmp[j44] = fRec33_perm[j44]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec9_tmp[j48] = fYec9_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec49_tmp[j50] = fRec49_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec34_tmp[j52] = fRec34_perm[j52]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec11_tmp[j56] = fYec11_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec32_tmp[j58] = fRec32_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec30_tmp[j60] = fRec30_perm[j60]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec13_tmp[j64] = fYec13_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec52_tmp[j66] = fRec52_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec31_tmp[j68] = fRec31_perm[j68]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec15_tmp[j72] = fYec15_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec29_tmp[j74] = fRec29_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec27_tmp[j76] = fRec27_perm[j76]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec17_tmp[j80] = fYec17_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec55_tmp[j82] = fRec55_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec28_tmp[j84] = fRec28_perm[j84]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec19_tmp[j88] = fYec19_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec26_tmp[j90] = fRec26_perm[j90]; + + } + for (int j92 = 0; (j92 < 4); j92 = (j92 + 1)) { + fRec24_tmp[j92] = fRec24_perm[j92]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 16383); + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fYec21_tmp[j96] = fYec21_perm[j96]; + + } + for (int j98 = 0; (j98 < 4); j98 = (j98 + 1)) { + fRec58_tmp[j98] = fRec58_perm[j98]; + + } + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fRec25_tmp[j100] = fRec25_perm[j100]; + + } + fYec22_idx = ((fYec22_idx + fYec22_idx_save) & 16383); + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fYec23_tmp[j104] = fYec23_perm[j104]; + + } + for (int j106 = 0; (j106 < 4); j106 = (j106 + 1)) { + fRec23_tmp[j106] = fRec23_perm[j106]; + + } + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fRec21_tmp[j108] = fRec21_perm[j108]; + + } + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fYec25_tmp[j112] = fYec25_perm[j112]; + + } + for (int j114 = 0; (j114 < 4); j114 = (j114 + 1)) { + fRec61_tmp[j114] = fRec61_perm[j114]; + + } + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fRec22_tmp[j116] = fRec22_perm[j116]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fYec27_tmp[j120] = fYec27_perm[j120]; + + } + for (int j122 = 0; (j122 < 4); j122 = (j122 + 1)) { + fRec20_tmp[j122] = fRec20_perm[j122]; + + } + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fRec18_tmp[j124] = fRec18_perm[j124]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fYec29_tmp[j128] = fYec29_perm[j128]; + + } + for (int j130 = 0; (j130 < 4); j130 = (j130 + 1)) { + fRec64_tmp[j130] = fRec64_perm[j130]; + + } + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fRec19_tmp[j132] = fRec19_perm[j132]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fYec31_tmp[j136] = fYec31_perm[j136]; + + } + for (int j138 = 0; (j138 < 4); j138 = (j138 + 1)) { + fRec17_tmp[j138] = fRec17_perm[j138]; + + } + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fRec15_tmp[j140] = fRec15_perm[j140]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fYec33_tmp[j144] = fYec33_perm[j144]; + + } + for (int j146 = 0; (j146 < 4); j146 = (j146 + 1)) { + fRec67_tmp[j146] = fRec67_perm[j146]; + + } + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fRec16_tmp[j148] = fRec16_perm[j148]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fYec35_tmp[j152] = fYec35_perm[j152]; + + } + for (int j154 = 0; (j154 < 4); j154 = (j154 + 1)) { + fRec14_tmp[j154] = fRec14_perm[j154]; + + } + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fRec12_tmp[j156] = fRec12_perm[j156]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fYec37_tmp[j160] = fYec37_perm[j160]; + + } + for (int j162 = 0; (j162 < 4); j162 = (j162 + 1)) { + fRec70_tmp[j162] = fRec70_perm[j162]; + + } + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fRec13_tmp[j164] = fRec13_perm[j164]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fYec39_tmp[j168] = fYec39_perm[j168]; + + } + for (int j170 = 0; (j170 < 4); j170 = (j170 + 1)) { + fRec11_tmp[j170] = fRec11_perm[j170]; + + } + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fRec9_tmp[j172] = fRec9_perm[j172]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fYec41_tmp[j176] = fYec41_perm[j176]; + + } + for (int j178 = 0; (j178 < 4); j178 = (j178 + 1)) { + fRec73_tmp[j178] = fRec73_perm[j178]; + + } + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fRec10_tmp[j180] = fRec10_perm[j180]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fYec43_tmp[j184] = fYec43_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec8_tmp[j186] = fRec8_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec6_tmp[j188] = fRec6_perm[j188]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fYec45_tmp[j192] = fYec45_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec76_tmp[j194] = fRec76_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec7_tmp[j196] = fRec7_perm[j196]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fYec47_tmp[j200] = fYec47_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec5_tmp[j202] = fRec5_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec3_tmp[j204] = fRec3_perm[j204]; + + } + fYec48_idx = ((fYec48_idx + fYec48_idx_save) & 16383); + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fYec49_tmp[j208] = fYec49_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec79_tmp[j210] = fRec79_perm[j210]; + + } + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec4_tmp[j212] = fRec4_perm[j212]; + + } + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fRec2_tmp[j216] = fRec2_perm[j216]; + + } + fRec0_idx = ((fRec0_idx + fRec0_idx_save) & 1023); + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec81_tmp[j218] = fRec81_perm[j218]; + + } + fRec1_idx = ((fRec1_idx + fRec1_idx_save) & 1023); + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fYec0[((i + fYec0_idx) & 131071)] = (((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, iZec12[i])) + 1)) & 1023)] * (0.0f - fZec14[i])) * (0.0f - (0.5f * fZec15[i]))) * (0.0f - (0.333333343f * fZec16[i]))) * (0.0f - (0.25f * fZec17[i]))) + ((fZec10[i] + (10.0f - fZec13[i])) * ((((((fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 1))) + 1)) & 1023)] * (0.0f - fZec15[i])) * (0.0f - (0.5f * fZec16[i]))) * (0.0f - (0.333333343f * fZec17[i]))) + (0.5f * (((fZec14[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec16[i])) * (0.0f - (0.5f * fZec17[i]))))) + (0.166666672f * ((fZec18[i] * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec17[i])))) + (0.0416666679f * ((fZec18[i] * fZec16[i]) * fRec1[(((i + fRec1_idx) - (std::min(512, std::max(0, (iZec12[i] + 4))) + 1)) & 1023)]))))); + fZec21[i] = ((0.5f * (fZec7[i] * ((fZec8[i] * fYec0[(((i + fYec0_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec0[(((i + fYec0_idx) - iZec20[i]) & 131071)])))) + float(input1[i])); + fZec23[i] = ((fZec6[i] * fZec21[i]) - (fZec22[i] * fRec28[(i - 1)])); + fZec24[i] = ((fZec6[i] * fZec23[i]) - (fZec22[i] * fRec31[(i - 1)])); + fZec25[i] = ((fZec6[i] * fZec24[i]) - (fZec22[i] * fRec34[(i - 1)])); + fYec1[((i + fYec1_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec25[i]) - (fZec22[i] * fRec37[(i - 1)]))); + fYec2[i] = fYec1[(((i + fYec1_idx) - std::min(8192, std::max(0, int(fZec26[i])))) & 16383)]; + fRec38[i] = (fYec2[(i - 1)] - (((fZec27[i] + (2.0f - fRec45[i])) * (fRec38[(i - 1)] - fYec2[i])) / (fRec45[i] - fZec27[i]))); + fRec36[i] = fRec38[i]; + fYec3[((i + fYec3_idx) & 131071)] = (((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, iZec30[i])) + 1)) & 1023)] * (0.0f - fZec32[i])) * (0.0f - (0.5f * fZec33[i]))) * (0.0f - (0.333333343f * fZec34[i]))) * (0.0f - (0.25f * fZec35[i]))) + ((fZec28[i] + (10.0f - fZec31[i])) * ((((((fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 1))) + 1)) & 1023)] * (0.0f - fZec33[i])) * (0.0f - (0.5f * fZec34[i]))) * (0.0f - (0.333333343f * fZec35[i]))) + (0.5f * (((fZec32[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 2))) + 1)) & 1023)]) * (0.0f - fZec34[i])) * (0.0f - (0.5f * fZec35[i]))))) + (0.166666672f * ((fZec36[i] * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 3))) + 1)) & 1023)]) * (0.0f - fZec35[i])))) + (0.0416666679f * ((fZec36[i] * fZec34[i]) * fRec0[(((i + fRec0_idx) - (std::min(512, std::max(0, (iZec30[i] + 4))) + 1)) & 1023)]))))); + fZec37[i] = ((0.5f * (((fZec8[i] * fYec3[(((i + fYec3_idx) - iZec19[i]) & 131071)]) + (fRec40[i] * fYec3[(((i + fYec3_idx) - iZec20[i]) & 131071)])) * fZec7[i])) + float(input0[i])); + fZec38[i] = ((fZec37[i] * fZec6[i]) - (fZec22[i] * fRec27[(i - 1)])); + fZec39[i] = ((fZec6[i] * fZec38[i]) - (fZec22[i] * fRec30[(i - 1)])); + fZec40[i] = ((fZec6[i] * fZec39[i]) - (fZec22[i] * fRec33[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((fZec6[i] * fZec40[i]) - (fZec22[i] * fRec36[(i - 1)])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec41[i])))) & 16383)]; + fRec46[i] = (fYec5[(i - 1)] - (((fZec42[i] + (2.0f - fRec47[i])) * (fRec46[(i - 1)] - fYec5[i])) / (fRec47[i] - fZec42[i]))); + fRec37[i] = fRec46[i]; + fYec6[((i + fYec6_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec37[(i - 1)]) + (fZec22[i] * fZec25[i]))); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec43[i])))) & 16383)]; + fRec35[i] = (fYec7[(i - 1)] - (((fZec44[i] + (2.0f - fRec48[i])) * (fRec35[(i - 1)] - fYec7[i])) / (fRec48[i] - fZec44[i]))); + fRec33[i] = fRec35[i]; + fYec8[((i + fYec8_idx) & 16383)] = ((fRec36[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec40[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec45[i])))) & 16383)]; + fRec49[i] = (fYec9[(i - 1)] - (((fZec46[i] + (2.0f - fRec50[i])) * (fRec49[(i - 1)] - fYec9[i])) / (fRec50[i] - fZec46[i]))); + fRec34[i] = fRec49[i]; + fYec10[((i + fYec10_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec34[(i - 1)]) + (fZec22[i] * fZec24[i]))); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec47[i])))) & 16383)]; + fRec32[i] = (fYec11[(i - 1)] - (((fZec48[i] + (2.0f - fRec51[i])) * (fRec32[(i - 1)] - fYec11[i])) / (fRec51[i] - fZec48[i]))); + fRec30[i] = fRec32[i]; + fYec12[((i + fYec12_idx) & 16383)] = ((fRec33[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec39[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec49[i])))) & 16383)]; + fRec52[i] = (fYec13[(i - 1)] - (((fZec50[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec13[i])) / (fRec53[i] - fZec50[i]))); + fRec31[i] = fRec52[i]; + fYec14[((i + fYec14_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec31[(i - 1)]) + (fZec22[i] * fZec23[i]))); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec51[i])))) & 16383)]; + fRec29[i] = (fYec15[(i - 1)] - (((fZec52[i] + (2.0f - fRec54[i])) * (fRec29[(i - 1)] - fYec15[i])) / (fRec54[i] - fZec52[i]))); + fRec27[i] = fRec29[i]; + fYec16[((i + fYec16_idx) & 16383)] = ((fRec30[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec38[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec53[i])))) & 16383)]; + fRec55[i] = (fYec17[(i - 1)] - (((fZec54[i] + (2.0f - fRec56[i])) * (fRec55[(i - 1)] - fYec17[i])) / (fRec56[i] - fZec54[i]))); + fRec28[i] = fRec55[i]; + fZec57[i] = ((fZec6[i] * fRec28[(i - 1)]) + (fZec22[i] * fZec21[i])); + fZec59[i] = ((fZec56[i] * fZec57[i]) - (fZec58[i] * fRec16[(i - 1)])); + fZec60[i] = ((fZec56[i] * fZec59[i]) - (fZec58[i] * fRec19[(i - 1)])); + fZec61[i] = ((fZec56[i] * fZec60[i]) - (fZec58[i] * fRec22[(i - 1)])); + fYec18[((i + fYec18_idx) & 16383)] = (0.0f - ((fZec56[i] * fZec61[i]) - (fZec58[i] * fRec25[(i - 1)]))); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec62[i])))) & 16383)]; + fRec26[i] = (fYec19[(i - 1)] - (((fZec63[i] + (2.0f - fRec57[i])) * (fRec26[(i - 1)] - fYec19[i])) / (fRec57[i] - fZec63[i]))); + fRec24[i] = fRec26[i]; + fZec64[i] = ((fRec27[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec37[i])); + fZec65[i] = ((fZec64[i] * fZec56[i]) - (fZec58[i] * fRec15[(i - 1)])); + fZec66[i] = ((fZec56[i] * fZec65[i]) - (fZec58[i] * fRec18[(i - 1)])); + fZec67[i] = ((fZec56[i] * fZec66[i]) - (fZec58[i] * fRec21[(i - 1)])); + fYec20[((i + fYec20_idx) & 16383)] = ((fZec56[i] * fZec67[i]) - (fRec24[(i - 1)] * fZec58[i])); + fYec21[i] = fYec20[(((i + fYec20_idx) - std::min(8192, std::max(0, int(fZec68[i])))) & 16383)]; + fRec58[i] = (fYec21[(i - 1)] - (((fZec69[i] + (2.0f - fRec59[i])) * (fRec58[(i - 1)] - fYec21[i])) / (fRec59[i] - fZec69[i]))); + fRec25[i] = fRec58[i]; + fYec22[((i + fYec22_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec25[(i - 1)]) + (fZec58[i] * fZec61[i]))); + fYec23[i] = fYec22[(((i + fYec22_idx) - std::min(8192, std::max(0, int(fZec70[i])))) & 16383)]; + fRec23[i] = (fYec23[(i - 1)] - (((fZec71[i] + (2.0f - fRec60[i])) * (fRec23[(i - 1)] - fYec23[i])) / (fRec60[i] - fZec71[i]))); + fRec21[i] = fRec23[i]; + fYec24[((i + fYec24_idx) & 16383)] = ((fRec24[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec67[i])); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec72[i])))) & 16383)]; + fRec61[i] = (fYec25[(i - 1)] - (((fZec73[i] + (2.0f - fRec62[i])) * (fRec61[(i - 1)] - fYec25[i])) / (fRec62[i] - fZec73[i]))); + fRec22[i] = fRec61[i]; + fYec26[((i + fYec26_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec22[(i - 1)]) + (fZec58[i] * fZec60[i]))); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec74[i])))) & 16383)]; + fRec20[i] = (fYec27[(i - 1)] - (((fZec75[i] + (2.0f - fRec63[i])) * (fRec20[(i - 1)] - fYec27[i])) / (fRec63[i] - fZec75[i]))); + fRec18[i] = fRec20[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((fRec21[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec66[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec64[i] = (fYec29[(i - 1)] - (((fZec77[i] + (2.0f - fRec65[i])) * (fRec64[(i - 1)] - fYec29[i])) / (fRec65[i] - fZec77[i]))); + fRec19[i] = fRec64[i]; + fYec30[((i + fYec30_idx) & 16383)] = (0.0f - ((fZec56[i] * fRec19[(i - 1)]) + (fZec58[i] * fZec59[i]))); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec78[i])))) & 16383)]; + fRec17[i] = (fYec31[(i - 1)] - (((fZec79[i] + (2.0f - fRec66[i])) * (fRec17[(i - 1)] - fYec31[i])) / (fRec66[i] - fZec79[i]))); + fRec15[i] = fRec17[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((fRec18[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec65[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec67[i] = (fYec33[(i - 1)] - (((fZec81[i] + (2.0f - fRec68[i])) * (fRec67[(i - 1)] - fYec33[i])) / (fRec68[i] - fZec81[i]))); + fRec16[i] = fRec67[i]; + fZec82[i] = ((fZec56[i] * fRec16[(i - 1)]) + (fZec58[i] * fZec57[i])); + fZec83[i] = ((fZec6[i] * fZec82[i]) - (fZec22[i] * fRec4[(i - 1)])); + fZec84[i] = ((fZec6[i] * fZec83[i]) - (fZec22[i] * fRec7[(i - 1)])); + fZec85[i] = ((fZec6[i] * fZec84[i]) - (fZec22[i] * fRec10[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = (0.0f - ((fZec6[i] * fZec85[i]) - (fZec22[i] * fRec13[(i - 1)]))); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec86[i])))) & 16383)]; + fRec14[i] = (fYec35[(i - 1)] - (((fZec87[i] + (2.0f - fRec69[i])) * (fRec14[(i - 1)] - fYec35[i])) / (fRec69[i] - fZec87[i]))); + fRec12[i] = fRec14[i]; + fZec88[i] = ((fRec15[(i - 1)] * fZec56[i]) + (fZec58[i] * fZec64[i])); + fZec89[i] = ((fZec6[i] * fZec88[i]) - (fZec22[i] * fRec3[(i - 1)])); + fZec90[i] = ((fZec6[i] * fZec89[i]) - (fZec22[i] * fRec6[(i - 1)])); + fZec91[i] = ((fZec6[i] * fZec90[i]) - (fZec22[i] * fRec9[(i - 1)])); + fYec36[((i + fYec36_idx) & 16383)] = ((fZec6[i] * fZec91[i]) - (fRec12[(i - 1)] * fZec22[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - std::min(8192, std::max(0, int(fZec92[i])))) & 16383)]; + fRec70[i] = (fYec37[(i - 1)] - (((fZec93[i] + (2.0f - fRec71[i])) * (fRec70[(i - 1)] - fYec37[i])) / (fRec71[i] - fZec93[i]))); + fRec13[i] = fRec70[i]; + fYec38[((i + fYec38_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec13[(i - 1)]) + (fZec22[i] * fZec85[i]))); + fYec39[i] = fYec38[(((i + fYec38_idx) - std::min(8192, std::max(0, int(fZec94[i])))) & 16383)]; + fRec11[i] = (fYec39[(i - 1)] - (((fZec95[i] + (2.0f - fRec72[i])) * (fRec11[(i - 1)] - fYec39[i])) / (fRec72[i] - fZec95[i]))); + fRec9[i] = fRec11[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((fRec12[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec91[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - std::min(8192, std::max(0, int(fZec96[i])))) & 16383)]; + fRec73[i] = (fYec41[(i - 1)] - (((fZec97[i] + (2.0f - fRec74[i])) * (fRec73[(i - 1)] - fYec41[i])) / (fRec74[i] - fZec97[i]))); + fRec10[i] = fRec73[i]; + fYec42[((i + fYec42_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec10[(i - 1)]) + (fZec22[i] * fZec84[i]))); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec98[i])))) & 16383)]; + fRec8[i] = (fYec43[(i - 1)] - (((fZec99[i] + (2.0f - fRec75[i])) * (fRec8[(i - 1)] - fYec43[i])) / (fRec75[i] - fZec99[i]))); + fRec6[i] = fRec8[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((fRec9[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec90[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - std::min(8192, std::max(0, int(fZec100[i])))) & 16383)]; + fRec76[i] = (fYec45[(i - 1)] - (((fZec101[i] + (2.0f - fRec77[i])) * (fRec76[(i - 1)] - fYec45[i])) / (fRec77[i] - fZec101[i]))); + fRec7[i] = fRec76[i]; + fYec46[((i + fYec46_idx) & 16383)] = (0.0f - ((fZec6[i] * fRec7[(i - 1)]) + (fZec22[i] * fZec83[i]))); + fYec47[i] = fYec46[(((i + fYec46_idx) - std::min(8192, std::max(0, int(fZec102[i])))) & 16383)]; + fRec5[i] = (fYec47[(i - 1)] - (((fZec103[i] + (2.0f - fRec78[i])) * (fRec5[(i - 1)] - fYec47[i])) / (fRec78[i] - fZec103[i]))); + fRec3[i] = fRec5[i]; + fYec48[((i + fYec48_idx) & 16383)] = ((fRec6[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec89[i])); + fYec49[i] = fYec48[(((i + fYec48_idx) - std::min(8192, std::max(0, int(fZec104[i])))) & 16383)]; + fRec79[i] = (fYec49[(i - 1)] - (((fZec105[i] + (2.0f - fRec80[i])) * (fRec79[(i - 1)] - fYec49[i])) / (fRec80[i] - fZec105[i]))); + fRec4[i] = fRec79[i]; + fRec2[i] = ((0.5f * (fRec2[(i - 1)] * fZec106[i])) + (((fRec3[(i - 1)] * fZec6[i]) + (fZec22[i] * fZec88[i])) * fZec107[i])); + fRec0[((i + fRec0_idx) & 1023)] = fRec2[i]; + fRec81[i] = ((0.5f * (fRec81[(i - 1)] * fZec106[i])) + (fZec107[i] * ((fZec6[i] * fRec4[(i - 1)]) + (fZec22[i] * fZec82[i])))); + fRec1[((i + fRec1_idx) & 1023)] = fRec81[i]; + + } + /* Post code */ + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec81_perm[j219] = fRec81_tmp[(vsize + j219)]; + + } + fYec48_idx_save = vsize; + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fYec49_perm[j209] = fYec49_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec79_perm[j211] = fRec79_tmp[(vsize + j211)]; + + } + fYec46_idx_save = vsize; + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fYec47_perm[j201] = fYec47_tmp[(vsize + j201)]; + + } + fYec44_idx_save = vsize; + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fYec45_perm[j193] = fYec45_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec76_perm[j195] = fRec76_tmp[(vsize + j195)]; + + } + fYec42_idx_save = vsize; + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fYec43_perm[j185] = fYec43_tmp[(vsize + j185)]; + + } + fYec40_idx_save = vsize; + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fYec41_perm[j177] = fYec41_tmp[(vsize + j177)]; + + } + for (int j179 = 0; (j179 < 4); j179 = (j179 + 1)) { + fRec73_perm[j179] = fRec73_tmp[(vsize + j179)]; + + } + fYec38_idx_save = vsize; + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fYec39_perm[j169] = fYec39_tmp[(vsize + j169)]; + + } + fYec36_idx_save = vsize; + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fYec37_perm[j161] = fYec37_tmp[(vsize + j161)]; + + } + for (int j163 = 0; (j163 < 4); j163 = (j163 + 1)) { + fRec70_perm[j163] = fRec70_tmp[(vsize + j163)]; + + } + fYec34_idx_save = vsize; + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fYec35_perm[j153] = fYec35_tmp[(vsize + j153)]; + + } + fYec32_idx_save = vsize; + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fYec33_perm[j145] = fYec33_tmp[(vsize + j145)]; + + } + for (int j147 = 0; (j147 < 4); j147 = (j147 + 1)) { + fRec67_perm[j147] = fRec67_tmp[(vsize + j147)]; + + } + fYec30_idx_save = vsize; + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fYec31_perm[j137] = fYec31_tmp[(vsize + j137)]; + + } + fYec28_idx_save = vsize; + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fYec29_perm[j129] = fYec29_tmp[(vsize + j129)]; + + } + for (int j131 = 0; (j131 < 4); j131 = (j131 + 1)) { + fRec64_perm[j131] = fRec64_tmp[(vsize + j131)]; + + } + fYec26_idx_save = vsize; + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fYec27_perm[j121] = fYec27_tmp[(vsize + j121)]; + + } + fYec24_idx_save = vsize; + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fYec25_perm[j113] = fYec25_tmp[(vsize + j113)]; + + } + for (int j115 = 0; (j115 < 4); j115 = (j115 + 1)) { + fRec61_perm[j115] = fRec61_tmp[(vsize + j115)]; + + } + fYec22_idx_save = vsize; + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fYec23_perm[j105] = fYec23_tmp[(vsize + j105)]; + + } + fYec20_idx_save = vsize; + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fYec21_perm[j97] = fYec21_tmp[(vsize + j97)]; + + } + for (int j99 = 0; (j99 < 4); j99 = (j99 + 1)) { + fRec58_perm[j99] = fRec58_tmp[(vsize + j99)]; + + } + fYec18_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec19_perm[j89] = fYec19_tmp[(vsize + j89)]; + + } + fYec16_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec17_perm[j81] = fYec17_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec55_perm[j83] = fRec55_tmp[(vsize + j83)]; + + } + fYec14_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec15_perm[j73] = fYec15_tmp[(vsize + j73)]; + + } + fYec12_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec13_perm[j65] = fYec13_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec52_perm[j67] = fRec52_tmp[(vsize + j67)]; + + } + fYec10_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec11_perm[j57] = fYec11_tmp[(vsize + j57)]; + + } + fYec8_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec9_perm[j49] = fYec9_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec49_perm[j51] = fRec49_tmp[(vsize + j51)]; + + } + fYec6_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec7_perm[j41] = fYec7_tmp[(vsize + j41)]; + + } + fYec3_idx_save = vsize; + fYec4_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec5_perm[j33] = fYec5_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec46_perm[j35] = fRec46_tmp[(vsize + j35)]; + + } + fYec0_idx_save = vsize; + fYec1_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec2_perm[j25] = fYec2_tmp[(vsize + j25)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec38_perm[j27] = fRec38_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec36_perm[j29] = fRec36_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec37_perm[j37] = fRec37_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec35_perm[j43] = fRec35_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec33_perm[j45] = fRec33_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec34_perm[j53] = fRec34_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec32_perm[j59] = fRec32_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec30_perm[j61] = fRec30_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec31_perm[j69] = fRec31_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec29_perm[j75] = fRec29_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec27_perm[j77] = fRec27_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec28_perm[j85] = fRec28_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec26_perm[j91] = fRec26_tmp[(vsize + j91)]; + + } + for (int j93 = 0; (j93 < 4); j93 = (j93 + 1)) { + fRec24_perm[j93] = fRec24_tmp[(vsize + j93)]; + + } + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fRec25_perm[j101] = fRec25_tmp[(vsize + j101)]; + + } + for (int j107 = 0; (j107 < 4); j107 = (j107 + 1)) { + fRec23_perm[j107] = fRec23_tmp[(vsize + j107)]; + + } + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fRec21_perm[j109] = fRec21_tmp[(vsize + j109)]; + + } + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fRec22_perm[j117] = fRec22_tmp[(vsize + j117)]; + + } + for (int j123 = 0; (j123 < 4); j123 = (j123 + 1)) { + fRec20_perm[j123] = fRec20_tmp[(vsize + j123)]; + + } + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fRec18_perm[j125] = fRec18_tmp[(vsize + j125)]; + + } + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fRec19_perm[j133] = fRec19_tmp[(vsize + j133)]; + + } + for (int j139 = 0; (j139 < 4); j139 = (j139 + 1)) { + fRec17_perm[j139] = fRec17_tmp[(vsize + j139)]; + + } + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fRec15_perm[j141] = fRec15_tmp[(vsize + j141)]; + + } + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fRec16_perm[j149] = fRec16_tmp[(vsize + j149)]; + + } + for (int j155 = 0; (j155 < 4); j155 = (j155 + 1)) { + fRec14_perm[j155] = fRec14_tmp[(vsize + j155)]; + + } + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fRec12_perm[j157] = fRec12_tmp[(vsize + j157)]; + + } + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fRec13_perm[j165] = fRec13_tmp[(vsize + j165)]; + + } + for (int j171 = 0; (j171 < 4); j171 = (j171 + 1)) { + fRec11_perm[j171] = fRec11_tmp[(vsize + j171)]; + + } + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fRec9_perm[j173] = fRec9_tmp[(vsize + j173)]; + + } + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fRec10_perm[j181] = fRec10_tmp[(vsize + j181)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec8_perm[j187] = fRec8_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec6_perm[j189] = fRec6_tmp[(vsize + j189)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec7_perm[j197] = fRec7_tmp[(vsize + j197)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec5_perm[j203] = fRec5_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec3_perm[j205] = fRec3_tmp[(vsize + j205)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec4_perm[j213] = fRec4_tmp[(vsize + j213)]; + + } + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fRec2_perm[j217] = fRec2_tmp[(vsize + j217)]; + + } + fRec0_idx_save = vsize; + fRec1_idx_save = vsize; + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[((i + fRec0_idx) & 1023)]); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[((i + fRec1_idx) & 1023)]); + + } + + } + } -}; - +}; //---------------------------------------------------------------------------- // SuperCollider/Faust interface @@ -1087,7 +5332,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1170,9 +5415,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1277,7 +5522,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1340,7 +5585,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1369,9 +5614,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF + +#endif diff --git a/source/DEINDUGens/faust_src/JPverbRaw.cpp b/source/DEINDUGens/faust_src/JPverbRaw.cpp index 013752dc7f..20a4f2b01f 100644 --- a/source/DEINDUGens/faust_src/JPverbRaw.cpp +++ b/source/DEINDUGens/faust_src/JPverbRaw.cpp @@ -1,32 +1,15 @@ -//---------------------------------------------------------- -// copyright: "(c) Julian Parker 2013" -// name: "JPverbRaw" -// version: "1.1" -// author: "Julian Parker, bug fixes by Till Bovermann" -// license: "GPL2+" -// -// Code generated with Faust 0.9.98 (http://faust.grame.fr) -//---------------------------------------------------------- +/* ------------------------------------------------------------ +author: "Julian Parker, bug fixes by Till Bovermann" +copyright: "(c) Julian Parker 2013" +license: "GPL2+" +name: "JPverbRaw" +version: "1.1" +Code generated with Faust 2.15.11 (https://faust.grame.fr) +Compilation options: -vec -lv 0 -vs 8 -ftz 0 -mcd 16 +------------------------------------------------------------ */ -/* link with : "primes" */ -#include -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline float faustpower(float x) { return faustpower(x) * faustpower(x); } -template <> inline float faustpower<0>(float x) { return 1; } -template <> inline float faustpower<1>(float x) { return x; } -template <> inline float faustpower<2>(float x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -48,6 +31,11 @@ template <> inline float faustpower<2>(float x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + #include #include #include @@ -60,9 +48,15 @@ template <> inline float faustpower<2>(float x) { return x*x; } using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -94,7 +88,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -123,6 +117,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -190,8 +186,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -221,1141 +218,7167 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "primes" */ +#include +#include +#include +#include + +static float mydsp_faustpower2_f(float value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - int iVec0[2]; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - FAUSTFLOAT fslider4; - float fConst0; - float fConst1; - FAUSTFLOAT fslider5; - float fRec45[2]; - int IOTA; - float fVec1[16384]; - float fRec52[2]; - float fRec51[2]; - float fRec49[2]; - float fVec2[16384]; - float fRec54[2]; - float fRec53[2]; - float fRec50[2]; - float fVec3[16384]; - float fRec55[2]; - float fRec48[2]; - float fRec46[2]; - float fVec4[16384]; - float fRec57[2]; - float fRec56[2]; - float fRec47[2]; - float fVec5[16384]; - float fRec44[2]; - float fRec42[2]; - float fVec6[16384]; - float fRec59[2]; - float fRec58[2]; - float fRec43[2]; - float fVec7[16384]; - float fRec60[2]; - float fRec41[2]; - float fRec39[2]; - float fVec8[16384]; - float fRec62[2]; - float fRec61[2]; - float fRec40[2]; - float fVec9[16384]; - float fRec63[2]; - float fRec38[2]; - float fRec36[2]; - float fRec65[2]; - float fVec10[16384]; - float fRec64[2]; - float fRec37[2]; - float fVec11[1024]; - FAUSTFLOAT fslider6; - float fConst2; - FAUSTFLOAT fslider7; - float fRec66[2]; - float fRec67[2]; - float fVec12[16384]; - float fRec68[2]; - float fRec35[2]; - float fVec13[1024]; - float fVec14[16384]; - float fRec70[2]; - float fRec69[2]; - float fVec15[16384]; - float fRec71[2]; - float fRec34[2]; - float fRec32[2]; - float fVec16[16384]; - float fRec73[2]; - float fRec72[2]; - float fRec33[2]; - float fVec17[16384]; - float fRec74[2]; - float fRec31[2]; - float fRec29[2]; - float fVec18[16384]; - float fRec76[2]; - float fRec75[2]; - float fRec30[2]; - float fVec19[16384]; - float fRec77[2]; - float fRec28[2]; - float fRec26[2]; - float fVec20[16384]; - float fRec79[2]; - float fRec78[2]; - float fRec27[2]; - float fVec21[16384]; - float fRec80[2]; - float fRec25[2]; - float fRec23[2]; - float fVec22[16384]; - float fRec82[2]; - float fRec81[2]; - float fRec24[2]; - float fVec23[16384]; - float fRec83[2]; - float fRec22[2]; - float fRec20[2]; - float fVec24[16384]; - float fRec85[2]; - float fRec84[2]; - float fRec21[2]; - float fVec25[16384]; - float fVec26[16384]; - float fRec86[2]; - float fRec19[2]; - float fRec18[2]; - float fRec17[3]; - float fRec16[3]; - FAUSTFLOAT fslider8; - float fRec15[3]; - FAUSTFLOAT fslider9; - float fRec92[2]; - float fRec91[3]; - float fRec90[3]; - float fVec27[2]; - float fRec89[2]; - float fRec88[3]; - float fRec87[3]; - FAUSTFLOAT fslider10; - float fRec95[2]; - float fRec94[3]; - float fRec93[3]; - float fVec28[1024]; - float fRec14[2]; - float fVec29[16384]; - float fVec30[16384]; - float fRec102[2]; - float fRec101[2]; - float fRec100[2]; - float fRec99[3]; - float fRec98[3]; - float fRec97[3]; - float fRec108[2]; - float fRec107[3]; - float fRec106[3]; - float fVec31[2]; - float fRec105[2]; - float fRec104[3]; - float fRec103[3]; - float fRec111[2]; - float fRec110[3]; - float fRec109[3]; - float fVec32[1024]; - float fRec96[2]; - float fVec33[16384]; - float fRec13[2]; - float fRec11[2]; - float fVec34[16384]; - float fRec113[2]; - float fRec112[2]; - float fRec12[2]; - float fVec35[16384]; - float fRec10[2]; - float fRec8[2]; - float fVec36[16384]; - float fRec114[2]; - float fRec9[2]; - float fVec37[16384]; - float fRec7[2]; - float fRec5[2]; - float fVec38[16384]; - float fRec116[2]; - float fRec115[2]; - float fRec6[2]; - float fVec39[16384]; - float fRec117[2]; - float fRec4[2]; - float fRec2[2]; - float fVec40[16384]; - float fRec118[2]; - float fRec3[2]; - float fRec0[2]; - float fRec1[2]; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("copyright", "(c) Julian Parker 2013"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("name", "JPverbRaw"); - m->declare("version", "1.1"); + float fConst0; + float fConst1; + FAUSTFLOAT fHslider0; + float fRec15_perm[4]; + int iVec0_perm[4]; + float fRec16_perm[4]; + FAUSTFLOAT fHslider1; + float fRec53_perm[4]; + float fYec0[16384]; + int fYec0_idx; + int fYec0_idx_save; + float fYec1_perm[4]; + float fRec52_perm[4]; + float fRec50_perm[4]; + float fRec55_perm[4]; + float fYec2[16384]; + int fYec2_idx; + int fYec2_idx_save; + float fYec3_perm[4]; + float fRec54_perm[4]; + float fRec51_perm[4]; + float fRec56_perm[4]; + float fYec4[16384]; + int fYec4_idx; + int fYec4_idx_save; + float fYec5_perm[4]; + float fRec49_perm[4]; + float fRec47_perm[4]; + float fRec58_perm[4]; + float fYec6[16384]; + int fYec6_idx; + int fYec6_idx_save; + float fYec7_perm[4]; + float fRec57_perm[4]; + float fRec48_perm[4]; + float fRec59_perm[4]; + float fYec8[16384]; + int fYec8_idx; + int fYec8_idx_save; + float fYec9_perm[4]; + float fRec46_perm[4]; + float fRec44_perm[4]; + float fRec61_perm[4]; + float fYec10[16384]; + int fYec10_idx; + int fYec10_idx_save; + float fYec11_perm[4]; + float fRec60_perm[4]; + float fRec45_perm[4]; + float fRec62_perm[4]; + float fYec12[16384]; + int fYec12_idx; + int fYec12_idx_save; + float fYec13_perm[4]; + float fRec43_perm[4]; + float fRec41_perm[4]; + float fRec64_perm[4]; + float fYec14[16384]; + int fYec14_idx; + int fYec14_idx_save; + float fYec15_perm[4]; + float fRec63_perm[4]; + float fRec42_perm[4]; + float fRec65_perm[4]; + float fYec16[16384]; + int fYec16_idx; + int fYec16_idx_save; + float fYec17_perm[4]; + float fRec40_perm[4]; + float fRec38_perm[4]; + float fRec67_perm[4]; + float fYec18[16384]; + int fYec18_idx; + int fYec18_idx_save; + float fYec19_perm[4]; + float fRec66_perm[4]; + float fRec39_perm[4]; + float fRec68_perm[4]; + float fYec20[1024]; + int fYec20_idx; + int fYec20_idx_save; + FAUSTFLOAT fHslider2; + float fYec21[16384]; + int fYec21_idx; + int fYec21_idx_save; + float fYec22_perm[4]; + float fRec37_perm[4]; + float fRec70_perm[4]; + float fYec23[1024]; + int fYec23_idx; + int fYec23_idx_save; + float fYec24[16384]; + int fYec24_idx; + int fYec24_idx_save; + float fYec25_perm[4]; + float fRec69_perm[4]; + float fRec71_perm[4]; + float fYec26[16384]; + int fYec26_idx; + int fYec26_idx_save; + float fYec27_perm[4]; + float fRec36_perm[4]; + float fRec34_perm[4]; + float fRec73_perm[4]; + float fYec28[16384]; + int fYec28_idx; + int fYec28_idx_save; + float fYec29_perm[4]; + float fRec72_perm[4]; + float fRec35_perm[4]; + float fRec74_perm[4]; + float fYec30[16384]; + int fYec30_idx; + int fYec30_idx_save; + float fYec31_perm[4]; + float fRec33_perm[4]; + float fRec31_perm[4]; + float fRec76_perm[4]; + float fYec32[16384]; + int fYec32_idx; + int fYec32_idx_save; + float fYec33_perm[4]; + float fRec75_perm[4]; + float fRec32_perm[4]; + float fRec77_perm[4]; + float fYec34[16384]; + int fYec34_idx; + int fYec34_idx_save; + float fYec35_perm[4]; + float fRec30_perm[4]; + float fRec28_perm[4]; + float fRec79_perm[4]; + float fYec36[16384]; + int fYec36_idx; + int fYec36_idx_save; + float fYec37_perm[4]; + float fRec78_perm[4]; + float fRec29_perm[4]; + float fRec80_perm[4]; + float fYec38[16384]; + int fYec38_idx; + int fYec38_idx_save; + float fYec39_perm[4]; + float fRec27_perm[4]; + float fRec25_perm[4]; + float fRec82_perm[4]; + float fYec40[16384]; + int fYec40_idx; + int fYec40_idx_save; + float fYec41_perm[4]; + float fRec81_perm[4]; + float fRec26_perm[4]; + float fRec83_perm[4]; + float fYec42[16384]; + int fYec42_idx; + int fYec42_idx_save; + float fYec43_perm[4]; + float fRec24_perm[4]; + float fRec22_perm[4]; + float fRec85_perm[4]; + float fYec44[16384]; + int fYec44_idx; + int fYec44_idx_save; + float fYec45_perm[4]; + float fRec84_perm[4]; + float fRec23_perm[4]; + float fRec86_perm[4]; + float fYec46[16384]; + int fYec46_idx; + int fYec46_idx_save; + float fYec47[16384]; + int fYec47_idx; + int fYec47_idx_save; + float fYec48_perm[4]; + float fRec21_perm[4]; + float fConst2; + FAUSTFLOAT fHslider3; + float fRec20_perm[4]; + float fRec19_perm[4]; + float fRec18_perm[4]; + FAUSTFLOAT fHslider4; + float fRec17_perm[4]; + float fRec92_perm[4]; + float fRec91_perm[4]; + float fRec90_perm[4]; + float fYec49_perm[4]; + float fRec89_perm[4]; + float fRec88_perm[4]; + float fRec87_perm[4]; + float fRec95_perm[4]; + float fRec94_perm[4]; + float fRec93_perm[4]; + FAUSTFLOAT fHslider5; + FAUSTFLOAT fHslider6; + FAUSTFLOAT fHslider7; + FAUSTFLOAT fHslider8; + FAUSTFLOAT fHslider9; + float fYec50[1024]; + int fYec50_idx; + int fYec50_idx_save; + float fRec14_perm[4]; + float fRec102_perm[4]; + float fYec51[16384]; + int fYec51_idx; + int fYec51_idx_save; + float fYec52[16384]; + int fYec52_idx; + int fYec52_idx_save; + float fYec53_perm[4]; + float fRec101_perm[4]; + float fRec100_perm[4]; + float fRec99_perm[4]; + float fRec98_perm[4]; + float fRec97_perm[4]; + float fRec108_perm[4]; + float fRec107_perm[4]; + float fRec106_perm[4]; + float fYec54_perm[4]; + float fRec105_perm[4]; + float fRec104_perm[4]; + float fRec103_perm[4]; + float fRec111_perm[4]; + float fRec110_perm[4]; + float fRec109_perm[4]; + float fYec55[1024]; + int fYec55_idx; + int fYec55_idx_save; + float fRec96_perm[4]; + FAUSTFLOAT fHslider10; + float fYec56[16384]; + int fYec56_idx; + int fYec56_idx_save; + float fYec57_perm[4]; + float fRec13_perm[4]; + float fRec11_perm[4]; + float fRec113_perm[4]; + float fYec58[16384]; + int fYec58_idx; + int fYec58_idx_save; + float fYec59_perm[4]; + float fRec112_perm[4]; + float fRec12_perm[4]; + float fYec60[16384]; + int fYec60_idx; + int fYec60_idx_save; + float fYec61_perm[4]; + float fRec10_perm[4]; + float fRec8_perm[4]; + float fYec62[16384]; + int fYec62_idx; + int fYec62_idx_save; + float fYec63_perm[4]; + float fRec114_perm[4]; + float fRec9_perm[4]; + float fYec64[16384]; + int fYec64_idx; + int fYec64_idx_save; + float fYec65_perm[4]; + float fRec7_perm[4]; + float fRec5_perm[4]; + float fRec116_perm[4]; + float fYec66[16384]; + int fYec66_idx; + int fYec66_idx_save; + float fYec67_perm[4]; + float fRec115_perm[4]; + float fRec6_perm[4]; + float fRec117_perm[4]; + float fYec68[16384]; + int fYec68_idx; + int fYec68_idx_save; + float fYec69_perm[4]; + float fRec4_perm[4]; + float fRec2_perm[4]; + float fYec70[16384]; + int fYec70_idx; + int fYec70_idx_save; + float fYec71_perm[4]; + float fRec118_perm[4]; + float fRec3_perm[4]; + float fRec0_perm[4]; + float fRec1_perm[4]; + + public: + + void metadata(Meta* m) { + m->declare("analyzers.lib/name", "Faust Analyzer Library"); + m->declare("analyzers.lib/version", "0.0"); m->declare("author", "Julian Parker, bug fixes by Till Bovermann"); - m->declare("license", "GPL2+"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Julian Parker 2013"); + m->declare("delays.lib/name", "Faust Delay Library"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "JPverbRaw"); m->declare("filters.lib/name", "Faust Filters Library"); m->declare("filters.lib/version", "0.0"); - m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("oscillators.lib/name", "Faust Oscillator Library"); - m->declare("oscillators.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("license", "GPL2+"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "JPverbRaw"); + m->declare("oscillators.lib/name", "Faust Oscillator Library"); + m->declare("oscillators.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.1"); } - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 2; } + virtual int getNumInputs() { + return 2; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 0; + break; + } + case 1: { + rate = 0; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05f, max(1e+03f, (float)fSamplingFreq)); - fConst1 = (3.1415927f / fConst0); - fConst2 = (6.2831855f / fConst0); + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + fConst1 = (6.28318548f / fConst0); + fConst2 = (3.14159274f / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.707f; - fslider1 = 0.0f; - fslider2 = 1.0f; - fslider3 = 1.0f; - fslider4 = 1.0f; - fslider5 = 2e+03f; - fslider6 = 0.1f; - fslider7 = 2.0f; - fslider8 = 5e+02f; - fslider9 = 1.0f; - fslider10 = 1.0f; + fHslider0 = FAUSTFLOAT(2.0f); + fHslider1 = FAUSTFLOAT(1.0f); + fHslider2 = FAUSTFLOAT(0.10000000000000001f); + fHslider3 = FAUSTFLOAT(2000.0f); + fHslider4 = FAUSTFLOAT(500.0f); + fHslider5 = FAUSTFLOAT(0.0f); + fHslider6 = FAUSTFLOAT(1.0f); + fHslider7 = FAUSTFLOAT(1.0f); + fHslider8 = FAUSTFLOAT(1.0f); + fHslider9 = FAUSTFLOAT(1.0f); + fHslider10 = FAUSTFLOAT(0.70699999999999996f); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) iVec0[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - IOTA = 0; - for (int i=0; i<16384; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<16384; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<16384; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<16384; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<16384; i++) fVec5[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<16384; i++) fVec6[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<16384; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<16384; i++) fVec8[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<16384; i++) fVec9[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<16384; i++) fVec10[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<1024; i++) fVec11[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<16384; i++) fVec12[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<1024; i++) fVec13[i] = 0; - for (int i=0; i<16384; i++) fVec14[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<16384; i++) fVec15[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<16384; i++) fVec16[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<16384; i++) fVec17[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<16384; i++) fVec18[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<16384; i++) fVec19[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<16384; i++) fVec20[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<16384; i++) fVec21[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<16384; i++) fVec22[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<16384; i++) fVec23[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<16384; i++) fVec24[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<16384; i++) fVec25[i] = 0; - for (int i=0; i<16384; i++) fVec26[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<3; i++) fRec17[i] = 0; - for (int i=0; i<3; i++) fRec16[i] = 0; - for (int i=0; i<3; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<3; i++) fRec91[i] = 0; - for (int i=0; i<3; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fVec27[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<3; i++) fRec88[i] = 0; - for (int i=0; i<3; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<3; i++) fRec94[i] = 0; - for (int i=0; i<3; i++) fRec93[i] = 0; - for (int i=0; i<1024; i++) fVec28[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<16384; i++) fVec29[i] = 0; - for (int i=0; i<16384; i++) fVec30[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<3; i++) fRec99[i] = 0; - for (int i=0; i<3; i++) fRec98[i] = 0; - for (int i=0; i<3; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<3; i++) fRec107[i] = 0; - for (int i=0; i<3; i++) fRec106[i] = 0; - for (int i=0; i<2; i++) fVec31[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; - for (int i=0; i<3; i++) fRec104[i] = 0; - for (int i=0; i<3; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; - for (int i=0; i<3; i++) fRec110[i] = 0; - for (int i=0; i<3; i++) fRec109[i] = 0; - for (int i=0; i<1024; i++) fVec32[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<16384; i++) fVec33[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<16384; i++) fVec34[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<16384; i++) fVec35[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<16384; i++) fVec36[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<16384; i++) fVec37[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<16384; i++) fVec38[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<16384; i++) fVec39[i] = 0; - for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<16384; i++) fVec40[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; + for (int l0 = 0; (l0 < 4); l0 = (l0 + 1)) { + fRec15_perm[l0] = 0.0f; + + } + for (int l1 = 0; (l1 < 4); l1 = (l1 + 1)) { + iVec0_perm[l1] = 0; + + } + for (int l2 = 0; (l2 < 4); l2 = (l2 + 1)) { + fRec16_perm[l2] = 0.0f; + + } + for (int l3 = 0; (l3 < 4); l3 = (l3 + 1)) { + fRec53_perm[l3] = 0.0f; + + } + for (int l4 = 0; (l4 < 16384); l4 = (l4 + 1)) { + fYec0[l4] = 0.0f; + + } + fYec0_idx = 0; + fYec0_idx_save = 0; + for (int l5 = 0; (l5 < 4); l5 = (l5 + 1)) { + fYec1_perm[l5] = 0.0f; + + } + for (int l6 = 0; (l6 < 4); l6 = (l6 + 1)) { + fRec52_perm[l6] = 0.0f; + + } + for (int l7 = 0; (l7 < 4); l7 = (l7 + 1)) { + fRec50_perm[l7] = 0.0f; + + } + for (int l8 = 0; (l8 < 4); l8 = (l8 + 1)) { + fRec55_perm[l8] = 0.0f; + + } + for (int l9 = 0; (l9 < 16384); l9 = (l9 + 1)) { + fYec2[l9] = 0.0f; + + } + fYec2_idx = 0; + fYec2_idx_save = 0; + for (int l10 = 0; (l10 < 4); l10 = (l10 + 1)) { + fYec3_perm[l10] = 0.0f; + + } + for (int l11 = 0; (l11 < 4); l11 = (l11 + 1)) { + fRec54_perm[l11] = 0.0f; + + } + for (int l12 = 0; (l12 < 4); l12 = (l12 + 1)) { + fRec51_perm[l12] = 0.0f; + + } + for (int l13 = 0; (l13 < 4); l13 = (l13 + 1)) { + fRec56_perm[l13] = 0.0f; + + } + for (int l14 = 0; (l14 < 16384); l14 = (l14 + 1)) { + fYec4[l14] = 0.0f; + + } + fYec4_idx = 0; + fYec4_idx_save = 0; + for (int l15 = 0; (l15 < 4); l15 = (l15 + 1)) { + fYec5_perm[l15] = 0.0f; + + } + for (int l16 = 0; (l16 < 4); l16 = (l16 + 1)) { + fRec49_perm[l16] = 0.0f; + + } + for (int l17 = 0; (l17 < 4); l17 = (l17 + 1)) { + fRec47_perm[l17] = 0.0f; + + } + for (int l18 = 0; (l18 < 4); l18 = (l18 + 1)) { + fRec58_perm[l18] = 0.0f; + + } + for (int l19 = 0; (l19 < 16384); l19 = (l19 + 1)) { + fYec6[l19] = 0.0f; + + } + fYec6_idx = 0; + fYec6_idx_save = 0; + for (int l20 = 0; (l20 < 4); l20 = (l20 + 1)) { + fYec7_perm[l20] = 0.0f; + + } + for (int l21 = 0; (l21 < 4); l21 = (l21 + 1)) { + fRec57_perm[l21] = 0.0f; + + } + for (int l22 = 0; (l22 < 4); l22 = (l22 + 1)) { + fRec48_perm[l22] = 0.0f; + + } + for (int l23 = 0; (l23 < 4); l23 = (l23 + 1)) { + fRec59_perm[l23] = 0.0f; + + } + for (int l24 = 0; (l24 < 16384); l24 = (l24 + 1)) { + fYec8[l24] = 0.0f; + + } + fYec8_idx = 0; + fYec8_idx_save = 0; + for (int l25 = 0; (l25 < 4); l25 = (l25 + 1)) { + fYec9_perm[l25] = 0.0f; + + } + for (int l26 = 0; (l26 < 4); l26 = (l26 + 1)) { + fRec46_perm[l26] = 0.0f; + + } + for (int l27 = 0; (l27 < 4); l27 = (l27 + 1)) { + fRec44_perm[l27] = 0.0f; + + } + for (int l28 = 0; (l28 < 4); l28 = (l28 + 1)) { + fRec61_perm[l28] = 0.0f; + + } + for (int l29 = 0; (l29 < 16384); l29 = (l29 + 1)) { + fYec10[l29] = 0.0f; + + } + fYec10_idx = 0; + fYec10_idx_save = 0; + for (int l30 = 0; (l30 < 4); l30 = (l30 + 1)) { + fYec11_perm[l30] = 0.0f; + + } + for (int l31 = 0; (l31 < 4); l31 = (l31 + 1)) { + fRec60_perm[l31] = 0.0f; + + } + for (int l32 = 0; (l32 < 4); l32 = (l32 + 1)) { + fRec45_perm[l32] = 0.0f; + + } + for (int l33 = 0; (l33 < 4); l33 = (l33 + 1)) { + fRec62_perm[l33] = 0.0f; + + } + for (int l34 = 0; (l34 < 16384); l34 = (l34 + 1)) { + fYec12[l34] = 0.0f; + + } + fYec12_idx = 0; + fYec12_idx_save = 0; + for (int l35 = 0; (l35 < 4); l35 = (l35 + 1)) { + fYec13_perm[l35] = 0.0f; + + } + for (int l36 = 0; (l36 < 4); l36 = (l36 + 1)) { + fRec43_perm[l36] = 0.0f; + + } + for (int l37 = 0; (l37 < 4); l37 = (l37 + 1)) { + fRec41_perm[l37] = 0.0f; + + } + for (int l38 = 0; (l38 < 4); l38 = (l38 + 1)) { + fRec64_perm[l38] = 0.0f; + + } + for (int l39 = 0; (l39 < 16384); l39 = (l39 + 1)) { + fYec14[l39] = 0.0f; + + } + fYec14_idx = 0; + fYec14_idx_save = 0; + for (int l40 = 0; (l40 < 4); l40 = (l40 + 1)) { + fYec15_perm[l40] = 0.0f; + + } + for (int l41 = 0; (l41 < 4); l41 = (l41 + 1)) { + fRec63_perm[l41] = 0.0f; + + } + for (int l42 = 0; (l42 < 4); l42 = (l42 + 1)) { + fRec42_perm[l42] = 0.0f; + + } + for (int l43 = 0; (l43 < 4); l43 = (l43 + 1)) { + fRec65_perm[l43] = 0.0f; + + } + for (int l44 = 0; (l44 < 16384); l44 = (l44 + 1)) { + fYec16[l44] = 0.0f; + + } + fYec16_idx = 0; + fYec16_idx_save = 0; + for (int l45 = 0; (l45 < 4); l45 = (l45 + 1)) { + fYec17_perm[l45] = 0.0f; + + } + for (int l46 = 0; (l46 < 4); l46 = (l46 + 1)) { + fRec40_perm[l46] = 0.0f; + + } + for (int l47 = 0; (l47 < 4); l47 = (l47 + 1)) { + fRec38_perm[l47] = 0.0f; + + } + for (int l48 = 0; (l48 < 4); l48 = (l48 + 1)) { + fRec67_perm[l48] = 0.0f; + + } + for (int l49 = 0; (l49 < 16384); l49 = (l49 + 1)) { + fYec18[l49] = 0.0f; + + } + fYec18_idx = 0; + fYec18_idx_save = 0; + for (int l50 = 0; (l50 < 4); l50 = (l50 + 1)) { + fYec19_perm[l50] = 0.0f; + + } + for (int l51 = 0; (l51 < 4); l51 = (l51 + 1)) { + fRec66_perm[l51] = 0.0f; + + } + for (int l52 = 0; (l52 < 4); l52 = (l52 + 1)) { + fRec39_perm[l52] = 0.0f; + + } + for (int l53 = 0; (l53 < 4); l53 = (l53 + 1)) { + fRec68_perm[l53] = 0.0f; + + } + for (int l54 = 0; (l54 < 1024); l54 = (l54 + 1)) { + fYec20[l54] = 0.0f; + + } + fYec20_idx = 0; + fYec20_idx_save = 0; + for (int l55 = 0; (l55 < 16384); l55 = (l55 + 1)) { + fYec21[l55] = 0.0f; + + } + fYec21_idx = 0; + fYec21_idx_save = 0; + for (int l56 = 0; (l56 < 4); l56 = (l56 + 1)) { + fYec22_perm[l56] = 0.0f; + + } + for (int l57 = 0; (l57 < 4); l57 = (l57 + 1)) { + fRec37_perm[l57] = 0.0f; + + } + for (int l58 = 0; (l58 < 4); l58 = (l58 + 1)) { + fRec70_perm[l58] = 0.0f; + + } + for (int l59 = 0; (l59 < 1024); l59 = (l59 + 1)) { + fYec23[l59] = 0.0f; + + } + fYec23_idx = 0; + fYec23_idx_save = 0; + for (int l60 = 0; (l60 < 16384); l60 = (l60 + 1)) { + fYec24[l60] = 0.0f; + + } + fYec24_idx = 0; + fYec24_idx_save = 0; + for (int l61 = 0; (l61 < 4); l61 = (l61 + 1)) { + fYec25_perm[l61] = 0.0f; + + } + for (int l62 = 0; (l62 < 4); l62 = (l62 + 1)) { + fRec69_perm[l62] = 0.0f; + + } + for (int l63 = 0; (l63 < 4); l63 = (l63 + 1)) { + fRec71_perm[l63] = 0.0f; + + } + for (int l64 = 0; (l64 < 16384); l64 = (l64 + 1)) { + fYec26[l64] = 0.0f; + + } + fYec26_idx = 0; + fYec26_idx_save = 0; + for (int l65 = 0; (l65 < 4); l65 = (l65 + 1)) { + fYec27_perm[l65] = 0.0f; + + } + for (int l66 = 0; (l66 < 4); l66 = (l66 + 1)) { + fRec36_perm[l66] = 0.0f; + + } + for (int l67 = 0; (l67 < 4); l67 = (l67 + 1)) { + fRec34_perm[l67] = 0.0f; + + } + for (int l68 = 0; (l68 < 4); l68 = (l68 + 1)) { + fRec73_perm[l68] = 0.0f; + + } + for (int l69 = 0; (l69 < 16384); l69 = (l69 + 1)) { + fYec28[l69] = 0.0f; + + } + fYec28_idx = 0; + fYec28_idx_save = 0; + for (int l70 = 0; (l70 < 4); l70 = (l70 + 1)) { + fYec29_perm[l70] = 0.0f; + + } + for (int l71 = 0; (l71 < 4); l71 = (l71 + 1)) { + fRec72_perm[l71] = 0.0f; + + } + for (int l72 = 0; (l72 < 4); l72 = (l72 + 1)) { + fRec35_perm[l72] = 0.0f; + + } + for (int l73 = 0; (l73 < 4); l73 = (l73 + 1)) { + fRec74_perm[l73] = 0.0f; + + } + for (int l74 = 0; (l74 < 16384); l74 = (l74 + 1)) { + fYec30[l74] = 0.0f; + + } + fYec30_idx = 0; + fYec30_idx_save = 0; + for (int l75 = 0; (l75 < 4); l75 = (l75 + 1)) { + fYec31_perm[l75] = 0.0f; + + } + for (int l76 = 0; (l76 < 4); l76 = (l76 + 1)) { + fRec33_perm[l76] = 0.0f; + + } + for (int l77 = 0; (l77 < 4); l77 = (l77 + 1)) { + fRec31_perm[l77] = 0.0f; + + } + for (int l78 = 0; (l78 < 4); l78 = (l78 + 1)) { + fRec76_perm[l78] = 0.0f; + + } + for (int l79 = 0; (l79 < 16384); l79 = (l79 + 1)) { + fYec32[l79] = 0.0f; + + } + fYec32_idx = 0; + fYec32_idx_save = 0; + for (int l80 = 0; (l80 < 4); l80 = (l80 + 1)) { + fYec33_perm[l80] = 0.0f; + + } + for (int l81 = 0; (l81 < 4); l81 = (l81 + 1)) { + fRec75_perm[l81] = 0.0f; + + } + for (int l82 = 0; (l82 < 4); l82 = (l82 + 1)) { + fRec32_perm[l82] = 0.0f; + + } + for (int l83 = 0; (l83 < 4); l83 = (l83 + 1)) { + fRec77_perm[l83] = 0.0f; + + } + for (int l84 = 0; (l84 < 16384); l84 = (l84 + 1)) { + fYec34[l84] = 0.0f; + + } + fYec34_idx = 0; + fYec34_idx_save = 0; + for (int l85 = 0; (l85 < 4); l85 = (l85 + 1)) { + fYec35_perm[l85] = 0.0f; + + } + for (int l86 = 0; (l86 < 4); l86 = (l86 + 1)) { + fRec30_perm[l86] = 0.0f; + + } + for (int l87 = 0; (l87 < 4); l87 = (l87 + 1)) { + fRec28_perm[l87] = 0.0f; + + } + for (int l88 = 0; (l88 < 4); l88 = (l88 + 1)) { + fRec79_perm[l88] = 0.0f; + + } + for (int l89 = 0; (l89 < 16384); l89 = (l89 + 1)) { + fYec36[l89] = 0.0f; + + } + fYec36_idx = 0; + fYec36_idx_save = 0; + for (int l90 = 0; (l90 < 4); l90 = (l90 + 1)) { + fYec37_perm[l90] = 0.0f; + + } + for (int l91 = 0; (l91 < 4); l91 = (l91 + 1)) { + fRec78_perm[l91] = 0.0f; + + } + for (int l92 = 0; (l92 < 4); l92 = (l92 + 1)) { + fRec29_perm[l92] = 0.0f; + + } + for (int l93 = 0; (l93 < 4); l93 = (l93 + 1)) { + fRec80_perm[l93] = 0.0f; + + } + for (int l94 = 0; (l94 < 16384); l94 = (l94 + 1)) { + fYec38[l94] = 0.0f; + + } + fYec38_idx = 0; + fYec38_idx_save = 0; + for (int l95 = 0; (l95 < 4); l95 = (l95 + 1)) { + fYec39_perm[l95] = 0.0f; + + } + for (int l96 = 0; (l96 < 4); l96 = (l96 + 1)) { + fRec27_perm[l96] = 0.0f; + + } + for (int l97 = 0; (l97 < 4); l97 = (l97 + 1)) { + fRec25_perm[l97] = 0.0f; + + } + for (int l98 = 0; (l98 < 4); l98 = (l98 + 1)) { + fRec82_perm[l98] = 0.0f; + + } + for (int l99 = 0; (l99 < 16384); l99 = (l99 + 1)) { + fYec40[l99] = 0.0f; + + } + fYec40_idx = 0; + fYec40_idx_save = 0; + for (int l100 = 0; (l100 < 4); l100 = (l100 + 1)) { + fYec41_perm[l100] = 0.0f; + + } + for (int l101 = 0; (l101 < 4); l101 = (l101 + 1)) { + fRec81_perm[l101] = 0.0f; + + } + for (int l102 = 0; (l102 < 4); l102 = (l102 + 1)) { + fRec26_perm[l102] = 0.0f; + + } + for (int l103 = 0; (l103 < 4); l103 = (l103 + 1)) { + fRec83_perm[l103] = 0.0f; + + } + for (int l104 = 0; (l104 < 16384); l104 = (l104 + 1)) { + fYec42[l104] = 0.0f; + + } + fYec42_idx = 0; + fYec42_idx_save = 0; + for (int l105 = 0; (l105 < 4); l105 = (l105 + 1)) { + fYec43_perm[l105] = 0.0f; + + } + for (int l106 = 0; (l106 < 4); l106 = (l106 + 1)) { + fRec24_perm[l106] = 0.0f; + + } + for (int l107 = 0; (l107 < 4); l107 = (l107 + 1)) { + fRec22_perm[l107] = 0.0f; + + } + for (int l108 = 0; (l108 < 4); l108 = (l108 + 1)) { + fRec85_perm[l108] = 0.0f; + + } + for (int l109 = 0; (l109 < 16384); l109 = (l109 + 1)) { + fYec44[l109] = 0.0f; + + } + fYec44_idx = 0; + fYec44_idx_save = 0; + for (int l110 = 0; (l110 < 4); l110 = (l110 + 1)) { + fYec45_perm[l110] = 0.0f; + + } + for (int l111 = 0; (l111 < 4); l111 = (l111 + 1)) { + fRec84_perm[l111] = 0.0f; + + } + for (int l112 = 0; (l112 < 4); l112 = (l112 + 1)) { + fRec23_perm[l112] = 0.0f; + + } + for (int l113 = 0; (l113 < 4); l113 = (l113 + 1)) { + fRec86_perm[l113] = 0.0f; + + } + for (int l114 = 0; (l114 < 16384); l114 = (l114 + 1)) { + fYec46[l114] = 0.0f; + + } + fYec46_idx = 0; + fYec46_idx_save = 0; + for (int l115 = 0; (l115 < 16384); l115 = (l115 + 1)) { + fYec47[l115] = 0.0f; + + } + fYec47_idx = 0; + fYec47_idx_save = 0; + for (int l116 = 0; (l116 < 4); l116 = (l116 + 1)) { + fYec48_perm[l116] = 0.0f; + + } + for (int l117 = 0; (l117 < 4); l117 = (l117 + 1)) { + fRec21_perm[l117] = 0.0f; + + } + for (int l118 = 0; (l118 < 4); l118 = (l118 + 1)) { + fRec20_perm[l118] = 0.0f; + + } + for (int l119 = 0; (l119 < 4); l119 = (l119 + 1)) { + fRec19_perm[l119] = 0.0f; + + } + for (int l120 = 0; (l120 < 4); l120 = (l120 + 1)) { + fRec18_perm[l120] = 0.0f; + + } + for (int l121 = 0; (l121 < 4); l121 = (l121 + 1)) { + fRec17_perm[l121] = 0.0f; + + } + for (int l122 = 0; (l122 < 4); l122 = (l122 + 1)) { + fRec92_perm[l122] = 0.0f; + + } + for (int l123 = 0; (l123 < 4); l123 = (l123 + 1)) { + fRec91_perm[l123] = 0.0f; + + } + for (int l124 = 0; (l124 < 4); l124 = (l124 + 1)) { + fRec90_perm[l124] = 0.0f; + + } + for (int l125 = 0; (l125 < 4); l125 = (l125 + 1)) { + fYec49_perm[l125] = 0.0f; + + } + for (int l126 = 0; (l126 < 4); l126 = (l126 + 1)) { + fRec89_perm[l126] = 0.0f; + + } + for (int l127 = 0; (l127 < 4); l127 = (l127 + 1)) { + fRec88_perm[l127] = 0.0f; + + } + for (int l128 = 0; (l128 < 4); l128 = (l128 + 1)) { + fRec87_perm[l128] = 0.0f; + + } + for (int l129 = 0; (l129 < 4); l129 = (l129 + 1)) { + fRec95_perm[l129] = 0.0f; + + } + for (int l130 = 0; (l130 < 4); l130 = (l130 + 1)) { + fRec94_perm[l130] = 0.0f; + + } + for (int l131 = 0; (l131 < 4); l131 = (l131 + 1)) { + fRec93_perm[l131] = 0.0f; + + } + for (int l132 = 0; (l132 < 1024); l132 = (l132 + 1)) { + fYec50[l132] = 0.0f; + + } + fYec50_idx = 0; + fYec50_idx_save = 0; + for (int l133 = 0; (l133 < 4); l133 = (l133 + 1)) { + fRec14_perm[l133] = 0.0f; + + } + for (int l134 = 0; (l134 < 4); l134 = (l134 + 1)) { + fRec102_perm[l134] = 0.0f; + + } + for (int l135 = 0; (l135 < 16384); l135 = (l135 + 1)) { + fYec51[l135] = 0.0f; + + } + fYec51_idx = 0; + fYec51_idx_save = 0; + for (int l136 = 0; (l136 < 16384); l136 = (l136 + 1)) { + fYec52[l136] = 0.0f; + + } + fYec52_idx = 0; + fYec52_idx_save = 0; + for (int l137 = 0; (l137 < 4); l137 = (l137 + 1)) { + fYec53_perm[l137] = 0.0f; + + } + for (int l138 = 0; (l138 < 4); l138 = (l138 + 1)) { + fRec101_perm[l138] = 0.0f; + + } + for (int l139 = 0; (l139 < 4); l139 = (l139 + 1)) { + fRec100_perm[l139] = 0.0f; + + } + for (int l140 = 0; (l140 < 4); l140 = (l140 + 1)) { + fRec99_perm[l140] = 0.0f; + + } + for (int l141 = 0; (l141 < 4); l141 = (l141 + 1)) { + fRec98_perm[l141] = 0.0f; + + } + for (int l142 = 0; (l142 < 4); l142 = (l142 + 1)) { + fRec97_perm[l142] = 0.0f; + + } + for (int l143 = 0; (l143 < 4); l143 = (l143 + 1)) { + fRec108_perm[l143] = 0.0f; + + } + for (int l144 = 0; (l144 < 4); l144 = (l144 + 1)) { + fRec107_perm[l144] = 0.0f; + + } + for (int l145 = 0; (l145 < 4); l145 = (l145 + 1)) { + fRec106_perm[l145] = 0.0f; + + } + for (int l146 = 0; (l146 < 4); l146 = (l146 + 1)) { + fYec54_perm[l146] = 0.0f; + + } + for (int l147 = 0; (l147 < 4); l147 = (l147 + 1)) { + fRec105_perm[l147] = 0.0f; + + } + for (int l148 = 0; (l148 < 4); l148 = (l148 + 1)) { + fRec104_perm[l148] = 0.0f; + + } + for (int l149 = 0; (l149 < 4); l149 = (l149 + 1)) { + fRec103_perm[l149] = 0.0f; + + } + for (int l150 = 0; (l150 < 4); l150 = (l150 + 1)) { + fRec111_perm[l150] = 0.0f; + + } + for (int l151 = 0; (l151 < 4); l151 = (l151 + 1)) { + fRec110_perm[l151] = 0.0f; + + } + for (int l152 = 0; (l152 < 4); l152 = (l152 + 1)) { + fRec109_perm[l152] = 0.0f; + + } + for (int l153 = 0; (l153 < 1024); l153 = (l153 + 1)) { + fYec55[l153] = 0.0f; + + } + fYec55_idx = 0; + fYec55_idx_save = 0; + for (int l154 = 0; (l154 < 4); l154 = (l154 + 1)) { + fRec96_perm[l154] = 0.0f; + + } + for (int l155 = 0; (l155 < 16384); l155 = (l155 + 1)) { + fYec56[l155] = 0.0f; + + } + fYec56_idx = 0; + fYec56_idx_save = 0; + for (int l156 = 0; (l156 < 4); l156 = (l156 + 1)) { + fYec57_perm[l156] = 0.0f; + + } + for (int l157 = 0; (l157 < 4); l157 = (l157 + 1)) { + fRec13_perm[l157] = 0.0f; + + } + for (int l158 = 0; (l158 < 4); l158 = (l158 + 1)) { + fRec11_perm[l158] = 0.0f; + + } + for (int l159 = 0; (l159 < 4); l159 = (l159 + 1)) { + fRec113_perm[l159] = 0.0f; + + } + for (int l160 = 0; (l160 < 16384); l160 = (l160 + 1)) { + fYec58[l160] = 0.0f; + + } + fYec58_idx = 0; + fYec58_idx_save = 0; + for (int l161 = 0; (l161 < 4); l161 = (l161 + 1)) { + fYec59_perm[l161] = 0.0f; + + } + for (int l162 = 0; (l162 < 4); l162 = (l162 + 1)) { + fRec112_perm[l162] = 0.0f; + + } + for (int l163 = 0; (l163 < 4); l163 = (l163 + 1)) { + fRec12_perm[l163] = 0.0f; + + } + for (int l164 = 0; (l164 < 16384); l164 = (l164 + 1)) { + fYec60[l164] = 0.0f; + + } + fYec60_idx = 0; + fYec60_idx_save = 0; + for (int l165 = 0; (l165 < 4); l165 = (l165 + 1)) { + fYec61_perm[l165] = 0.0f; + + } + for (int l166 = 0; (l166 < 4); l166 = (l166 + 1)) { + fRec10_perm[l166] = 0.0f; + + } + for (int l167 = 0; (l167 < 4); l167 = (l167 + 1)) { + fRec8_perm[l167] = 0.0f; + + } + for (int l168 = 0; (l168 < 16384); l168 = (l168 + 1)) { + fYec62[l168] = 0.0f; + + } + fYec62_idx = 0; + fYec62_idx_save = 0; + for (int l169 = 0; (l169 < 4); l169 = (l169 + 1)) { + fYec63_perm[l169] = 0.0f; + + } + for (int l170 = 0; (l170 < 4); l170 = (l170 + 1)) { + fRec114_perm[l170] = 0.0f; + + } + for (int l171 = 0; (l171 < 4); l171 = (l171 + 1)) { + fRec9_perm[l171] = 0.0f; + + } + for (int l172 = 0; (l172 < 16384); l172 = (l172 + 1)) { + fYec64[l172] = 0.0f; + + } + fYec64_idx = 0; + fYec64_idx_save = 0; + for (int l173 = 0; (l173 < 4); l173 = (l173 + 1)) { + fYec65_perm[l173] = 0.0f; + + } + for (int l174 = 0; (l174 < 4); l174 = (l174 + 1)) { + fRec7_perm[l174] = 0.0f; + + } + for (int l175 = 0; (l175 < 4); l175 = (l175 + 1)) { + fRec5_perm[l175] = 0.0f; + + } + for (int l176 = 0; (l176 < 4); l176 = (l176 + 1)) { + fRec116_perm[l176] = 0.0f; + + } + for (int l177 = 0; (l177 < 16384); l177 = (l177 + 1)) { + fYec66[l177] = 0.0f; + + } + fYec66_idx = 0; + fYec66_idx_save = 0; + for (int l178 = 0; (l178 < 4); l178 = (l178 + 1)) { + fYec67_perm[l178] = 0.0f; + + } + for (int l179 = 0; (l179 < 4); l179 = (l179 + 1)) { + fRec115_perm[l179] = 0.0f; + + } + for (int l180 = 0; (l180 < 4); l180 = (l180 + 1)) { + fRec6_perm[l180] = 0.0f; + + } + for (int l181 = 0; (l181 < 4); l181 = (l181 + 1)) { + fRec117_perm[l181] = 0.0f; + + } + for (int l182 = 0; (l182 < 16384); l182 = (l182 + 1)) { + fYec68[l182] = 0.0f; + + } + fYec68_idx = 0; + fYec68_idx_save = 0; + for (int l183 = 0; (l183 < 4); l183 = (l183 + 1)) { + fYec69_perm[l183] = 0.0f; + + } + for (int l184 = 0; (l184 < 4); l184 = (l184 + 1)) { + fRec4_perm[l184] = 0.0f; + + } + for (int l185 = 0; (l185 < 4); l185 = (l185 + 1)) { + fRec2_perm[l185] = 0.0f; + + } + for (int l186 = 0; (l186 < 16384); l186 = (l186 + 1)) { + fYec70[l186] = 0.0f; + + } + fYec70_idx = 0; + fYec70_idx_save = 0; + for (int l187 = 0; (l187 < 4); l187 = (l187 + 1)) { + fYec71_perm[l187] = 0.0f; + + } + for (int l188 = 0; (l188 < 4); l188 = (l188 + 1)) { + fRec118_perm[l188] = 0.0f; + + } + for (int l189 = 0; (l189 < 4); l189 = (l189 + 1)) { + fRec3_perm[l189] = 0.0f; + + } + for (int l190 = 0; (l190 < 4); l190 = (l190 + 1)) { + fRec0_perm[l190] = 0.0f; + + } + for (int l191 = 0; (l191 < 4); l191 = (l191 + 1)) { + fRec1_perm[l191] = 0.0f; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); } + virtual void instanceInit(int samplingFreq) { instanceConstants(samplingFreq); instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->addHorizontalSlider("damp", &fslider1, 0.0f, 0.0f, 0.999f, 0.0001f); - ui_interface->addHorizontalSlider("earlyDiff", &fslider0, 0.707f, 0.0f, 0.99f, 0.001f); - ui_interface->addHorizontalSlider("highBand", &fslider5, 2e+03f, 1e+03f, 1e+04f, 0.1f); - ui_interface->addHorizontalSlider("highX", &fslider4, 1.0f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("lowBand", &fslider8, 5e+02f, 1e+02f, 6e+03f, 0.1f); - ui_interface->addHorizontalSlider("lowX", &fslider10, 1.0f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("mDepth", &fslider6, 0.1f, 0.0f, 1.0f, 0.001f); - ui_interface->addHorizontalSlider("mFreq", &fslider7, 2.0f, 0.0f, 1e+01f, 0.01f); - ui_interface->addHorizontalSlider("midX", &fslider9, 1.0f, 0.0f, 1.0f, 0.01f); - ui_interface->addHorizontalSlider("size", &fslider2, 1.0f, 0.5f, 3.0f, 0.01f); - ui_interface->addHorizontalSlider("t60", &fslider3, 1.0f, 0.1f, 6e+01f, 0.1f); + ui_interface->openVerticalBox("JPverbRaw"); + ui_interface->addHorizontalSlider("damp", &fHslider5, 0.0f, 0.0f, 0.999000013f, 9.99999975e-05f); + ui_interface->addHorizontalSlider("earlyDiff", &fHslider10, 0.707000017f, 0.0f, 0.99000001f, 0.00100000005f); + ui_interface->addHorizontalSlider("highBand", &fHslider3, 2000.0f, 1000.0f, 10000.0f, 0.100000001f); + ui_interface->addHorizontalSlider("highX", &fHslider7, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("lowBand", &fHslider4, 500.0f, 100.0f, 6000.0f, 0.100000001f); + ui_interface->addHorizontalSlider("lowX", &fHslider9, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("mDepth", &fHslider2, 0.100000001f, 0.0f, 1.0f, 0.00100000005f); + ui_interface->addHorizontalSlider("mFreq", &fHslider0, 2.0f, 0.0f, 10.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("midX", &fHslider8, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("size", &fHslider1, 1.0f, 0.5f, 3.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("t60", &fHslider6, 1.0f, 0.100000001f, 60.0f, 0.100000001f); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - float fSlow0 = float(fslider0); - float fSlow1 = cosf(fSlow0); - float fSlow2 = sinf(fSlow0); - float fSlow3 = (0 - fSlow2); - float fSlow4 = float(fslider1); - float fSlow5 = (1.0f - fSlow4); - float fSlow6 = float(fslider2); - float fSlow7 = powf(10,(0 - (0.51f * (((1.25f * fSlow6) + -0.25f) / float(fslider3))))); - float fSlow8 = float(fslider4); - float fSlow9 = tanf((fConst1 * float(fslider5))); - float fSlow10 = (1.0f / fSlow9); - float fSlow11 = (((fSlow10 + 0.618034f) / fSlow9) + 1); - float fSlow12 = (1.0f / fSlow11); - float fSlow13 = (1.0f / faustpower<2>(fSlow9)); - float fSlow14 = (2 * (0 - fSlow13)); - float fSlow15 = (1.0f / (((fSlow10 + 1.618034f) / fSlow9) + 1)); - float fSlow16 = (fSlow10 + 1); - float fSlow17 = (1.0f / fSlow16); - int iSlow18 = primes((70 * fSlow6)); - float fSlow19 = (0.0001f * iSlow18); - int iSlow20 = primes((10 * fSlow6)); - float fSlow21 = (0.0001f * iSlow20); - int iSlow22 = primes((110 * fSlow6)); - float fSlow23 = (0.0001f * iSlow22); - int iSlow24 = primes((40 * fSlow6)); - float fSlow25 = (0.0001f * iSlow24); - int iSlow26 = primes((140 * fSlow6)); - float fSlow27 = (0.0001f * iSlow26); - int iSlow28 = primes((170 * fSlow6)); - float fSlow29 = (0.0001f * iSlow28); - int iSlow30 = primes((100 * fSlow6)); - float fSlow31 = (0.0001f * iSlow30); - int iSlow32 = primes((200 * fSlow6)); - float fSlow33 = (0.0001f * iSlow32); - int iSlow34 = primes((130 * fSlow6)); - float fSlow35 = (0.0001f * iSlow34); - int iSlow36 = primes((230 * fSlow6)); - float fSlow37 = (0.0001f * iSlow36); - float fSlow38 = float(fslider6); - float fSlow39 = (50 * fSlow38); - float fSlow40 = (fConst2 * float(fslider7)); - float fSlow41 = sinf(fSlow40); - float fSlow42 = cosf(fSlow40); - float fSlow43 = (0 - fSlow41); - int iSlow44 = primes((54 * fSlow6)); - float fSlow45 = (0.005f * iSlow44); - float fSlow46 = (0 - (5e+01f * fSlow38)); - int iSlow47 = primes((204 * fSlow6)); - float fSlow48 = (0.005f * iSlow47); - int iSlow49 = primes((125 * fSlow6)); - float fSlow50 = (0.0001f * iSlow49); - int iSlow51 = primes((25 * fSlow6)); - float fSlow52 = (0.0001f * iSlow51); - int iSlow53 = primes((155 * fSlow6)); - float fSlow54 = (0.0001f * iSlow53); - int iSlow55 = primes((55 * fSlow6)); - float fSlow56 = (0.0001f * iSlow55); - int iSlow57 = primes((185 * fSlow6)); - float fSlow58 = (0.0001f * iSlow57); - int iSlow59 = primes((85 * fSlow6)); - float fSlow60 = (0.0001f * iSlow59); - int iSlow61 = primes((215 * fSlow6)); - float fSlow62 = (0.0001f * iSlow61); - int iSlow63 = primes((115 * fSlow6)); - float fSlow64 = (0.0001f * iSlow63); - int iSlow65 = primes((245 * fSlow6)); - float fSlow66 = (0.0001f * iSlow65); - int iSlow67 = primes((145 * fSlow6)); - float fSlow68 = (0.0001f * iSlow67); - int iSlow69 = primes((134 * fSlow6)); - float fSlow70 = (0.005f * iSlow69); - float fSlow71 = (0 - fSlow10); - float fSlow72 = (0 - ((1 - fSlow10) / fSlow16)); - float fSlow73 = (2 * (1 - fSlow13)); - float fSlow74 = (((fSlow10 + -1.618034f) / fSlow9) + 1); - float fSlow75 = (((fSlow10 + -0.618034f) / fSlow9) + 1); - float fSlow76 = tanf((fConst1 * float(fslider8))); - float fSlow77 = (1.0f / fSlow76); - float fSlow78 = (1.0f / (((fSlow77 + 1.618034f) / fSlow76) + 1)); - float fSlow79 = (((fSlow77 + -1.618034f) / fSlow76) + 1); - float fSlow80 = (1.0f / faustpower<2>(fSlow76)); - float fSlow81 = (2 * (1 - fSlow80)); - float fSlow82 = (1.0f / (((fSlow77 + 0.618034f) / fSlow76) + 1)); - float fSlow83 = float(fslider9); - float fSlow84 = (2 * (0 - fSlow80)); - float fSlow85 = (1.0f / (((fSlow77 + 1.618034f) / fSlow76) + 1)); - float fSlow86 = (fSlow77 + 1); - float fSlow87 = (0 - ((1 - fSlow77) / fSlow86)); - float fSlow88 = (1.0f / fSlow86); - float fSlow89 = (0 - fSlow77); - float fSlow90 = (1.0f / (fSlow11 * fSlow76)); - float fSlow91 = (((fSlow77 + -1.618034f) / fSlow76) + 1); - float fSlow92 = (((fSlow77 + -0.618034f) / fSlow76) + 1); - float fSlow93 = float(fslider10); - int iSlow94 = primes((34 * fSlow6)); - float fSlow95 = (0.005f * iSlow94); - int iSlow96 = primes((240 * fSlow6)); - float fSlow97 = (0.0001f * iSlow96); - int iSlow98 = primes((190 * fSlow6)); - float fSlow99 = (0.0001f * iSlow98); - int iSlow100 = primes((175 * fSlow6)); - float fSlow101 = (0.0001f * iSlow100); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - for (int i=0; i(512, std::max(0, iZec41[i])); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (0.0f - fZec44[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (0.0f - (0.5f * fZec46[i])); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (0.0f - (0.333333343f * fZec48[i])); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (0.0f - (0.25f * fZec50[i])); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = (fZec39[i] + (5.0f - fZec43[i])); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec53[i] = std::min(512, std::max(0, (iZec41[i] + 1))); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = (0.0f - fZec46[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - (0.5f * fZec48[i])); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = (0.0f - (0.333333343f * fZec50[i])); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec57[i] = std::min(512, std::max(0, (iZec41[i] + 2))); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = (0.0f - fZec48[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec59[i] = (0.0f - (0.5f * fZec50[i])); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec61[i] = std::min(512, std::max(0, (iZec41[i] + 3))); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (0.0f - fZec50[i]); + + } + /* Vectorizable loop 115 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = (fZec60[i] * fZec48[i]); + + } + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec64[i] = std::min(512, std::max(0, (iZec41[i] + 4))); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec66[i] = std::floor(fZec65[i]); + + } + /* Vectorizable loop 118 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec69[i] = int(fZec68[i]); + + } + /* Vectorizable loop 119 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = (fSlow26 + (fZec67[i] + (2.0f - fZec70[i]))); + + } + /* Vectorizable loop 120 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fSlow26 + (fZec67[i] + (1.0f - fZec70[i]))); + + } + /* Vectorizable loop 121 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = (fZec71[i] * fZec72[i]); + + } + /* Vectorizable loop 122 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 123 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 124 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec83[i] = std::floor(fZec82[i]); + + } + /* Vectorizable loop 125 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec89[i] = std::floor(fZec88[i]); + + } + /* Vectorizable loop 126 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec91[i] = std::min(8192, std::max(0, int(fZec90[i]))); + + } + /* Vectorizable loop 127 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = (fZec92[i] + (2.0f - fRec76[i])); + + } + /* Vectorizable loop 128 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec76[i] - fZec92[i]); + + } + /* Vectorizable loop 129 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = std::floor(fZec99[i]); + + } + /* Vectorizable loop 130 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec102[i] = std::min(8192, std::max(0, int(fZec101[i]))); + + } + /* Vectorizable loop 131 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fZec103[i] + (2.0f - fRec79[i])); + + } + /* Vectorizable loop 132 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = (fRec79[i] - fZec103[i]); + + } + /* Vectorizable loop 133 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec111[i] = std::min(8192, std::max(0, int(fZec110[i]))); + + } + /* Vectorizable loop 134 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec113[i] = (fZec112[i] + (2.0f - fRec80[i])); + + } + /* Vectorizable loop 135 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec114[i] = (fRec80[i] - fZec112[i]); + + } + /* Vectorizable loop 136 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec116[i] = std::min(8192, std::max(0, int(fZec115[i]))); + + } + /* Vectorizable loop 137 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec118[i] = (fZec117[i] + (2.0f - fRec82[i])); + + } + /* Vectorizable loop 138 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec119[i] = (fRec82[i] - fZec117[i]); + + } + /* Vectorizable loop 139 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec125[i] = std::floor(fZec124[i]); + + } + /* Vectorizable loop 140 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec127[i] = std::min(8192, std::max(0, int(fZec126[i]))); + + } + /* Vectorizable loop 141 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec129[i] = (fZec128[i] + (2.0f - fRec85[i])); + + } + /* Vectorizable loop 142 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec130[i] = (fRec85[i] - fZec128[i]); + + } + /* Vectorizable loop 143 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec134[i] = std::max(0, iZec133[i]); + + } + /* Vectorizable loop 144 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec137[i] = (0.0f - fZec136[i]); + + } + /* Vectorizable loop 145 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec139[i] = (0.0f - (0.5f * fZec138[i])); + + } + /* Vectorizable loop 146 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec141[i] = (0.0f - (0.333333343f * fZec140[i])); + + } + /* Vectorizable loop 147 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec143[i] = (0.0f - (0.25f * fZec142[i])); + + } + /* Vectorizable loop 148 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec144[i] = (fZec131[i] + (5.0f - fZec135[i])); + + } + /* Vectorizable loop 149 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec145[i] = std::max(0, (iZec133[i] + 1)); + + } + /* Vectorizable loop 150 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec146[i] = (0.0f - fZec138[i]); + + } + /* Vectorizable loop 151 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec147[i] = (0.0f - (0.5f * fZec140[i])); + + } + /* Vectorizable loop 152 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec148[i] = (0.0f - (0.333333343f * fZec142[i])); + + } + /* Vectorizable loop 153 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec149[i] = std::max(0, (iZec133[i] + 2)); + + } + /* Vectorizable loop 154 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec150[i] = (0.0f - fZec140[i]); + + } + /* Vectorizable loop 155 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec151[i] = (0.0f - (0.5f * fZec142[i])); + + } + /* Vectorizable loop 156 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec153[i] = std::max(0, (iZec133[i] + 3)); + + } + /* Vectorizable loop 157 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec154[i] = (0.0f - fZec142[i]); + + } + /* Vectorizable loop 158 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec155[i] = (fZec152[i] * fZec140[i]); + + } + /* Vectorizable loop 159 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec156[i] = std::max(0, (iZec133[i] + 4)); + + } + /* Vectorizable loop 160 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec158[i] = std::floor(fZec157[i]); + + } + /* Vectorizable loop 161 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec163[i] = int(fZec162[i]); + + } + /* Vectorizable loop 162 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec167[i] = (fSlow26 + (fZec161[i] + (2.0f - fZec164[i]))); + + } + /* Vectorizable loop 163 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec168[i] = (fSlow26 + (fZec161[i] + (1.0f - fZec164[i]))); + + } + /* Vectorizable loop 164 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec169[i] = (fZec165[i] * fZec166[i]); + + } + /* Vectorizable loop 165 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec171[i] = std::floor(fZec170[i]); + + } + /* Vectorizable loop 166 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec177[i] = std::floor(fZec176[i]); + + } + /* Vectorizable loop 167 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec187[i] = std::floor(fZec186[i]); + + } + /* Vectorizable loop 168 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec193[i] = std::floor(fZec192[i]); + + } + /* Recursive loop 169 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 16383); + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fYec1_tmp[j8] = fYec1_perm[j8]; + + } + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec52_tmp[j10] = fRec52_perm[j10]; + + } + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + fRec50_tmp[j12] = fRec50_perm[j12]; + + } + fYec2_idx = ((fYec2_idx + fYec2_idx_save) & 16383); + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fYec3_tmp[j16] = fYec3_perm[j16]; + + } + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fRec54_tmp[j18] = fRec54_perm[j18]; + + } + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fRec51_tmp[j20] = fRec51_perm[j20]; + + } + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec5_tmp[j24] = fYec5_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec49_tmp[j26] = fRec49_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec47_tmp[j28] = fRec47_perm[j28]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec7_tmp[j32] = fYec7_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec57_tmp[j34] = fRec57_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec48_tmp[j36] = fRec48_perm[j36]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec9_tmp[j40] = fYec9_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec46_tmp[j42] = fRec46_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec44_tmp[j44] = fRec44_perm[j44]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec11_tmp[j48] = fYec11_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec60_tmp[j50] = fRec60_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec45_tmp[j52] = fRec45_perm[j52]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec13_tmp[j56] = fYec13_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec43_tmp[j58] = fRec43_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec41_tmp[j60] = fRec41_perm[j60]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec15_tmp[j64] = fYec15_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec63_tmp[j66] = fRec63_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec42_tmp[j68] = fRec42_perm[j68]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec17_tmp[j72] = fYec17_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec40_tmp[j74] = fRec40_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec38_tmp[j76] = fRec38_perm[j76]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec19_tmp[j80] = fYec19_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec66_tmp[j82] = fRec66_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec39_tmp[j84] = fRec39_perm[j84]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 1023); + fYec21_idx = ((fYec21_idx + fYec21_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec22_tmp[j88] = fYec22_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec37_tmp[j90] = fRec37_perm[j90]; + + } + fYec23_idx = ((fYec23_idx + fYec23_idx_save) & 1023); + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fYec25_tmp[j94] = fYec25_perm[j94]; + + } + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fRec69_tmp[j96] = fRec69_perm[j96]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fYec27_tmp[j100] = fYec27_perm[j100]; + + } + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec36_tmp[j102] = fRec36_perm[j102]; + + } + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fRec34_tmp[j104] = fRec34_perm[j104]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fYec29_tmp[j108] = fYec29_perm[j108]; + + } + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec72_tmp[j110] = fRec72_perm[j110]; + + } + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fRec35_tmp[j112] = fRec35_perm[j112]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fYec31_tmp[j116] = fYec31_perm[j116]; + + } + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec33_tmp[j118] = fRec33_perm[j118]; + + } + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fRec31_tmp[j120] = fRec31_perm[j120]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fYec33_tmp[j124] = fYec33_perm[j124]; + + } + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec75_tmp[j126] = fRec75_perm[j126]; + + } + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fRec32_tmp[j128] = fRec32_perm[j128]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fYec35_tmp[j132] = fYec35_perm[j132]; + + } + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec30_tmp[j134] = fRec30_perm[j134]; + + } + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fRec28_tmp[j136] = fRec28_perm[j136]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fYec37_tmp[j140] = fYec37_perm[j140]; + + } + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec78_tmp[j142] = fRec78_perm[j142]; + + } + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fRec29_tmp[j144] = fRec29_perm[j144]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fYec39_tmp[j148] = fYec39_perm[j148]; + + } + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec27_tmp[j150] = fRec27_perm[j150]; + + } + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fRec25_tmp[j152] = fRec25_perm[j152]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fYec41_tmp[j156] = fYec41_perm[j156]; + + } + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec81_tmp[j158] = fRec81_perm[j158]; + + } + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fRec26_tmp[j160] = fRec26_perm[j160]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fYec43_tmp[j164] = fYec43_perm[j164]; + + } + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec24_tmp[j166] = fRec24_perm[j166]; + + } + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fRec22_tmp[j168] = fRec22_perm[j168]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fYec45_tmp[j172] = fYec45_perm[j172]; + + } + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec84_tmp[j174] = fRec84_perm[j174]; + + } + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fRec23_tmp[j176] = fRec23_perm[j176]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + fYec47_idx = ((fYec47_idx + fYec47_idx_save) & 16383); + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fYec48_tmp[j180] = fYec48_perm[j180]; + + } + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec21_tmp[j182] = fRec21_perm[j182]; + + } + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fRec20_tmp[j184] = fRec20_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec19_tmp[j186] = fRec19_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec18_tmp[j188] = fRec18_perm[j188]; + + } + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec17_tmp[j190] = fRec17_perm[j190]; + + } + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fRec92_tmp[j192] = fRec92_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec91_tmp[j194] = fRec91_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec90_tmp[j196] = fRec90_perm[j196]; + + } + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fYec49_tmp[j198] = fYec49_perm[j198]; + + } + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fRec89_tmp[j200] = fRec89_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec88_tmp[j202] = fRec88_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec87_tmp[j204] = fRec87_perm[j204]; + + } + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec95_tmp[j206] = fRec95_perm[j206]; + + } + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fRec94_tmp[j208] = fRec94_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec93_tmp[j210] = fRec93_perm[j210]; + + } + fYec50_idx = ((fYec50_idx + fYec50_idx_save) & 1023); + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec14_tmp[j212] = fRec14_perm[j212]; + + } + fYec51_idx = ((fYec51_idx + fYec51_idx_save) & 16383); + fYec52_idx = ((fYec52_idx + fYec52_idx_save) & 16383); + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fYec53_tmp[j216] = fYec53_perm[j216]; + + } + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec101_tmp[j218] = fRec101_perm[j218]; + + } + for (int j220 = 0; (j220 < 4); j220 = (j220 + 1)) { + fRec100_tmp[j220] = fRec100_perm[j220]; + + } + for (int j222 = 0; (j222 < 4); j222 = (j222 + 1)) { + fRec99_tmp[j222] = fRec99_perm[j222]; + + } + for (int j224 = 0; (j224 < 4); j224 = (j224 + 1)) { + fRec98_tmp[j224] = fRec98_perm[j224]; + + } + for (int j226 = 0; (j226 < 4); j226 = (j226 + 1)) { + fRec97_tmp[j226] = fRec97_perm[j226]; + + } + for (int j228 = 0; (j228 < 4); j228 = (j228 + 1)) { + fRec108_tmp[j228] = fRec108_perm[j228]; + + } + for (int j230 = 0; (j230 < 4); j230 = (j230 + 1)) { + fRec107_tmp[j230] = fRec107_perm[j230]; + + } + for (int j232 = 0; (j232 < 4); j232 = (j232 + 1)) { + fRec106_tmp[j232] = fRec106_perm[j232]; + + } + for (int j234 = 0; (j234 < 4); j234 = (j234 + 1)) { + fYec54_tmp[j234] = fYec54_perm[j234]; + + } + for (int j236 = 0; (j236 < 4); j236 = (j236 + 1)) { + fRec105_tmp[j236] = fRec105_perm[j236]; + + } + for (int j238 = 0; (j238 < 4); j238 = (j238 + 1)) { + fRec104_tmp[j238] = fRec104_perm[j238]; + + } + for (int j240 = 0; (j240 < 4); j240 = (j240 + 1)) { + fRec103_tmp[j240] = fRec103_perm[j240]; + + } + for (int j242 = 0; (j242 < 4); j242 = (j242 + 1)) { + fRec111_tmp[j242] = fRec111_perm[j242]; + + } + for (int j244 = 0; (j244 < 4); j244 = (j244 + 1)) { + fRec110_tmp[j244] = fRec110_perm[j244]; + + } + for (int j246 = 0; (j246 < 4); j246 = (j246 + 1)) { + fRec109_tmp[j246] = fRec109_perm[j246]; + + } + fYec55_idx = ((fYec55_idx + fYec55_idx_save) & 1023); + for (int j248 = 0; (j248 < 4); j248 = (j248 + 1)) { + fRec96_tmp[j248] = fRec96_perm[j248]; + + } + fYec56_idx = ((fYec56_idx + fYec56_idx_save) & 16383); + for (int j250 = 0; (j250 < 4); j250 = (j250 + 1)) { + fYec57_tmp[j250] = fYec57_perm[j250]; + + } + for (int j252 = 0; (j252 < 4); j252 = (j252 + 1)) { + fRec13_tmp[j252] = fRec13_perm[j252]; + + } + for (int j254 = 0; (j254 < 4); j254 = (j254 + 1)) { + fRec11_tmp[j254] = fRec11_perm[j254]; + + } + fYec58_idx = ((fYec58_idx + fYec58_idx_save) & 16383); + for (int j258 = 0; (j258 < 4); j258 = (j258 + 1)) { + fYec59_tmp[j258] = fYec59_perm[j258]; + + } + for (int j260 = 0; (j260 < 4); j260 = (j260 + 1)) { + fRec112_tmp[j260] = fRec112_perm[j260]; + + } + for (int j262 = 0; (j262 < 4); j262 = (j262 + 1)) { + fRec12_tmp[j262] = fRec12_perm[j262]; + + } + fYec60_idx = ((fYec60_idx + fYec60_idx_save) & 16383); + for (int j264 = 0; (j264 < 4); j264 = (j264 + 1)) { + fYec61_tmp[j264] = fYec61_perm[j264]; + + } + for (int j266 = 0; (j266 < 4); j266 = (j266 + 1)) { + fRec10_tmp[j266] = fRec10_perm[j266]; + + } + for (int j268 = 0; (j268 < 4); j268 = (j268 + 1)) { + fRec8_tmp[j268] = fRec8_perm[j268]; + + } + fYec62_idx = ((fYec62_idx + fYec62_idx_save) & 16383); + for (int j270 = 0; (j270 < 4); j270 = (j270 + 1)) { + fYec63_tmp[j270] = fYec63_perm[j270]; + + } + for (int j272 = 0; (j272 < 4); j272 = (j272 + 1)) { + fRec114_tmp[j272] = fRec114_perm[j272]; + + } + for (int j274 = 0; (j274 < 4); j274 = (j274 + 1)) { + fRec9_tmp[j274] = fRec9_perm[j274]; + + } + fYec64_idx = ((fYec64_idx + fYec64_idx_save) & 16383); + for (int j276 = 0; (j276 < 4); j276 = (j276 + 1)) { + fYec65_tmp[j276] = fYec65_perm[j276]; + + } + for (int j278 = 0; (j278 < 4); j278 = (j278 + 1)) { + fRec7_tmp[j278] = fRec7_perm[j278]; + + } + for (int j280 = 0; (j280 < 4); j280 = (j280 + 1)) { + fRec5_tmp[j280] = fRec5_perm[j280]; + + } + fYec66_idx = ((fYec66_idx + fYec66_idx_save) & 16383); + for (int j284 = 0; (j284 < 4); j284 = (j284 + 1)) { + fYec67_tmp[j284] = fYec67_perm[j284]; + + } + for (int j286 = 0; (j286 < 4); j286 = (j286 + 1)) { + fRec115_tmp[j286] = fRec115_perm[j286]; + + } + for (int j288 = 0; (j288 < 4); j288 = (j288 + 1)) { + fRec6_tmp[j288] = fRec6_perm[j288]; + + } + fYec68_idx = ((fYec68_idx + fYec68_idx_save) & 16383); + for (int j292 = 0; (j292 < 4); j292 = (j292 + 1)) { + fYec69_tmp[j292] = fYec69_perm[j292]; + + } + for (int j294 = 0; (j294 < 4); j294 = (j294 + 1)) { + fRec4_tmp[j294] = fRec4_perm[j294]; + + } + for (int j296 = 0; (j296 < 4); j296 = (j296 + 1)) { + fRec2_tmp[j296] = fRec2_perm[j296]; + + } + fYec70_idx = ((fYec70_idx + fYec70_idx_save) & 16383); + for (int j298 = 0; (j298 < 4); j298 = (j298 + 1)) { + fYec71_tmp[j298] = fYec71_perm[j298]; + + } + for (int j300 = 0; (j300 < 4); j300 = (j300 + 1)) { + fRec118_tmp[j300] = fRec118_perm[j300]; + + } + for (int j302 = 0; (j302 < 4); j302 = (j302 + 1)) { + fRec3_tmp[j302] = fRec3_perm[j302]; + + } + for (int j304 = 0; (j304 < 4); j304 = (j304 + 1)) { + fRec0_tmp[j304] = fRec0_perm[j304]; + + } + for (int j306 = 0; (j306 < 4); j306 = (j306 + 1)) { + fRec1_tmp[j306] = fRec1_perm[j306]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = ((0.760313988f * fRec0[(i - 1)]) - (0.649555743f * fRec50[(i - 1)])); + fZec2[i] = ((0.760313988f * fRec1[(i - 1)]) - (0.649555743f * fRec51[(i - 1)])); + fYec0[((i + fYec0_idx) & 16383)] = ((0.707106769f * fZec1[i]) - (0.707106769f * fZec2[i])); + fYec1[i] = fYec0[(((i + fYec0_idx) - std::min(8192, std::max(0, int(fZec3[i])))) & 16383)]; + fRec52[i] = (fYec1[(i - 1)] - (((fZec4[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec1[i])) / (fRec53[i] - fZec4[i]))); + fRec50[i] = fRec52[i]; + fYec2[((i + fYec2_idx) & 16383)] = ((0.707106769f * fZec1[i]) + (0.707106769f * fZec2[i])); + fYec3[i] = fYec2[(((i + fYec2_idx) - std::min(8192, std::max(0, int(fZec5[i])))) & 16383)]; + fRec54[i] = (fYec3[(i - 1)] - (((fZec6[i] + (2.0f - fRec55[i])) * (fRec54[(i - 1)] - fYec3[i])) / (fRec55[i] - fZec6[i]))); + fRec51[i] = fRec54[i]; + fZec7[i] = ((0.760313988f * fRec50[(i - 1)]) + (0.649555743f * fRec0[(i - 1)])); + fZec8[i] = ((0.760313988f * fZec7[i]) - (0.649555743f * fRec47[(i - 1)])); + fZec9[i] = ((0.760313988f * fRec51[(i - 1)]) + (0.649555743f * fRec1[(i - 1)])); + fZec10[i] = ((0.760313988f * fZec9[i]) - (0.649555743f * fRec48[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((0.707106769f * fZec8[i]) - (0.707106769f * fZec10[i])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec11[i])))) & 16383)]; + fRec49[i] = (fYec5[(i - 1)] - (((fZec12[i] + (2.0f - fRec56[i])) * (fRec49[(i - 1)] - fYec5[i])) / (fRec56[i] - fZec12[i]))); + fRec47[i] = fRec49[i]; + fYec6[((i + fYec6_idx) & 16383)] = ((0.707106769f * fZec8[i]) + (0.707106769f * fZec10[i])); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec13[i])))) & 16383)]; + fRec57[i] = (fYec7[(i - 1)] - (((fZec14[i] + (2.0f - fRec58[i])) * (fRec57[(i - 1)] - fYec7[i])) / (fRec58[i] - fZec14[i]))); + fRec48[i] = fRec57[i]; + fZec15[i] = ((0.760313988f * fRec47[(i - 1)]) + (0.649555743f * fZec7[i])); + fZec16[i] = ((0.760313988f * fZec15[i]) - (0.649555743f * fRec44[(i - 1)])); + fZec17[i] = ((0.760313988f * fRec48[(i - 1)]) + (0.649555743f * fZec9[i])); + fZec18[i] = ((0.760313988f * fZec17[i]) - (0.649555743f * fRec45[(i - 1)])); + fYec8[((i + fYec8_idx) & 16383)] = ((0.707106769f * fZec16[i]) - (0.707106769f * fZec18[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec19[i])))) & 16383)]; + fRec46[i] = (fYec9[(i - 1)] - (((fZec20[i] + (2.0f - fRec59[i])) * (fRec46[(i - 1)] - fYec9[i])) / (fRec59[i] - fZec20[i]))); + fRec44[i] = fRec46[i]; + fYec10[((i + fYec10_idx) & 16383)] = ((0.707106769f * fZec16[i]) + (0.707106769f * fZec18[i])); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec21[i])))) & 16383)]; + fRec60[i] = (fYec11[(i - 1)] - (((fZec22[i] + (2.0f - fRec61[i])) * (fRec60[(i - 1)] - fYec11[i])) / (fRec61[i] - fZec22[i]))); + fRec45[i] = fRec60[i]; + fZec23[i] = ((0.760313988f * fRec44[(i - 1)]) + (0.649555743f * fZec15[i])); + fZec24[i] = ((0.760313988f * fZec23[i]) - (0.649555743f * fRec41[(i - 1)])); + fZec25[i] = ((0.760313988f * fRec45[(i - 1)]) + (0.649555743f * fZec17[i])); + fZec26[i] = ((0.760313988f * fZec25[i]) - (0.649555743f * fRec42[(i - 1)])); + fYec12[((i + fYec12_idx) & 16383)] = ((0.707106769f * fZec24[i]) - (0.707106769f * fZec26[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec27[i])))) & 16383)]; + fRec43[i] = (fYec13[(i - 1)] - (((fZec28[i] + (2.0f - fRec62[i])) * (fRec43[(i - 1)] - fYec13[i])) / (fRec62[i] - fZec28[i]))); + fRec41[i] = fRec43[i]; + fYec14[((i + fYec14_idx) & 16383)] = ((0.707106769f * fZec24[i]) + (0.707106769f * fZec26[i])); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec29[i])))) & 16383)]; + fRec63[i] = (fYec15[(i - 1)] - (((fZec30[i] + (2.0f - fRec64[i])) * (fRec63[(i - 1)] - fYec15[i])) / (fRec64[i] - fZec30[i]))); + fRec42[i] = fRec63[i]; + fZec31[i] = ((0.760313988f * fRec41[(i - 1)]) + (0.649555743f * fZec23[i])); + fZec32[i] = ((0.760313988f * fZec31[i]) - (0.649555743f * fRec38[(i - 1)])); + fZec33[i] = ((0.760313988f * fRec42[(i - 1)]) + (0.649555743f * fZec25[i])); + fZec34[i] = ((0.760313988f * fZec33[i]) - (0.649555743f * fRec39[(i - 1)])); + fYec16[((i + fYec16_idx) & 16383)] = ((0.707106769f * fZec32[i]) - (0.707106769f * fZec34[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec35[i])))) & 16383)]; + fRec40[i] = (fYec17[(i - 1)] - (((fZec36[i] + (2.0f - fRec65[i])) * (fRec40[(i - 1)] - fYec17[i])) / (fRec65[i] - fZec36[i]))); + fRec38[i] = fRec40[i]; + fYec18[((i + fYec18_idx) & 16383)] = ((0.707106769f * fZec32[i]) + (0.707106769f * fZec34[i])); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec37[i])))) & 16383)]; + fRec66[i] = (fYec19[(i - 1)] - (((fZec38[i] + (2.0f - fRec67[i])) * (fRec66[(i - 1)] - fYec19[i])) / (fRec67[i] - fZec38[i]))); + fRec39[i] = fRec66[i]; + fYec20[((i + fYec20_idx) & 1023)] = ((0.760313988f * fRec38[(i - 1)]) + (0.649555743f * fZec31[i])); + fYec21[((i + fYec21_idx) & 16383)] = (((((fYec20[(((i + fYec20_idx) - iZec42[i]) & 1023)] * fZec45[i]) * fZec47[i]) * fZec49[i]) * fZec51[i]) + (fZec52[i] * ((((((fYec20[(((i + fYec20_idx) - iZec53[i]) & 1023)] * fZec54[i]) * fZec55[i]) * fZec56[i]) + (0.5f * (((fZec44[i] * fYec20[(((i + fYec20_idx) - iZec57[i]) & 1023)]) * fZec58[i]) * fZec59[i]))) + (0.166666672f * ((fZec60[i] * fYec20[(((i + fYec20_idx) - iZec61[i]) & 1023)]) * fZec62[i]))) + (0.0416666679f * (fZec63[i] * fYec20[(((i + fYec20_idx) - iZec64[i]) & 1023)]))))); + fYec22[i] = fYec21[(((i + fYec21_idx) - std::min(8192, std::max(0, int(fZec65[i])))) & 16383)]; + fRec37[i] = (fYec22[(i - 1)] - (((fZec66[i] + (2.0f - fRec68[i])) * (fRec37[(i - 1)] - fYec22[i])) / (fRec68[i] - fZec66[i]))); + fYec23[((i + fYec23_idx) & 1023)] = ((0.760313988f * fRec39[(i - 1)]) + (0.649555743f * fZec33[i])); + fYec24[((i + fYec24_idx) & 16383)] = (((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, iZec69[i]))) & 1023)] * (0.0f - fZec71[i])) * (0.0f - (0.5f * fZec72[i]))) * (0.0f - (0.333333343f * fZec73[i]))) * (0.0f - (0.25f * fZec74[i]))) + ((fSlow26 + (fZec67[i] + (5.0f - fZec70[i]))) * ((((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 1)))) & 1023)] * (0.0f - fZec72[i])) * (0.0f - (0.5f * fZec73[i]))) * (0.0f - (0.333333343f * fZec74[i]))) + (0.5f * (((fZec71[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 2)))) & 1023)]) * (0.0f - fZec73[i])) * (0.0f - (0.5f * fZec74[i]))))) + (0.166666672f * ((fZec75[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 3)))) & 1023)]) * (0.0f - fZec74[i])))) + (0.0416666679f * ((fZec75[i] * fZec73[i]) * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 4)))) & 1023)]))))); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec69[i] = (fYec25[(i - 1)] - (((fZec77[i] + (2.0f - fRec70[i])) * (fRec69[(i - 1)] - fYec25[i])) / (fRec70[i] - fZec77[i]))); + fZec78[i] = ((0.760313988f * fRec37[i]) - (0.649555743f * fRec34[(i - 1)])); + fZec79[i] = ((0.760313988f * fRec69[i]) - (0.649555743f * fRec35[(i - 1)])); + fYec26[((i + fYec26_idx) & 16383)] = ((0.707106769f * fZec78[i]) - (0.707106769f * fZec79[i])); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec36[i] = (fYec27[(i - 1)] - (((fZec81[i] + (2.0f - fRec71[i])) * (fRec36[(i - 1)] - fYec27[i])) / (fRec71[i] - fZec81[i]))); + fRec34[i] = fRec36[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((0.707106769f * fZec78[i]) + (0.707106769f * fZec79[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec82[i])))) & 16383)]; + fRec72[i] = (fYec29[(i - 1)] - (((fZec83[i] + (2.0f - fRec73[i])) * (fRec72[(i - 1)] - fYec29[i])) / (fRec73[i] - fZec83[i]))); + fRec35[i] = fRec72[i]; + fZec84[i] = ((0.760313988f * fRec34[(i - 1)]) + (0.649555743f * fRec37[i])); + fZec85[i] = ((0.760313988f * fZec84[i]) - (0.649555743f * fRec31[(i - 1)])); + fZec86[i] = ((0.760313988f * fRec35[(i - 1)]) + (0.649555743f * fRec69[i])); + fZec87[i] = ((0.760313988f * fZec86[i]) - (0.649555743f * fRec32[(i - 1)])); + fYec30[((i + fYec30_idx) & 16383)] = ((0.707106769f * fZec85[i]) - (0.707106769f * fZec87[i])); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec88[i])))) & 16383)]; + fRec33[i] = (fYec31[(i - 1)] - (((fZec89[i] + (2.0f - fRec74[i])) * (fRec33[(i - 1)] - fYec31[i])) / (fRec74[i] - fZec89[i]))); + fRec31[i] = fRec33[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((0.707106769f * fZec85[i]) + (0.707106769f * fZec87[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - iZec91[i]) & 16383)]; + fRec75[i] = (fYec33[(i - 1)] - ((fZec93[i] * (fRec75[(i - 1)] - fYec33[i])) / fZec94[i])); + fRec32[i] = fRec75[i]; + fZec95[i] = ((0.760313988f * fRec31[(i - 1)]) + (0.649555743f * fZec84[i])); + fZec96[i] = ((0.760313988f * fZec95[i]) - (0.649555743f * fRec28[(i - 1)])); + fZec97[i] = ((0.760313988f * fRec32[(i - 1)]) + (0.649555743f * fZec86[i])); + fZec98[i] = ((0.760313988f * fZec97[i]) - (0.649555743f * fRec29[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = ((0.707106769f * fZec96[i]) - (0.707106769f * fZec98[i])); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec99[i])))) & 16383)]; + fRec30[i] = (fYec35[(i - 1)] - (((fZec100[i] + (2.0f - fRec77[i])) * (fRec30[(i - 1)] - fYec35[i])) / (fRec77[i] - fZec100[i]))); + fRec28[i] = fRec30[i]; + fYec36[((i + fYec36_idx) & 16383)] = ((0.707106769f * fZec96[i]) + (0.707106769f * fZec98[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - iZec102[i]) & 16383)]; + fRec78[i] = (fYec37[(i - 1)] - ((fZec104[i] * (fRec78[(i - 1)] - fYec37[i])) / fZec105[i])); + fRec29[i] = fRec78[i]; + fZec106[i] = ((0.760313988f * fRec28[(i - 1)]) + (0.649555743f * fZec95[i])); + fZec107[i] = ((0.760313988f * fZec106[i]) - (0.649555743f * fRec25[(i - 1)])); + fZec108[i] = ((0.760313988f * fRec29[(i - 1)]) + (0.649555743f * fZec97[i])); + fZec109[i] = ((0.760313988f * fZec108[i]) - (0.649555743f * fRec26[(i - 1)])); + fYec38[((i + fYec38_idx) & 16383)] = ((0.707106769f * fZec107[i]) - (0.707106769f * fZec109[i])); + fYec39[i] = fYec38[(((i + fYec38_idx) - iZec111[i]) & 16383)]; + fRec27[i] = (fYec39[(i - 1)] - ((fZec113[i] * (fRec27[(i - 1)] - fYec39[i])) / fZec114[i])); + fRec25[i] = fRec27[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((0.707106769f * fZec107[i]) + (0.707106769f * fZec109[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - iZec116[i]) & 16383)]; + fRec81[i] = (fYec41[(i - 1)] - ((fZec118[i] * (fRec81[(i - 1)] - fYec41[i])) / fZec119[i])); + fRec26[i] = fRec81[i]; + fZec120[i] = ((0.760313988f * fRec25[(i - 1)]) + (0.649555743f * fZec106[i])); + fZec121[i] = ((0.760313988f * fZec120[i]) - (0.649555743f * fRec22[(i - 1)])); + fZec122[i] = ((0.760313988f * fRec26[(i - 1)]) + (0.649555743f * fZec108[i])); + fZec123[i] = ((0.760313988f * fZec122[i]) - (0.649555743f * fRec23[(i - 1)])); + fYec42[((i + fYec42_idx) & 16383)] = ((0.707106769f * fZec121[i]) - (0.707106769f * fZec123[i])); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec124[i])))) & 16383)]; + fRec24[i] = (fYec43[(i - 1)] - (((fZec125[i] + (2.0f - fRec83[i])) * (fRec24[(i - 1)] - fYec43[i])) / (fRec83[i] - fZec125[i]))); + fRec22[i] = fRec24[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((0.707106769f * fZec121[i]) + (0.707106769f * fZec123[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - iZec127[i]) & 16383)]; + fRec84[i] = (fYec45[(i - 1)] - ((fZec129[i] * (fRec84[(i - 1)] - fYec45[i])) / fZec130[i])); + fRec23[i] = fRec84[i]; + fYec46[((i + fYec46_idx) & 16383)] = ((0.760313988f * fRec22[(i - 1)]) + (0.649555743f * fZec120[i])); + fYec47[((i + fYec47_idx) & 16383)] = (((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec134[i])) & 16383)] * fZec137[i]) * fZec139[i]) * fZec141[i]) * fZec143[i]) + (fZec144[i] * ((((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec145[i])) & 16383)] * fZec146[i]) * fZec147[i]) * fZec148[i]) + (0.5f * (((fZec136[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec149[i])) & 16383)]) * fZec150[i]) * fZec151[i]))) + (0.166666672f * ((fZec152[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec153[i])) & 16383)]) * fZec154[i]))) + (0.0416666679f * (fZec155[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec156[i])) & 16383)]))))); + fYec48[i] = fYec47[(((i + fYec47_idx) - std::min(8192, std::max(0, int(fZec157[i])))) & 16383)]; + fRec21[i] = (fYec48[(i - 1)] - (((fZec158[i] + (2.0f - fRec86[i])) * (fRec21[(i - 1)] - fYec48[i])) / (fRec86[i] - fZec158[i]))); + fRec20[i] = ((fSlow55 * fRec21[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec20[(i - 1)]) - (fSlow53 * fRec21[i])))); + fRec19[i] = (fRec20[i] - (fSlow58 * ((fSlow59 * fRec19[(i - 2)]) + (fSlow62 * fRec19[(i - 1)])))); + fRec18[i] = ((fSlow58 * (((fSlow61 * fRec19[i]) + (fSlow63 * fRec19[(i - 1)])) + (fSlow61 * fRec19[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec18[(i - 2)]) + (fSlow62 * fRec18[(i - 1)])))); + fZec159[i] = (fSlow73 * fRec17[(i - 1)]); + fRec17[i] = ((fSlow65 * (((fSlow61 * fRec18[i]) + (fSlow63 * fRec18[(i - 1)])) + (fSlow61 * fRec18[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec17[(i - 2)]) + fZec159[i]))); + fRec92[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec92[(i - 1)]) - (fRec21[i] + fRec21[(i - 1)])))); + fRec91[i] = (fRec92[i] - (fSlow58 * ((fSlow59 * fRec91[(i - 2)]) + (fSlow62 * fRec91[(i - 1)])))); + fRec90[i] = ((fSlow58 * (fRec91[(i - 2)] + (fRec91[i] + (2.0f * fRec91[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec90[(i - 2)]) + (fSlow62 * fRec90[(i - 1)])))); + fZec160[i] = (fRec90[(i - 2)] + (fRec90[i] + (2.0f * fRec90[(i - 1)]))); + fYec49[i] = (fSlow65 * fZec160[i]); + fRec89[i] = ((fSlow75 * fYec49[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec89[(i - 1)]) - (fSlow78 * fZec160[i])))); + fRec88[i] = (fRec89[i] - (fSlow79 * ((fSlow80 * fRec88[(i - 2)]) + (fSlow73 * fRec88[(i - 1)])))); + fRec87[i] = ((fSlow79 * (((fSlow72 * fRec88[i]) + (fSlow81 * fRec88[(i - 1)])) + (fSlow72 * fRec88[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec87[(i - 2)]) + (fSlow73 * fRec87[(i - 1)])))); + fRec95[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec95[(i - 1)]) - (fYec49[i] + fYec49[(i - 1)])))); + fRec94[i] = (fRec95[i] - (fSlow79 * ((fSlow80 * fRec94[(i - 2)]) + (fSlow73 * fRec94[(i - 1)])))); + fRec93[i] = ((fSlow79 * (fRec94[(i - 2)] + (fRec94[i] + (2.0f * fRec94[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec93[(i - 2)]) + (fSlow73 * fRec93[(i - 1)])))); + fYec50[((i + fYec50_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec17[(i - 2)] + (fSlow69 * (fZec159[i] + (fSlow70 * fRec17[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec87[i]) + (fSlow81 * fRec87[(i - 1)])) + (fSlow72 * fRec87[(i - 2)]))) + (fSlow89 * (fRec93[(i - 2)] + (fRec93[i] + (2.0f * fRec93[(i - 1)])))))))) + float(input0[i])); + fRec14[i] = ((fSlow84 * fRec14[(i - 1)]) + (fSlow85 * (((((fZec137[i] * fZec139[i]) * fZec141[i]) * fZec143[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec134[i])) & 1023)]) + (fZec144[i] * ((((((fZec146[i] * fZec147[i]) * fZec148[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec145[i])) & 1023)]) + (0.5f * (((fZec136[i] * fZec150[i]) * fZec151[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec149[i])) & 1023)]))) + (0.166666672f * ((fZec152[i] * fZec154[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec153[i])) & 1023)]))) + (0.0416666679f * (fZec155[i] * fYec50[(((i + fYec50_idx) - std::min(512, iZec156[i])) & 1023)]))))))); + fYec51[((i + fYec51_idx) & 16383)] = ((0.760313988f * fRec23[(i - 1)]) + (0.649555743f * fZec122[i])); + fYec52[((i + fYec52_idx) & 16383)] = (((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, iZec163[i]))) & 16383)] * (0.0f - fZec165[i])) * (0.0f - (0.5f * fZec166[i]))) * (0.0f - (0.333333343f * fZec167[i]))) * (0.0f - (0.25f * fZec168[i]))) + ((fSlow26 + (fZec161[i] + (5.0f - fZec164[i]))) * ((((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 1)))) & 16383)] * (0.0f - fZec166[i])) * (0.0f - (0.5f * fZec167[i]))) * (0.0f - (0.333333343f * fZec168[i]))) + (0.5f * (((fZec165[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 2)))) & 16383)]) * (0.0f - fZec167[i])) * (0.0f - (0.5f * fZec168[i]))))) + (0.166666672f * ((fZec169[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 3)))) & 16383)]) * (0.0f - fZec168[i])))) + (0.0416666679f * ((fZec169[i] * fZec167[i]) * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 4)))) & 16383)]))))); + fYec53[i] = fYec52[(((i + fYec52_idx) - std::min(8192, std::max(0, int(fZec170[i])))) & 16383)]; + fRec101[i] = (fYec53[(i - 1)] - (((fZec171[i] + (2.0f - fRec102[i])) * (fRec101[(i - 1)] - fYec53[i])) / (fRec102[i] - fZec171[i]))); + fRec100[i] = ((fSlow55 * fRec101[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec100[(i - 1)]) - (fSlow53 * fRec101[i])))); + fRec99[i] = (fRec100[i] - (fSlow58 * ((fSlow59 * fRec99[(i - 2)]) + (fSlow62 * fRec99[(i - 1)])))); + fRec98[i] = ((fSlow58 * (((fSlow61 * fRec99[i]) + (fSlow63 * fRec99[(i - 1)])) + (fSlow61 * fRec99[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec98[(i - 2)]) + (fSlow62 * fRec98[(i - 1)])))); + fZec172[i] = (fSlow73 * fRec97[(i - 1)]); + fRec97[i] = ((fSlow65 * (((fSlow61 * fRec98[i]) + (fSlow63 * fRec98[(i - 1)])) + (fSlow61 * fRec98[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec97[(i - 2)]) + fZec172[i]))); + fRec108[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec108[(i - 1)]) - (fRec101[i] + fRec101[(i - 1)])))); + fRec107[i] = (fRec108[i] - (fSlow58 * ((fSlow59 * fRec107[(i - 2)]) + (fSlow62 * fRec107[(i - 1)])))); + fRec106[i] = ((fSlow58 * (fRec107[(i - 2)] + (fRec107[i] + (2.0f * fRec107[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec106[(i - 2)]) + (fSlow62 * fRec106[(i - 1)])))); + fZec173[i] = (fRec106[(i - 2)] + (fRec106[i] + (2.0f * fRec106[(i - 1)]))); + fYec54[i] = (fSlow65 * fZec173[i]); + fRec105[i] = ((fSlow75 * fYec54[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec105[(i - 1)]) - (fSlow78 * fZec173[i])))); + fRec104[i] = (fRec105[i] - (fSlow79 * ((fSlow80 * fRec104[(i - 2)]) + (fSlow73 * fRec104[(i - 1)])))); + fRec103[i] = ((fSlow79 * (((fSlow72 * fRec104[i]) + (fSlow81 * fRec104[(i - 1)])) + (fSlow72 * fRec104[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec103[(i - 2)]) + (fSlow73 * fRec103[(i - 1)])))); + fRec111[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec111[(i - 1)]) - (fYec54[i] + fYec54[(i - 1)])))); + fRec110[i] = (fRec111[i] - (fSlow79 * ((fSlow80 * fRec110[(i - 2)]) + (fSlow73 * fRec110[(i - 1)])))); + fRec109[i] = ((fSlow79 * (fRec110[(i - 2)] + (fRec110[i] + (2.0f * fRec110[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec109[(i - 2)]) + (fSlow73 * fRec109[(i - 1)])))); + fYec55[((i + fYec55_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec97[(i - 2)] + (fSlow69 * (fZec172[i] + (fSlow70 * fRec97[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec103[i]) + (fSlow81 * fRec103[(i - 1)])) + (fSlow72 * fRec103[(i - 2)]))) + (fSlow89 * (fRec109[(i - 2)] + (fRec109[i] + (2.0f * fRec109[(i - 1)])))))))) + float(input1[i])); + fRec96[i] = ((fSlow84 * fRec96[(i - 1)]) + (fSlow85 * (((((fZec45[i] * fZec47[i]) * fZec49[i]) * fZec51[i]) * fYec55[(((i + fYec55_idx) - iZec42[i]) & 1023)]) + (fZec52[i] * ((((((fZec54[i] * fZec55[i]) * fZec56[i]) * fYec55[(((i + fYec55_idx) - iZec53[i]) & 1023)]) + (0.5f * (((fZec44[i] * fZec58[i]) * fZec59[i]) * fYec55[(((i + fYec55_idx) - iZec57[i]) & 1023)]))) + (0.166666672f * ((fZec60[i] * fZec62[i]) * fYec55[(((i + fYec55_idx) - iZec61[i]) & 1023)]))) + (0.0416666679f * (fZec63[i] * fYec55[(((i + fYec55_idx) - iZec64[i]) & 1023)]))))))); + fZec174[i] = ((fSlow93 * fRec14[i]) - (fSlow94 * fRec11[(i - 1)])); + fZec175[i] = ((fSlow93 * fRec96[i]) - (fSlow94 * fRec12[(i - 1)])); + fYec56[((i + fYec56_idx) & 16383)] = ((0.707106769f * fZec174[i]) - (0.707106769f * fZec175[i])); + fYec57[i] = fYec56[(((i + fYec56_idx) - iZec91[i]) & 16383)]; + fRec13[i] = (fYec57[(i - 1)] - ((fZec93[i] * (fRec13[(i - 1)] - fYec57[i])) / fZec94[i])); + fRec11[i] = fRec13[i]; + fYec58[((i + fYec58_idx) & 16383)] = ((0.707106769f * fZec174[i]) + (0.707106769f * fZec175[i])); + fYec59[i] = fYec58[(((i + fYec58_idx) - std::min(8192, std::max(0, int(fZec176[i])))) & 16383)]; + fRec112[i] = (fYec59[(i - 1)] - (((fZec177[i] + (2.0f - fRec113[i])) * (fRec112[(i - 1)] - fYec59[i])) / (fRec113[i] - fZec177[i]))); + fRec12[i] = fRec112[i]; + fZec178[i] = ((fSlow93 * fRec11[(i - 1)]) + (fSlow94 * fRec14[i])); + fZec179[i] = ((fSlow93 * fZec178[i]) - (fSlow94 * fRec8[(i - 1)])); + fZec180[i] = ((fSlow93 * fRec12[(i - 1)]) + (fSlow94 * fRec96[i])); + fZec181[i] = ((fSlow93 * fZec180[i]) - (fSlow94 * fRec9[(i - 1)])); + fYec60[((i + fYec60_idx) & 16383)] = ((0.707106769f * fZec179[i]) - (0.707106769f * fZec181[i])); + fYec61[i] = fYec60[(((i + fYec60_idx) - iZec111[i]) & 16383)]; + fRec10[i] = (fYec61[(i - 1)] - ((fZec113[i] * (fRec10[(i - 1)] - fYec61[i])) / fZec114[i])); + fRec8[i] = fRec10[i]; + fYec62[((i + fYec62_idx) & 16383)] = ((0.707106769f * fZec179[i]) + (0.707106769f * fZec181[i])); + fYec63[i] = fYec62[(((i + fYec62_idx) - iZec102[i]) & 16383)]; + fRec114[i] = (fYec63[(i - 1)] - ((fZec104[i] * (fRec114[(i - 1)] - fYec63[i])) / fZec105[i])); + fRec9[i] = fRec114[i]; + fZec182[i] = ((fSlow93 * fRec8[(i - 1)]) + (fSlow94 * fZec178[i])); + fZec183[i] = ((fSlow93 * fZec182[i]) - (fSlow94 * fRec5[(i - 1)])); + fZec184[i] = ((fSlow93 * fRec9[(i - 1)]) + (fSlow94 * fZec180[i])); + fZec185[i] = ((fSlow93 * fZec184[i]) - (fSlow94 * fRec6[(i - 1)])); + fYec64[((i + fYec64_idx) & 16383)] = ((0.707106769f * fZec183[i]) - (0.707106769f * fZec185[i])); + fYec65[i] = fYec64[(((i + fYec64_idx) - iZec116[i]) & 16383)]; + fRec7[i] = (fYec65[(i - 1)] - ((fZec118[i] * (fRec7[(i - 1)] - fYec65[i])) / fZec119[i])); + fRec5[i] = fRec7[i]; + fYec66[((i + fYec66_idx) & 16383)] = ((0.707106769f * fZec183[i]) + (0.707106769f * fZec185[i])); + fYec67[i] = fYec66[(((i + fYec66_idx) - std::min(8192, std::max(0, int(fZec186[i])))) & 16383)]; + fRec115[i] = (fYec67[(i - 1)] - (((fZec187[i] + (2.0f - fRec116[i])) * (fRec115[(i - 1)] - fYec67[i])) / (fRec116[i] - fZec187[i]))); + fRec6[i] = fRec115[i]; + fZec188[i] = ((fSlow93 * fRec5[(i - 1)]) + (fSlow94 * fZec182[i])); + fZec189[i] = ((fSlow93 * fZec188[i]) - (fSlow94 * fRec2[(i - 1)])); + fZec190[i] = ((fSlow93 * fRec6[(i - 1)]) + (fSlow94 * fZec184[i])); + fZec191[i] = ((fSlow93 * fZec190[i]) - (fSlow94 * fRec3[(i - 1)])); + fYec68[((i + fYec68_idx) & 16383)] = ((0.707106769f * fZec189[i]) - (0.707106769f * fZec191[i])); + fYec69[i] = fYec68[(((i + fYec68_idx) - std::min(8192, std::max(0, int(fZec192[i])))) & 16383)]; + fRec4[i] = (fYec69[(i - 1)] - (((fZec193[i] + (2.0f - fRec117[i])) * (fRec4[(i - 1)] - fYec69[i])) / (fRec117[i] - fZec193[i]))); + fRec2[i] = fRec4[i]; + fYec70[((i + fYec70_idx) & 16383)] = ((0.707106769f * fZec189[i]) + (0.707106769f * fZec191[i])); + fYec71[i] = fYec70[(((i + fYec70_idx) - iZec127[i]) & 16383)]; + fRec118[i] = (fYec71[(i - 1)] - ((fZec129[i] * (fRec118[(i - 1)] - fYec71[i])) / fZec130[i])); + fRec3[i] = fRec118[i]; + fRec0[i] = ((fSlow93 * fRec2[(i - 1)]) + (fSlow94 * fZec188[i])); + fRec1[i] = ((fSlow93 * fRec3[(i - 1)]) + (fSlow94 * fZec190[i])); + + } + /* Post code */ + fYec70_idx_save = vsize; + for (int j299 = 0; (j299 < 4); j299 = (j299 + 1)) { + fYec71_perm[j299] = fYec71_tmp[(vsize + j299)]; + + } + for (int j301 = 0; (j301 < 4); j301 = (j301 + 1)) { + fRec118_perm[j301] = fRec118_tmp[(vsize + j301)]; + + } + fYec68_idx_save = vsize; + for (int j293 = 0; (j293 < 4); j293 = (j293 + 1)) { + fYec69_perm[j293] = fYec69_tmp[(vsize + j293)]; + + } + fYec66_idx_save = vsize; + for (int j285 = 0; (j285 < 4); j285 = (j285 + 1)) { + fYec67_perm[j285] = fYec67_tmp[(vsize + j285)]; + + } + for (int j287 = 0; (j287 < 4); j287 = (j287 + 1)) { + fRec115_perm[j287] = fRec115_tmp[(vsize + j287)]; + + } + fYec64_idx_save = vsize; + for (int j277 = 0; (j277 < 4); j277 = (j277 + 1)) { + fYec65_perm[j277] = fYec65_tmp[(vsize + j277)]; + + } + fYec62_idx_save = vsize; + for (int j271 = 0; (j271 < 4); j271 = (j271 + 1)) { + fYec63_perm[j271] = fYec63_tmp[(vsize + j271)]; + + } + for (int j273 = 0; (j273 < 4); j273 = (j273 + 1)) { + fRec114_perm[j273] = fRec114_tmp[(vsize + j273)]; + + } + fYec60_idx_save = vsize; + for (int j265 = 0; (j265 < 4); j265 = (j265 + 1)) { + fYec61_perm[j265] = fYec61_tmp[(vsize + j265)]; + + } + fYec58_idx_save = vsize; + for (int j259 = 0; (j259 < 4); j259 = (j259 + 1)) { + fYec59_perm[j259] = fYec59_tmp[(vsize + j259)]; + + } + for (int j261 = 0; (j261 < 4); j261 = (j261 + 1)) { + fRec112_perm[j261] = fRec112_tmp[(vsize + j261)]; + + } + fYec56_idx_save = vsize; + for (int j251 = 0; (j251 < 4); j251 = (j251 + 1)) { + fYec57_perm[j251] = fYec57_tmp[(vsize + j251)]; + + } + fYec55_idx_save = vsize; + for (int j243 = 0; (j243 < 4); j243 = (j243 + 1)) { + fRec111_perm[j243] = fRec111_tmp[(vsize + j243)]; + + } + for (int j245 = 0; (j245 < 4); j245 = (j245 + 1)) { + fRec110_perm[j245] = fRec110_tmp[(vsize + j245)]; + + } + for (int j247 = 0; (j247 < 4); j247 = (j247 + 1)) { + fRec109_perm[j247] = fRec109_tmp[(vsize + j247)]; + + } + for (int j235 = 0; (j235 < 4); j235 = (j235 + 1)) { + fYec54_perm[j235] = fYec54_tmp[(vsize + j235)]; + + } + for (int j229 = 0; (j229 < 4); j229 = (j229 + 1)) { + fRec108_perm[j229] = fRec108_tmp[(vsize + j229)]; + + } + for (int j231 = 0; (j231 < 4); j231 = (j231 + 1)) { + fRec107_perm[j231] = fRec107_tmp[(vsize + j231)]; + + } + for (int j233 = 0; (j233 < 4); j233 = (j233 + 1)) { + fRec106_perm[j233] = fRec106_tmp[(vsize + j233)]; + + } + for (int j237 = 0; (j237 < 4); j237 = (j237 + 1)) { + fRec105_perm[j237] = fRec105_tmp[(vsize + j237)]; + + } + for (int j239 = 0; (j239 < 4); j239 = (j239 + 1)) { + fRec104_perm[j239] = fRec104_tmp[(vsize + j239)]; + + } + for (int j241 = 0; (j241 < 4); j241 = (j241 + 1)) { + fRec103_perm[j241] = fRec103_tmp[(vsize + j241)]; + + } + fYec51_idx_save = vsize; + fYec52_idx_save = vsize; + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fYec53_perm[j217] = fYec53_tmp[(vsize + j217)]; + + } + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec101_perm[j219] = fRec101_tmp[(vsize + j219)]; + + } + for (int j221 = 0; (j221 < 4); j221 = (j221 + 1)) { + fRec100_perm[j221] = fRec100_tmp[(vsize + j221)]; + + } + for (int j223 = 0; (j223 < 4); j223 = (j223 + 1)) { + fRec99_perm[j223] = fRec99_tmp[(vsize + j223)]; + + } + for (int j225 = 0; (j225 < 4); j225 = (j225 + 1)) { + fRec98_perm[j225] = fRec98_tmp[(vsize + j225)]; + + } + for (int j227 = 0; (j227 < 4); j227 = (j227 + 1)) { + fRec97_perm[j227] = fRec97_tmp[(vsize + j227)]; + + } + for (int j249 = 0; (j249 < 4); j249 = (j249 + 1)) { + fRec96_perm[j249] = fRec96_tmp[(vsize + j249)]; + + } + fYec50_idx_save = vsize; + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec95_perm[j207] = fRec95_tmp[(vsize + j207)]; + + } + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fRec94_perm[j209] = fRec94_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec93_perm[j211] = fRec93_tmp[(vsize + j211)]; + + } + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fYec49_perm[j199] = fYec49_tmp[(vsize + j199)]; + + } + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fRec92_perm[j193] = fRec92_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec91_perm[j195] = fRec91_tmp[(vsize + j195)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec90_perm[j197] = fRec90_tmp[(vsize + j197)]; + + } + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fRec89_perm[j201] = fRec89_tmp[(vsize + j201)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec88_perm[j203] = fRec88_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec87_perm[j205] = fRec87_tmp[(vsize + j205)]; + + } + fYec46_idx_save = vsize; + fYec47_idx_save = vsize; + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fYec48_perm[j181] = fYec48_tmp[(vsize + j181)]; + + } + fYec44_idx_save = vsize; + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fYec45_perm[j173] = fYec45_tmp[(vsize + j173)]; + + } + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec84_perm[j175] = fRec84_tmp[(vsize + j175)]; + + } + fYec42_idx_save = vsize; + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fYec43_perm[j165] = fYec43_tmp[(vsize + j165)]; + + } + fYec40_idx_save = vsize; + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fYec41_perm[j157] = fYec41_tmp[(vsize + j157)]; + + } + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec81_perm[j159] = fRec81_tmp[(vsize + j159)]; + + } + fYec38_idx_save = vsize; + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fYec39_perm[j149] = fYec39_tmp[(vsize + j149)]; + + } + fYec36_idx_save = vsize; + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fYec37_perm[j141] = fYec37_tmp[(vsize + j141)]; + + } + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec78_perm[j143] = fRec78_tmp[(vsize + j143)]; + + } + fYec34_idx_save = vsize; + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fYec35_perm[j133] = fYec35_tmp[(vsize + j133)]; + + } + fYec32_idx_save = vsize; + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fYec33_perm[j125] = fYec33_tmp[(vsize + j125)]; + + } + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec75_perm[j127] = fRec75_tmp[(vsize + j127)]; + + } + fYec30_idx_save = vsize; + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fYec31_perm[j117] = fYec31_tmp[(vsize + j117)]; + + } + fYec28_idx_save = vsize; + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fYec29_perm[j109] = fYec29_tmp[(vsize + j109)]; + + } + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec72_perm[j111] = fRec72_tmp[(vsize + j111)]; + + } + fYec26_idx_save = vsize; + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fYec27_perm[j101] = fYec27_tmp[(vsize + j101)]; + + } + fYec23_idx_save = vsize; + fYec24_idx_save = vsize; + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fYec25_perm[j95] = fYec25_tmp[(vsize + j95)]; + + } + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fRec69_perm[j97] = fRec69_tmp[(vsize + j97)]; + + } + fYec20_idx_save = vsize; + fYec21_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec22_perm[j89] = fYec22_tmp[(vsize + j89)]; + + } + fYec18_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec19_perm[j81] = fYec19_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec66_perm[j83] = fRec66_tmp[(vsize + j83)]; + + } + fYec16_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec17_perm[j73] = fYec17_tmp[(vsize + j73)]; + + } + fYec14_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec15_perm[j65] = fYec15_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec63_perm[j67] = fRec63_tmp[(vsize + j67)]; + + } + fYec12_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec13_perm[j57] = fYec13_tmp[(vsize + j57)]; + + } + fYec10_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec11_perm[j49] = fYec11_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec60_perm[j51] = fRec60_tmp[(vsize + j51)]; + + } + fYec8_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec9_perm[j41] = fYec9_tmp[(vsize + j41)]; + + } + fYec6_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec7_perm[j33] = fYec7_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec57_perm[j35] = fRec57_tmp[(vsize + j35)]; + + } + fYec4_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec5_perm[j25] = fYec5_tmp[(vsize + j25)]; + + } + fYec2_idx_save = vsize; + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fYec3_perm[j17] = fYec3_tmp[(vsize + j17)]; + + } + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fRec54_perm[j19] = fRec54_tmp[(vsize + j19)]; + + } + fYec0_idx_save = vsize; + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fYec1_perm[j9] = fYec1_tmp[(vsize + j9)]; + + } + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec52_perm[j11] = fRec52_tmp[(vsize + j11)]; + + } + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + fRec50_perm[j13] = fRec50_tmp[(vsize + j13)]; + + } + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fRec51_perm[j21] = fRec51_tmp[(vsize + j21)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec49_perm[j27] = fRec49_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec47_perm[j29] = fRec47_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec48_perm[j37] = fRec48_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec46_perm[j43] = fRec46_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec44_perm[j45] = fRec44_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec45_perm[j53] = fRec45_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec43_perm[j59] = fRec43_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec41_perm[j61] = fRec41_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec42_perm[j69] = fRec42_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec40_perm[j75] = fRec40_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec38_perm[j77] = fRec38_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec39_perm[j85] = fRec39_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec37_perm[j91] = fRec37_tmp[(vsize + j91)]; + + } + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec36_perm[j103] = fRec36_tmp[(vsize + j103)]; + + } + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fRec34_perm[j105] = fRec34_tmp[(vsize + j105)]; + + } + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fRec35_perm[j113] = fRec35_tmp[(vsize + j113)]; + + } + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec33_perm[j119] = fRec33_tmp[(vsize + j119)]; + + } + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fRec31_perm[j121] = fRec31_tmp[(vsize + j121)]; + + } + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fRec32_perm[j129] = fRec32_tmp[(vsize + j129)]; + + } + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec30_perm[j135] = fRec30_tmp[(vsize + j135)]; + + } + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fRec28_perm[j137] = fRec28_tmp[(vsize + j137)]; + + } + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fRec29_perm[j145] = fRec29_tmp[(vsize + j145)]; + + } + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec27_perm[j151] = fRec27_tmp[(vsize + j151)]; + + } + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fRec25_perm[j153] = fRec25_tmp[(vsize + j153)]; + + } + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fRec26_perm[j161] = fRec26_tmp[(vsize + j161)]; + + } + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec24_perm[j167] = fRec24_tmp[(vsize + j167)]; + + } + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fRec22_perm[j169] = fRec22_tmp[(vsize + j169)]; + + } + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fRec23_perm[j177] = fRec23_tmp[(vsize + j177)]; + + } + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec21_perm[j183] = fRec21_tmp[(vsize + j183)]; + + } + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fRec20_perm[j185] = fRec20_tmp[(vsize + j185)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec19_perm[j187] = fRec19_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec18_perm[j189] = fRec18_tmp[(vsize + j189)]; + + } + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec17_perm[j191] = fRec17_tmp[(vsize + j191)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec14_perm[j213] = fRec14_tmp[(vsize + j213)]; + + } + for (int j253 = 0; (j253 < 4); j253 = (j253 + 1)) { + fRec13_perm[j253] = fRec13_tmp[(vsize + j253)]; + + } + for (int j255 = 0; (j255 < 4); j255 = (j255 + 1)) { + fRec11_perm[j255] = fRec11_tmp[(vsize + j255)]; + + } + for (int j263 = 0; (j263 < 4); j263 = (j263 + 1)) { + fRec12_perm[j263] = fRec12_tmp[(vsize + j263)]; + + } + for (int j267 = 0; (j267 < 4); j267 = (j267 + 1)) { + fRec10_perm[j267] = fRec10_tmp[(vsize + j267)]; + + } + for (int j269 = 0; (j269 < 4); j269 = (j269 + 1)) { + fRec8_perm[j269] = fRec8_tmp[(vsize + j269)]; + + } + for (int j275 = 0; (j275 < 4); j275 = (j275 + 1)) { + fRec9_perm[j275] = fRec9_tmp[(vsize + j275)]; + + } + for (int j279 = 0; (j279 < 4); j279 = (j279 + 1)) { + fRec7_perm[j279] = fRec7_tmp[(vsize + j279)]; + + } + for (int j281 = 0; (j281 < 4); j281 = (j281 + 1)) { + fRec5_perm[j281] = fRec5_tmp[(vsize + j281)]; + + } + for (int j289 = 0; (j289 < 4); j289 = (j289 + 1)) { + fRec6_perm[j289] = fRec6_tmp[(vsize + j289)]; + + } + for (int j295 = 0; (j295 < 4); j295 = (j295 + 1)) { + fRec4_perm[j295] = fRec4_tmp[(vsize + j295)]; + + } + for (int j297 = 0; (j297 < 4); j297 = (j297 + 1)) { + fRec2_perm[j297] = fRec2_tmp[(vsize + j297)]; + + } + for (int j303 = 0; (j303 < 4); j303 = (j303 + 1)) { + fRec3_perm[j303] = fRec3_tmp[(vsize + j303)]; + + } + for (int j305 = 0; (j305 < 4); j305 = (j305 + 1)) { + fRec0_perm[j305] = fRec0_tmp[(vsize + j305)]; + + } + for (int j307 = 0; (j307 < 4); j307 = (j307 + 1)) { + fRec1_perm[j307] = fRec1_tmp[(vsize + j307)]; + + } + /* Vectorizable loop 170 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[i]); + + } + /* Vectorizable loop 171 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[i]); + + } + + } + /* Remaining frames */ + if (vindex < count) { + FAUSTFLOAT* input0 = &input0_ptr[vindex]; + FAUSTFLOAT* input1 = &input1_ptr[vindex]; + FAUSTFLOAT* output0 = &output0_ptr[vindex]; + FAUSTFLOAT* output1 = &output1_ptr[vindex]; + int vsize = (count - vindex); + /* Vectorizable loop 0 */ + /* Pre code */ + for (int j2 = 0; (j2 < 4); j2 = (j2 + 1)) { + iVec0_tmp[j2] = iVec0_perm[j2]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iVec0[i] = 1; + + } + /* Post code */ + for (int j3 = 0; (j3 < 4); j3 = (j3 + 1)) { + iVec0_perm[j3] = iVec0_tmp[(vsize + j3)]; + + } + /* Vectorizable loop 1 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec0[i] = (1 - iVec0[(i - 1)]); + + } + /* Recursive loop 2 */ + /* Pre code */ + for (int j0 = 0; (j0 < 4); j0 = (j0 + 1)) { + fRec15_tmp[j0] = fRec15_perm[j0]; + + } + for (int j4 = 0; (j4 < 4); j4 = (j4 + 1)) { + fRec16_tmp[j4] = fRec16_perm[j4]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec15[i] = ((fSlow1 * fRec16[(i - 1)]) + (fSlow2 * fRec15[(i - 1)])); + fRec16[i] = ((float(iZec0[i]) + (fSlow2 * fRec16[(i - 1)])) - (fSlow1 * fRec15[(i - 1)])); + + } + /* Post code */ + for (int j1 = 0; (j1 < 4); j1 = (j1 + 1)) { + fRec15_perm[j1] = fRec15_tmp[(vsize + j1)]; + + } + for (int j5 = 0; (j5 < 4); j5 = (j5 + 1)) { + fRec16_perm[j5] = fRec16_tmp[(vsize + j5)]; + + } + /* Vectorizable loop 3 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec39[i] = (fSlow26 * (fRec16[i] + 1.0f)); + + } + /* Vectorizable loop 4 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec131[i] = (fSlow26 * (fRec15[i] + 1.0f)); + + } + /* Vectorizable loop 5 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec40[i] = (fZec39[i] + 3.50000501f); + + } + /* Vectorizable loop 6 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec67[i] = (fSlow29 * fRec16[i]); + + } + /* Vectorizable loop 7 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec132[i] = (fZec131[i] + 3.50000501f); + + } + /* Vectorizable loop 8 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec161[i] = (fSlow29 * fRec15[i]); + + } + /* Vectorizable loop 9 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec43[i] = std::floor(fZec40[i]); + + } + /* Vectorizable loop 10 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec68[i] = (fSlow26 + (fZec67[i] + 3.50000501f)); + + } + /* Recursive loop 11 */ + /* Pre code */ + for (int j122 = 0; (j122 < 4); j122 = (j122 + 1)) { + fRec76_tmp[j122] = fRec76_perm[j122]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec76[i] = (fSlow37 + (0.999899983f * (fRec76[(i - 1)] + float((iSlow36 * iZec0[i]))))); + + } + /* Post code */ + for (int j123 = 0; (j123 < 4); j123 = (j123 + 1)) { + fRec76_perm[j123] = fRec76_tmp[(vsize + j123)]; + + } + /* Recursive loop 12 */ + /* Pre code */ + for (int j138 = 0; (j138 < 4); j138 = (j138 + 1)) { + fRec79_tmp[j138] = fRec79_perm[j138]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec79[i] = (fSlow41 + (0.999899983f * (fRec79[(i - 1)] + float((iSlow40 * iZec0[i]))))); + + } + /* Post code */ + for (int j139 = 0; (j139 < 4); j139 = (j139 + 1)) { + fRec79_perm[j139] = fRec79_tmp[(vsize + j139)]; + + } + /* Recursive loop 13 */ + /* Pre code */ + for (int j146 = 0; (j146 < 4); j146 = (j146 + 1)) { + fRec80_tmp[j146] = fRec80_perm[j146]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec80[i] = (fSlow43 + (0.999899983f * (fRec80[(i - 1)] + float((iSlow42 * iZec0[i]))))); + + } + /* Post code */ + for (int j147 = 0; (j147 < 4); j147 = (j147 + 1)) { + fRec80_perm[j147] = fRec80_tmp[(vsize + j147)]; + + } + /* Recursive loop 14 */ + /* Pre code */ + for (int j154 = 0; (j154 < 4); j154 = (j154 + 1)) { + fRec82_tmp[j154] = fRec82_perm[j154]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec82[i] = (fSlow45 + (0.999899983f * (fRec82[(i - 1)] + float((iSlow44 * iZec0[i]))))); + + } + /* Post code */ + for (int j155 = 0; (j155 < 4); j155 = (j155 + 1)) { + fRec82_perm[j155] = fRec82_tmp[(vsize + j155)]; + + } + /* Recursive loop 15 */ + /* Pre code */ + for (int j170 = 0; (j170 < 4); j170 = (j170 + 1)) { + fRec85_tmp[j170] = fRec85_perm[j170]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec85[i] = (fSlow49 + (0.999899983f * (fRec85[(i - 1)] + float((iSlow48 * iZec0[i]))))); + + } + /* Post code */ + for (int j171 = 0; (j171 < 4); j171 = (j171 + 1)) { + fRec85_perm[j171] = fRec85_tmp[(vsize + j171)]; + + } + /* Vectorizable loop 16 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec135[i] = std::floor(fZec132[i]); + + } + /* Vectorizable loop 17 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec162[i] = (fSlow26 + (fZec161[i] + 3.50000501f)); + + } + /* Recursive loop 18 */ + /* Pre code */ + for (int j6 = 0; (j6 < 4); j6 = (j6 + 1)) { + fRec53_tmp[j6] = fRec53_perm[j6]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec53[i] = (fSlow5 + (0.999899983f * (fRec53[(i - 1)] + float((iSlow4 * iZec0[i]))))); + + } + /* Post code */ + for (int j7 = 0; (j7 < 4); j7 = (j7 + 1)) { + fRec53_perm[j7] = fRec53_tmp[(vsize + j7)]; + + } + /* Recursive loop 19 */ + /* Pre code */ + for (int j22 = 0; (j22 < 4); j22 = (j22 + 1)) { + fRec56_tmp[j22] = fRec56_perm[j22]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec56[i] = (fSlow9 + (0.999899983f * (fRec56[(i - 1)] + float((iSlow8 * iZec0[i]))))); + + } + /* Post code */ + for (int j23 = 0; (j23 < 4); j23 = (j23 + 1)) { + fRec56_perm[j23] = fRec56_tmp[(vsize + j23)]; + + } + /* Recursive loop 20 */ + /* Pre code */ + for (int j14 = 0; (j14 < 4); j14 = (j14 + 1)) { + fRec55_tmp[j14] = fRec55_perm[j14]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec55[i] = (fSlow7 + (0.999899983f * (fRec55[(i - 1)] + float((iSlow6 * iZec0[i]))))); + + } + /* Post code */ + for (int j15 = 0; (j15 < 4); j15 = (j15 + 1)) { + fRec55_perm[j15] = fRec55_tmp[(vsize + j15)]; + + } + /* Recursive loop 21 */ + /* Pre code */ + for (int j38 = 0; (j38 < 4); j38 = (j38 + 1)) { + fRec59_tmp[j38] = fRec59_perm[j38]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec59[i] = (fSlow13 + (0.999899983f * (fRec59[(i - 1)] + float((iSlow12 * iZec0[i]))))); + + } + /* Post code */ + for (int j39 = 0; (j39 < 4); j39 = (j39 + 1)) { + fRec59_perm[j39] = fRec59_tmp[(vsize + j39)]; + + } + /* Recursive loop 22 */ + /* Pre code */ + for (int j30 = 0; (j30 < 4); j30 = (j30 + 1)) { + fRec58_tmp[j30] = fRec58_perm[j30]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec58[i] = (fSlow11 + (0.999899983f * (fRec58[(i - 1)] + float((iSlow10 * iZec0[i]))))); + + } + /* Post code */ + for (int j31 = 0; (j31 < 4); j31 = (j31 + 1)) { + fRec58_perm[j31] = fRec58_tmp[(vsize + j31)]; + + } + /* Recursive loop 23 */ + /* Pre code */ + for (int j46 = 0; (j46 < 4); j46 = (j46 + 1)) { + fRec61_tmp[j46] = fRec61_perm[j46]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec61[i] = (fSlow15 + (0.999899983f * (fRec61[(i - 1)] + float((iSlow14 * iZec0[i]))))); + + } + /* Post code */ + for (int j47 = 0; (j47 < 4); j47 = (j47 + 1)) { + fRec61_perm[j47] = fRec61_tmp[(vsize + j47)]; + + } + /* Recursive loop 24 */ + /* Pre code */ + for (int j54 = 0; (j54 < 4); j54 = (j54 + 1)) { + fRec62_tmp[j54] = fRec62_perm[j54]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec62[i] = (fSlow17 + (0.999899983f * (fRec62[(i - 1)] + float((iSlow16 * iZec0[i]))))); + + } + /* Post code */ + for (int j55 = 0; (j55 < 4); j55 = (j55 + 1)) { + fRec62_perm[j55] = fRec62_tmp[(vsize + j55)]; + + } + /* Recursive loop 25 */ + /* Pre code */ + for (int j62 = 0; (j62 < 4); j62 = (j62 + 1)) { + fRec64_tmp[j62] = fRec64_perm[j62]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec64[i] = (fSlow19 + (0.999899983f * (fRec64[(i - 1)] + float((iSlow18 * iZec0[i]))))); + + } + /* Post code */ + for (int j63 = 0; (j63 < 4); j63 = (j63 + 1)) { + fRec64_perm[j63] = fRec64_tmp[(vsize + j63)]; + + } + /* Recursive loop 26 */ + /* Pre code */ + for (int j70 = 0; (j70 < 4); j70 = (j70 + 1)) { + fRec65_tmp[j70] = fRec65_perm[j70]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec65[i] = (fSlow21 + (0.999899983f * (fRec65[(i - 1)] + float((iSlow20 * iZec0[i]))))); + + } + /* Post code */ + for (int j71 = 0; (j71 < 4); j71 = (j71 + 1)) { + fRec65_perm[j71] = fRec65_tmp[(vsize + j71)]; + + } + /* Recursive loop 27 */ + /* Pre code */ + for (int j78 = 0; (j78 < 4); j78 = (j78 + 1)) { + fRec67_tmp[j78] = fRec67_perm[j78]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec67[i] = (fSlow23 + (0.999899983f * (fRec67[(i - 1)] + float((iSlow22 * iZec0[i]))))); + + } + /* Post code */ + for (int j79 = 0; (j79 < 4); j79 = (j79 + 1)) { + fRec67_perm[j79] = fRec67_tmp[(vsize + j79)]; + + } + /* Recursive loop 28 */ + /* Pre code */ + for (int j86 = 0; (j86 < 4); j86 = (j86 + 1)) { + fRec68_tmp[j86] = fRec68_perm[j86]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec68[i] = (fSlow25 + (0.995000005f * (fRec68[(i - 1)] + float((iSlow24 * iZec0[i]))))); + + } + /* Post code */ + for (int j87 = 0; (j87 < 4); j87 = (j87 + 1)) { + fRec68_perm[j87] = fRec68_tmp[(vsize + j87)]; + + } + /* Vectorizable loop 29 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec44[i] = (fZec39[i] + (4.0f - fZec43[i])); + + } + /* Vectorizable loop 30 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec46[i] = (fZec39[i] + (3.0f - fZec43[i])); + + } + /* Recursive loop 31 */ + /* Pre code */ + for (int j92 = 0; (j92 < 4); j92 = (j92 + 1)) { + fRec70_tmp[j92] = fRec70_perm[j92]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec70[i] = (fSlow28 + (0.995000005f * (fRec70[(i - 1)] + float((iSlow27 * iZec0[i]))))); + + } + /* Post code */ + for (int j93 = 0; (j93 < 4); j93 = (j93 + 1)) { + fRec70_perm[j93] = fRec70_tmp[(vsize + j93)]; + + } + /* Vectorizable loop 32 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec70[i] = std::floor(fZec68[i]); + + } + /* Recursive loop 33 */ + /* Pre code */ + for (int j98 = 0; (j98 < 4); j98 = (j98 + 1)) { + fRec71_tmp[j98] = fRec71_perm[j98]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec71[i] = (fSlow31 + (0.999899983f * (fRec71[(i - 1)] + float((iSlow30 * iZec0[i]))))); + + } + /* Post code */ + for (int j99 = 0; (j99 < 4); j99 = (j99 + 1)) { + fRec71_perm[j99] = fRec71_tmp[(vsize + j99)]; + + } + /* Recursive loop 34 */ + /* Pre code */ + for (int j106 = 0; (j106 < 4); j106 = (j106 + 1)) { + fRec73_tmp[j106] = fRec73_perm[j106]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec73[i] = (fSlow33 + (0.999899983f * (fRec73[(i - 1)] + float((iSlow32 * iZec0[i]))))); + + } + /* Post code */ + for (int j107 = 0; (j107 < 4); j107 = (j107 + 1)) { + fRec73_perm[j107] = fRec73_tmp[(vsize + j107)]; + + } + /* Recursive loop 35 */ + /* Pre code */ + for (int j114 = 0; (j114 < 4); j114 = (j114 + 1)) { + fRec74_tmp[j114] = fRec74_perm[j114]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec74[i] = (fSlow35 + (0.999899983f * (fRec74[(i - 1)] + float((iSlow34 * iZec0[i]))))); + + } + /* Post code */ + for (int j115 = 0; (j115 < 4); j115 = (j115 + 1)) { + fRec74_perm[j115] = fRec74_tmp[(vsize + j115)]; + + } + /* Vectorizable loop 36 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec90[i] = (fRec76[i] + -1.49998999f); + + } + /* Recursive loop 37 */ + /* Pre code */ + for (int j130 = 0; (j130 < 4); j130 = (j130 + 1)) { + fRec77_tmp[j130] = fRec77_perm[j130]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec77[i] = (fSlow39 + (0.999899983f * (fRec77[(i - 1)] + float((iSlow38 * iZec0[i]))))); + + } + /* Post code */ + for (int j131 = 0; (j131 < 4); j131 = (j131 + 1)) { + fRec77_perm[j131] = fRec77_tmp[(vsize + j131)]; + + } + /* Vectorizable loop 38 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec101[i] = (fRec79[i] + -1.49998999f); + + } + /* Vectorizable loop 39 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec110[i] = (fRec80[i] + -1.49998999f); + + } + /* Vectorizable loop 40 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec115[i] = (fRec82[i] + -1.49998999f); + + } + /* Recursive loop 41 */ + /* Pre code */ + for (int j162 = 0; (j162 < 4); j162 = (j162 + 1)) { + fRec83_tmp[j162] = fRec83_perm[j162]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec83[i] = (fSlow47 + (0.999899983f * (fRec83[(i - 1)] + float((iSlow46 * iZec0[i]))))); + + } + /* Post code */ + for (int j163 = 0; (j163 < 4); j163 = (j163 + 1)) { + fRec83_perm[j163] = fRec83_tmp[(vsize + j163)]; + + } + /* Vectorizable loop 42 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec126[i] = (fRec85[i] + -1.49998999f); + + } + /* Recursive loop 43 */ + /* Pre code */ + for (int j178 = 0; (j178 < 4); j178 = (j178 + 1)) { + fRec86_tmp[j178] = fRec86_perm[j178]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec86[i] = (fSlow51 + (0.995000005f * (fRec86[(i - 1)] + float((iSlow50 * iZec0[i]))))); + + } + /* Post code */ + for (int j179 = 0; (j179 < 4); j179 = (j179 + 1)) { + fRec86_perm[j179] = fRec86_tmp[(vsize + j179)]; + + } + /* Vectorizable loop 44 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec136[i] = (fZec131[i] + (4.0f - fZec135[i])); + + } + /* Vectorizable loop 45 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec138[i] = (fZec131[i] + (3.0f - fZec135[i])); + + } + /* Recursive loop 46 */ + /* Pre code */ + for (int j214 = 0; (j214 < 4); j214 = (j214 + 1)) { + fRec102_tmp[j214] = fRec102_perm[j214]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec102[i] = (fSlow91 + (0.995000005f * (fRec102[(i - 1)] + float((iSlow90 * iZec0[i]))))); + + } + /* Post code */ + for (int j215 = 0; (j215 < 4); j215 = (j215 + 1)) { + fRec102_perm[j215] = fRec102_tmp[(vsize + j215)]; + + } + /* Vectorizable loop 47 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec164[i] = std::floor(fZec162[i]); + + } + /* Recursive loop 48 */ + /* Pre code */ + for (int j256 = 0; (j256 < 4); j256 = (j256 + 1)) { + fRec113_tmp[j256] = fRec113_perm[j256]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec113[i] = (fSlow96 + (0.999899983f * (fRec113[(i - 1)] + float((iSlow95 * iZec0[i]))))); + + } + /* Post code */ + for (int j257 = 0; (j257 < 4); j257 = (j257 + 1)) { + fRec113_perm[j257] = fRec113_tmp[(vsize + j257)]; + + } + /* Recursive loop 49 */ + /* Pre code */ + for (int j282 = 0; (j282 < 4); j282 = (j282 + 1)) { + fRec116_tmp[j282] = fRec116_perm[j282]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec116[i] = (fSlow98 + (0.999899983f * (fRec116[(i - 1)] + float((iSlow97 * iZec0[i]))))); + + } + /* Post code */ + for (int j283 = 0; (j283 < 4); j283 = (j283 + 1)) { + fRec116_perm[j283] = fRec116_tmp[(vsize + j283)]; + + } + /* Recursive loop 50 */ + /* Pre code */ + for (int j290 = 0; (j290 < 4); j290 = (j290 + 1)) { + fRec117_tmp[j290] = fRec117_perm[j290]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fRec117[i] = (fSlow100 + (0.999899983f * (fRec117[(i - 1)] + float((iSlow99 * iZec0[i]))))); + + } + /* Post code */ + for (int j291 = 0; (j291 < 4); j291 = (j291 + 1)) { + fRec117_perm[j291] = fRec117_tmp[(vsize + j291)]; + + } + /* Vectorizable loop 51 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec3[i] = (fRec53[i] + -1.49998999f); + + } + /* Vectorizable loop 52 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec5[i] = (fRec55[i] + -1.49998999f); + + } + /* Vectorizable loop 53 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec13[i] = (fRec58[i] + -1.49998999f); + + } + /* Vectorizable loop 54 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec11[i] = (fRec56[i] + -1.49998999f); + + } + /* Vectorizable loop 55 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec19[i] = (fRec59[i] + -1.49998999f); + + } + /* Vectorizable loop 56 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec21[i] = (fRec61[i] + -1.49998999f); + + } + /* Vectorizable loop 57 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec27[i] = (fRec62[i] + -1.49998999f); + + } + /* Vectorizable loop 58 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec29[i] = (fRec64[i] + -1.49998999f); + + } + /* Vectorizable loop 59 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec35[i] = (fRec65[i] + -1.49998999f); + + } + /* Vectorizable loop 60 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec37[i] = (fRec67[i] + -1.49998999f); + + } + /* Vectorizable loop 61 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec41[i] = int(fZec40[i]); + + } + /* Vectorizable loop 62 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec48[i] = (fZec39[i] + (2.0f - fZec43[i])); + + } + /* Vectorizable loop 63 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec50[i] = (fZec39[i] + (1.0f - fZec43[i])); + + } + /* Vectorizable loop 64 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec60[i] = (fZec44[i] * fZec46[i]); + + } + /* Vectorizable loop 65 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec65[i] = (fRec68[i] + -1.49998999f); + + } + /* Vectorizable loop 66 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec71[i] = (fSlow26 + (fZec67[i] + (4.0f - fZec70[i]))); + + } + /* Vectorizable loop 67 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec72[i] = (fSlow26 + (fZec67[i] + (3.0f - fZec70[i]))); + + } + /* Vectorizable loop 68 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec76[i] = (fRec70[i] + -1.49998999f); + + } + /* Vectorizable loop 69 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec80[i] = (fRec71[i] + -1.49998999f); + + } + /* Vectorizable loop 70 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec82[i] = (fRec73[i] + -1.49998999f); + + } + /* Vectorizable loop 71 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec88[i] = (fRec74[i] + -1.49998999f); + + } + /* Vectorizable loop 72 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec92[i] = std::floor(fZec90[i]); + + } + /* Vectorizable loop 73 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec99[i] = (fRec77[i] + -1.49998999f); + + } + /* Vectorizable loop 74 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec103[i] = std::floor(fZec101[i]); + + } + /* Vectorizable loop 75 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec112[i] = std::floor(fZec110[i]); + + } + /* Vectorizable loop 76 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec117[i] = std::floor(fZec115[i]); + + } + /* Vectorizable loop 77 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec124[i] = (fRec83[i] + -1.49998999f); + + } + /* Vectorizable loop 78 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec128[i] = std::floor(fZec126[i]); + + } + /* Vectorizable loop 79 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec133[i] = int(fZec132[i]); + + } + /* Vectorizable loop 80 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec140[i] = (fZec131[i] + (2.0f - fZec135[i])); + + } + /* Vectorizable loop 81 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec142[i] = (fZec131[i] + (1.0f - fZec135[i])); + + } + /* Vectorizable loop 82 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec152[i] = (fZec136[i] * fZec138[i]); + + } + /* Vectorizable loop 83 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec157[i] = (fRec86[i] + -1.49998999f); + + } + /* Vectorizable loop 84 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec165[i] = (fSlow26 + (fZec161[i] + (4.0f - fZec164[i]))); + + } + /* Vectorizable loop 85 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec166[i] = (fSlow26 + (fZec161[i] + (3.0f - fZec164[i]))); + + } + /* Vectorizable loop 86 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec170[i] = (fRec102[i] + -1.49998999f); + + } + /* Vectorizable loop 87 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec176[i] = (fRec113[i] + -1.49998999f); + + } + /* Vectorizable loop 88 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec186[i] = (fRec116[i] + -1.49998999f); + + } + /* Vectorizable loop 89 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec192[i] = (fRec117[i] + -1.49998999f); + + } + /* Vectorizable loop 90 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec4[i] = std::floor(fZec3[i]); + + } + /* Vectorizable loop 91 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec6[i] = std::floor(fZec5[i]); + + } + /* Vectorizable loop 92 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec14[i] = std::floor(fZec13[i]); + + } + /* Vectorizable loop 93 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec12[i] = std::floor(fZec11[i]); + + } + /* Vectorizable loop 94 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec20[i] = std::floor(fZec19[i]); + + } + /* Vectorizable loop 95 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec22[i] = std::floor(fZec21[i]); + + } + /* Vectorizable loop 96 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec28[i] = std::floor(fZec27[i]); + + } + /* Vectorizable loop 97 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec30[i] = std::floor(fZec29[i]); + + } + /* Vectorizable loop 98 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec36[i] = std::floor(fZec35[i]); + + } + /* Vectorizable loop 99 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec38[i] = std::floor(fZec37[i]); + + } + /* Vectorizable loop 100 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec42[i] = std::min(512, std::max(0, iZec41[i])); + + } + /* Vectorizable loop 101 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec45[i] = (0.0f - fZec44[i]); + + } + /* Vectorizable loop 102 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec47[i] = (0.0f - (0.5f * fZec46[i])); + + } + /* Vectorizable loop 103 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec49[i] = (0.0f - (0.333333343f * fZec48[i])); + + } + /* Vectorizable loop 104 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec51[i] = (0.0f - (0.25f * fZec50[i])); + + } + /* Vectorizable loop 105 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec52[i] = (fZec39[i] + (5.0f - fZec43[i])); + + } + /* Vectorizable loop 106 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec53[i] = std::min(512, std::max(0, (iZec41[i] + 1))); + + } + /* Vectorizable loop 107 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec54[i] = (0.0f - fZec46[i]); + + } + /* Vectorizable loop 108 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec55[i] = (0.0f - (0.5f * fZec48[i])); + + } + /* Vectorizable loop 109 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec56[i] = (0.0f - (0.333333343f * fZec50[i])); + + } + /* Vectorizable loop 110 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec57[i] = std::min(512, std::max(0, (iZec41[i] + 2))); + + } + /* Vectorizable loop 111 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec58[i] = (0.0f - fZec48[i]); + + } + /* Vectorizable loop 112 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec59[i] = (0.0f - (0.5f * fZec50[i])); + + } + /* Vectorizable loop 113 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec61[i] = std::min(512, std::max(0, (iZec41[i] + 3))); + + } + /* Vectorizable loop 114 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec62[i] = (0.0f - fZec50[i]); + + } + /* Vectorizable loop 115 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec63[i] = (fZec60[i] * fZec48[i]); + + } + /* Vectorizable loop 116 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec64[i] = std::min(512, std::max(0, (iZec41[i] + 4))); + + } + /* Vectorizable loop 117 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec66[i] = std::floor(fZec65[i]); + + } + /* Vectorizable loop 118 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec69[i] = int(fZec68[i]); + + } + /* Vectorizable loop 119 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec73[i] = (fSlow26 + (fZec67[i] + (2.0f - fZec70[i]))); + + } + /* Vectorizable loop 120 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec74[i] = (fSlow26 + (fZec67[i] + (1.0f - fZec70[i]))); + + } + /* Vectorizable loop 121 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec75[i] = (fZec71[i] * fZec72[i]); + + } + /* Vectorizable loop 122 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec77[i] = std::floor(fZec76[i]); + + } + /* Vectorizable loop 123 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec81[i] = std::floor(fZec80[i]); + + } + /* Vectorizable loop 124 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec83[i] = std::floor(fZec82[i]); + + } + /* Vectorizable loop 125 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec89[i] = std::floor(fZec88[i]); + + } + /* Vectorizable loop 126 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec91[i] = std::min(8192, std::max(0, int(fZec90[i]))); + + } + /* Vectorizable loop 127 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec93[i] = (fZec92[i] + (2.0f - fRec76[i])); + + } + /* Vectorizable loop 128 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec94[i] = (fRec76[i] - fZec92[i]); + + } + /* Vectorizable loop 129 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec100[i] = std::floor(fZec99[i]); + + } + /* Vectorizable loop 130 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec102[i] = std::min(8192, std::max(0, int(fZec101[i]))); + + } + /* Vectorizable loop 131 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec104[i] = (fZec103[i] + (2.0f - fRec79[i])); + + } + /* Vectorizable loop 132 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec105[i] = (fRec79[i] - fZec103[i]); + + } + /* Vectorizable loop 133 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec111[i] = std::min(8192, std::max(0, int(fZec110[i]))); + + } + /* Vectorizable loop 134 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec113[i] = (fZec112[i] + (2.0f - fRec80[i])); + + } + /* Vectorizable loop 135 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec114[i] = (fRec80[i] - fZec112[i]); + + } + /* Vectorizable loop 136 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec116[i] = std::min(8192, std::max(0, int(fZec115[i]))); + + } + /* Vectorizable loop 137 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec118[i] = (fZec117[i] + (2.0f - fRec82[i])); + + } + /* Vectorizable loop 138 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec119[i] = (fRec82[i] - fZec117[i]); + + } + /* Vectorizable loop 139 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec125[i] = std::floor(fZec124[i]); + + } + /* Vectorizable loop 140 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec127[i] = std::min(8192, std::max(0, int(fZec126[i]))); + + } + /* Vectorizable loop 141 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec129[i] = (fZec128[i] + (2.0f - fRec85[i])); + + } + /* Vectorizable loop 142 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec130[i] = (fRec85[i] - fZec128[i]); + + } + /* Vectorizable loop 143 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec134[i] = std::max(0, iZec133[i]); + + } + /* Vectorizable loop 144 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec137[i] = (0.0f - fZec136[i]); + + } + /* Vectorizable loop 145 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec139[i] = (0.0f - (0.5f * fZec138[i])); + + } + /* Vectorizable loop 146 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec141[i] = (0.0f - (0.333333343f * fZec140[i])); + + } + /* Vectorizable loop 147 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec143[i] = (0.0f - (0.25f * fZec142[i])); + + } + /* Vectorizable loop 148 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec144[i] = (fZec131[i] + (5.0f - fZec135[i])); + + } + /* Vectorizable loop 149 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec145[i] = std::max(0, (iZec133[i] + 1)); + + } + /* Vectorizable loop 150 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec146[i] = (0.0f - fZec138[i]); + + } + /* Vectorizable loop 151 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec147[i] = (0.0f - (0.5f * fZec140[i])); + + } + /* Vectorizable loop 152 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec148[i] = (0.0f - (0.333333343f * fZec142[i])); + + } + /* Vectorizable loop 153 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec149[i] = std::max(0, (iZec133[i] + 2)); + + } + /* Vectorizable loop 154 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec150[i] = (0.0f - fZec140[i]); + + } + /* Vectorizable loop 155 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec151[i] = (0.0f - (0.5f * fZec142[i])); + + } + /* Vectorizable loop 156 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec153[i] = std::max(0, (iZec133[i] + 3)); + + } + /* Vectorizable loop 157 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec154[i] = (0.0f - fZec142[i]); + + } + /* Vectorizable loop 158 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec155[i] = (fZec152[i] * fZec140[i]); + + } + /* Vectorizable loop 159 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec156[i] = std::max(0, (iZec133[i] + 4)); + + } + /* Vectorizable loop 160 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec158[i] = std::floor(fZec157[i]); + + } + /* Vectorizable loop 161 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + iZec163[i] = int(fZec162[i]); + + } + /* Vectorizable loop 162 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec167[i] = (fSlow26 + (fZec161[i] + (2.0f - fZec164[i]))); + + } + /* Vectorizable loop 163 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec168[i] = (fSlow26 + (fZec161[i] + (1.0f - fZec164[i]))); + + } + /* Vectorizable loop 164 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec169[i] = (fZec165[i] * fZec166[i]); + + } + /* Vectorizable loop 165 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec171[i] = std::floor(fZec170[i]); + + } + /* Vectorizable loop 166 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec177[i] = std::floor(fZec176[i]); + + } + /* Vectorizable loop 167 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec187[i] = std::floor(fZec186[i]); + + } + /* Vectorizable loop 168 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec193[i] = std::floor(fZec192[i]); + + } + /* Recursive loop 169 */ + /* Pre code */ + fYec0_idx = ((fYec0_idx + fYec0_idx_save) & 16383); + for (int j8 = 0; (j8 < 4); j8 = (j8 + 1)) { + fYec1_tmp[j8] = fYec1_perm[j8]; + + } + for (int j10 = 0; (j10 < 4); j10 = (j10 + 1)) { + fRec52_tmp[j10] = fRec52_perm[j10]; + + } + for (int j12 = 0; (j12 < 4); j12 = (j12 + 1)) { + fRec50_tmp[j12] = fRec50_perm[j12]; + + } + fYec2_idx = ((fYec2_idx + fYec2_idx_save) & 16383); + for (int j16 = 0; (j16 < 4); j16 = (j16 + 1)) { + fYec3_tmp[j16] = fYec3_perm[j16]; + + } + for (int j18 = 0; (j18 < 4); j18 = (j18 + 1)) { + fRec54_tmp[j18] = fRec54_perm[j18]; + + } + for (int j20 = 0; (j20 < 4); j20 = (j20 + 1)) { + fRec51_tmp[j20] = fRec51_perm[j20]; + + } + fYec4_idx = ((fYec4_idx + fYec4_idx_save) & 16383); + for (int j24 = 0; (j24 < 4); j24 = (j24 + 1)) { + fYec5_tmp[j24] = fYec5_perm[j24]; + + } + for (int j26 = 0; (j26 < 4); j26 = (j26 + 1)) { + fRec49_tmp[j26] = fRec49_perm[j26]; + + } + for (int j28 = 0; (j28 < 4); j28 = (j28 + 1)) { + fRec47_tmp[j28] = fRec47_perm[j28]; + + } + fYec6_idx = ((fYec6_idx + fYec6_idx_save) & 16383); + for (int j32 = 0; (j32 < 4); j32 = (j32 + 1)) { + fYec7_tmp[j32] = fYec7_perm[j32]; + + } + for (int j34 = 0; (j34 < 4); j34 = (j34 + 1)) { + fRec57_tmp[j34] = fRec57_perm[j34]; + + } + for (int j36 = 0; (j36 < 4); j36 = (j36 + 1)) { + fRec48_tmp[j36] = fRec48_perm[j36]; + + } + fYec8_idx = ((fYec8_idx + fYec8_idx_save) & 16383); + for (int j40 = 0; (j40 < 4); j40 = (j40 + 1)) { + fYec9_tmp[j40] = fYec9_perm[j40]; + + } + for (int j42 = 0; (j42 < 4); j42 = (j42 + 1)) { + fRec46_tmp[j42] = fRec46_perm[j42]; + + } + for (int j44 = 0; (j44 < 4); j44 = (j44 + 1)) { + fRec44_tmp[j44] = fRec44_perm[j44]; + + } + fYec10_idx = ((fYec10_idx + fYec10_idx_save) & 16383); + for (int j48 = 0; (j48 < 4); j48 = (j48 + 1)) { + fYec11_tmp[j48] = fYec11_perm[j48]; + + } + for (int j50 = 0; (j50 < 4); j50 = (j50 + 1)) { + fRec60_tmp[j50] = fRec60_perm[j50]; + + } + for (int j52 = 0; (j52 < 4); j52 = (j52 + 1)) { + fRec45_tmp[j52] = fRec45_perm[j52]; + + } + fYec12_idx = ((fYec12_idx + fYec12_idx_save) & 16383); + for (int j56 = 0; (j56 < 4); j56 = (j56 + 1)) { + fYec13_tmp[j56] = fYec13_perm[j56]; + + } + for (int j58 = 0; (j58 < 4); j58 = (j58 + 1)) { + fRec43_tmp[j58] = fRec43_perm[j58]; + + } + for (int j60 = 0; (j60 < 4); j60 = (j60 + 1)) { + fRec41_tmp[j60] = fRec41_perm[j60]; + + } + fYec14_idx = ((fYec14_idx + fYec14_idx_save) & 16383); + for (int j64 = 0; (j64 < 4); j64 = (j64 + 1)) { + fYec15_tmp[j64] = fYec15_perm[j64]; + + } + for (int j66 = 0; (j66 < 4); j66 = (j66 + 1)) { + fRec63_tmp[j66] = fRec63_perm[j66]; + + } + for (int j68 = 0; (j68 < 4); j68 = (j68 + 1)) { + fRec42_tmp[j68] = fRec42_perm[j68]; + + } + fYec16_idx = ((fYec16_idx + fYec16_idx_save) & 16383); + for (int j72 = 0; (j72 < 4); j72 = (j72 + 1)) { + fYec17_tmp[j72] = fYec17_perm[j72]; + + } + for (int j74 = 0; (j74 < 4); j74 = (j74 + 1)) { + fRec40_tmp[j74] = fRec40_perm[j74]; + + } + for (int j76 = 0; (j76 < 4); j76 = (j76 + 1)) { + fRec38_tmp[j76] = fRec38_perm[j76]; + + } + fYec18_idx = ((fYec18_idx + fYec18_idx_save) & 16383); + for (int j80 = 0; (j80 < 4); j80 = (j80 + 1)) { + fYec19_tmp[j80] = fYec19_perm[j80]; + + } + for (int j82 = 0; (j82 < 4); j82 = (j82 + 1)) { + fRec66_tmp[j82] = fRec66_perm[j82]; + + } + for (int j84 = 0; (j84 < 4); j84 = (j84 + 1)) { + fRec39_tmp[j84] = fRec39_perm[j84]; + + } + fYec20_idx = ((fYec20_idx + fYec20_idx_save) & 1023); + fYec21_idx = ((fYec21_idx + fYec21_idx_save) & 16383); + for (int j88 = 0; (j88 < 4); j88 = (j88 + 1)) { + fYec22_tmp[j88] = fYec22_perm[j88]; + + } + for (int j90 = 0; (j90 < 4); j90 = (j90 + 1)) { + fRec37_tmp[j90] = fRec37_perm[j90]; + + } + fYec23_idx = ((fYec23_idx + fYec23_idx_save) & 1023); + fYec24_idx = ((fYec24_idx + fYec24_idx_save) & 16383); + for (int j94 = 0; (j94 < 4); j94 = (j94 + 1)) { + fYec25_tmp[j94] = fYec25_perm[j94]; + + } + for (int j96 = 0; (j96 < 4); j96 = (j96 + 1)) { + fRec69_tmp[j96] = fRec69_perm[j96]; + + } + fYec26_idx = ((fYec26_idx + fYec26_idx_save) & 16383); + for (int j100 = 0; (j100 < 4); j100 = (j100 + 1)) { + fYec27_tmp[j100] = fYec27_perm[j100]; + + } + for (int j102 = 0; (j102 < 4); j102 = (j102 + 1)) { + fRec36_tmp[j102] = fRec36_perm[j102]; + + } + for (int j104 = 0; (j104 < 4); j104 = (j104 + 1)) { + fRec34_tmp[j104] = fRec34_perm[j104]; + + } + fYec28_idx = ((fYec28_idx + fYec28_idx_save) & 16383); + for (int j108 = 0; (j108 < 4); j108 = (j108 + 1)) { + fYec29_tmp[j108] = fYec29_perm[j108]; + + } + for (int j110 = 0; (j110 < 4); j110 = (j110 + 1)) { + fRec72_tmp[j110] = fRec72_perm[j110]; + + } + for (int j112 = 0; (j112 < 4); j112 = (j112 + 1)) { + fRec35_tmp[j112] = fRec35_perm[j112]; + + } + fYec30_idx = ((fYec30_idx + fYec30_idx_save) & 16383); + for (int j116 = 0; (j116 < 4); j116 = (j116 + 1)) { + fYec31_tmp[j116] = fYec31_perm[j116]; + + } + for (int j118 = 0; (j118 < 4); j118 = (j118 + 1)) { + fRec33_tmp[j118] = fRec33_perm[j118]; + + } + for (int j120 = 0; (j120 < 4); j120 = (j120 + 1)) { + fRec31_tmp[j120] = fRec31_perm[j120]; + + } + fYec32_idx = ((fYec32_idx + fYec32_idx_save) & 16383); + for (int j124 = 0; (j124 < 4); j124 = (j124 + 1)) { + fYec33_tmp[j124] = fYec33_perm[j124]; + + } + for (int j126 = 0; (j126 < 4); j126 = (j126 + 1)) { + fRec75_tmp[j126] = fRec75_perm[j126]; + + } + for (int j128 = 0; (j128 < 4); j128 = (j128 + 1)) { + fRec32_tmp[j128] = fRec32_perm[j128]; + + } + fYec34_idx = ((fYec34_idx + fYec34_idx_save) & 16383); + for (int j132 = 0; (j132 < 4); j132 = (j132 + 1)) { + fYec35_tmp[j132] = fYec35_perm[j132]; + + } + for (int j134 = 0; (j134 < 4); j134 = (j134 + 1)) { + fRec30_tmp[j134] = fRec30_perm[j134]; + + } + for (int j136 = 0; (j136 < 4); j136 = (j136 + 1)) { + fRec28_tmp[j136] = fRec28_perm[j136]; + + } + fYec36_idx = ((fYec36_idx + fYec36_idx_save) & 16383); + for (int j140 = 0; (j140 < 4); j140 = (j140 + 1)) { + fYec37_tmp[j140] = fYec37_perm[j140]; + + } + for (int j142 = 0; (j142 < 4); j142 = (j142 + 1)) { + fRec78_tmp[j142] = fRec78_perm[j142]; + + } + for (int j144 = 0; (j144 < 4); j144 = (j144 + 1)) { + fRec29_tmp[j144] = fRec29_perm[j144]; + + } + fYec38_idx = ((fYec38_idx + fYec38_idx_save) & 16383); + for (int j148 = 0; (j148 < 4); j148 = (j148 + 1)) { + fYec39_tmp[j148] = fYec39_perm[j148]; + + } + for (int j150 = 0; (j150 < 4); j150 = (j150 + 1)) { + fRec27_tmp[j150] = fRec27_perm[j150]; + + } + for (int j152 = 0; (j152 < 4); j152 = (j152 + 1)) { + fRec25_tmp[j152] = fRec25_perm[j152]; + + } + fYec40_idx = ((fYec40_idx + fYec40_idx_save) & 16383); + for (int j156 = 0; (j156 < 4); j156 = (j156 + 1)) { + fYec41_tmp[j156] = fYec41_perm[j156]; + + } + for (int j158 = 0; (j158 < 4); j158 = (j158 + 1)) { + fRec81_tmp[j158] = fRec81_perm[j158]; + + } + for (int j160 = 0; (j160 < 4); j160 = (j160 + 1)) { + fRec26_tmp[j160] = fRec26_perm[j160]; + + } + fYec42_idx = ((fYec42_idx + fYec42_idx_save) & 16383); + for (int j164 = 0; (j164 < 4); j164 = (j164 + 1)) { + fYec43_tmp[j164] = fYec43_perm[j164]; + + } + for (int j166 = 0; (j166 < 4); j166 = (j166 + 1)) { + fRec24_tmp[j166] = fRec24_perm[j166]; + + } + for (int j168 = 0; (j168 < 4); j168 = (j168 + 1)) { + fRec22_tmp[j168] = fRec22_perm[j168]; + + } + fYec44_idx = ((fYec44_idx + fYec44_idx_save) & 16383); + for (int j172 = 0; (j172 < 4); j172 = (j172 + 1)) { + fYec45_tmp[j172] = fYec45_perm[j172]; + + } + for (int j174 = 0; (j174 < 4); j174 = (j174 + 1)) { + fRec84_tmp[j174] = fRec84_perm[j174]; + + } + for (int j176 = 0; (j176 < 4); j176 = (j176 + 1)) { + fRec23_tmp[j176] = fRec23_perm[j176]; + + } + fYec46_idx = ((fYec46_idx + fYec46_idx_save) & 16383); + fYec47_idx = ((fYec47_idx + fYec47_idx_save) & 16383); + for (int j180 = 0; (j180 < 4); j180 = (j180 + 1)) { + fYec48_tmp[j180] = fYec48_perm[j180]; + + } + for (int j182 = 0; (j182 < 4); j182 = (j182 + 1)) { + fRec21_tmp[j182] = fRec21_perm[j182]; + + } + for (int j184 = 0; (j184 < 4); j184 = (j184 + 1)) { + fRec20_tmp[j184] = fRec20_perm[j184]; + + } + for (int j186 = 0; (j186 < 4); j186 = (j186 + 1)) { + fRec19_tmp[j186] = fRec19_perm[j186]; + + } + for (int j188 = 0; (j188 < 4); j188 = (j188 + 1)) { + fRec18_tmp[j188] = fRec18_perm[j188]; + + } + for (int j190 = 0; (j190 < 4); j190 = (j190 + 1)) { + fRec17_tmp[j190] = fRec17_perm[j190]; + + } + for (int j192 = 0; (j192 < 4); j192 = (j192 + 1)) { + fRec92_tmp[j192] = fRec92_perm[j192]; + + } + for (int j194 = 0; (j194 < 4); j194 = (j194 + 1)) { + fRec91_tmp[j194] = fRec91_perm[j194]; + + } + for (int j196 = 0; (j196 < 4); j196 = (j196 + 1)) { + fRec90_tmp[j196] = fRec90_perm[j196]; + + } + for (int j198 = 0; (j198 < 4); j198 = (j198 + 1)) { + fYec49_tmp[j198] = fYec49_perm[j198]; + + } + for (int j200 = 0; (j200 < 4); j200 = (j200 + 1)) { + fRec89_tmp[j200] = fRec89_perm[j200]; + + } + for (int j202 = 0; (j202 < 4); j202 = (j202 + 1)) { + fRec88_tmp[j202] = fRec88_perm[j202]; + + } + for (int j204 = 0; (j204 < 4); j204 = (j204 + 1)) { + fRec87_tmp[j204] = fRec87_perm[j204]; + + } + for (int j206 = 0; (j206 < 4); j206 = (j206 + 1)) { + fRec95_tmp[j206] = fRec95_perm[j206]; + + } + for (int j208 = 0; (j208 < 4); j208 = (j208 + 1)) { + fRec94_tmp[j208] = fRec94_perm[j208]; + + } + for (int j210 = 0; (j210 < 4); j210 = (j210 + 1)) { + fRec93_tmp[j210] = fRec93_perm[j210]; + + } + fYec50_idx = ((fYec50_idx + fYec50_idx_save) & 1023); + for (int j212 = 0; (j212 < 4); j212 = (j212 + 1)) { + fRec14_tmp[j212] = fRec14_perm[j212]; + + } + fYec51_idx = ((fYec51_idx + fYec51_idx_save) & 16383); + fYec52_idx = ((fYec52_idx + fYec52_idx_save) & 16383); + for (int j216 = 0; (j216 < 4); j216 = (j216 + 1)) { + fYec53_tmp[j216] = fYec53_perm[j216]; + + } + for (int j218 = 0; (j218 < 4); j218 = (j218 + 1)) { + fRec101_tmp[j218] = fRec101_perm[j218]; + + } + for (int j220 = 0; (j220 < 4); j220 = (j220 + 1)) { + fRec100_tmp[j220] = fRec100_perm[j220]; + + } + for (int j222 = 0; (j222 < 4); j222 = (j222 + 1)) { + fRec99_tmp[j222] = fRec99_perm[j222]; + + } + for (int j224 = 0; (j224 < 4); j224 = (j224 + 1)) { + fRec98_tmp[j224] = fRec98_perm[j224]; + + } + for (int j226 = 0; (j226 < 4); j226 = (j226 + 1)) { + fRec97_tmp[j226] = fRec97_perm[j226]; + + } + for (int j228 = 0; (j228 < 4); j228 = (j228 + 1)) { + fRec108_tmp[j228] = fRec108_perm[j228]; + + } + for (int j230 = 0; (j230 < 4); j230 = (j230 + 1)) { + fRec107_tmp[j230] = fRec107_perm[j230]; + + } + for (int j232 = 0; (j232 < 4); j232 = (j232 + 1)) { + fRec106_tmp[j232] = fRec106_perm[j232]; + + } + for (int j234 = 0; (j234 < 4); j234 = (j234 + 1)) { + fYec54_tmp[j234] = fYec54_perm[j234]; + + } + for (int j236 = 0; (j236 < 4); j236 = (j236 + 1)) { + fRec105_tmp[j236] = fRec105_perm[j236]; + + } + for (int j238 = 0; (j238 < 4); j238 = (j238 + 1)) { + fRec104_tmp[j238] = fRec104_perm[j238]; + + } + for (int j240 = 0; (j240 < 4); j240 = (j240 + 1)) { + fRec103_tmp[j240] = fRec103_perm[j240]; + + } + for (int j242 = 0; (j242 < 4); j242 = (j242 + 1)) { + fRec111_tmp[j242] = fRec111_perm[j242]; + + } + for (int j244 = 0; (j244 < 4); j244 = (j244 + 1)) { + fRec110_tmp[j244] = fRec110_perm[j244]; + + } + for (int j246 = 0; (j246 < 4); j246 = (j246 + 1)) { + fRec109_tmp[j246] = fRec109_perm[j246]; + + } + fYec55_idx = ((fYec55_idx + fYec55_idx_save) & 1023); + for (int j248 = 0; (j248 < 4); j248 = (j248 + 1)) { + fRec96_tmp[j248] = fRec96_perm[j248]; + + } + fYec56_idx = ((fYec56_idx + fYec56_idx_save) & 16383); + for (int j250 = 0; (j250 < 4); j250 = (j250 + 1)) { + fYec57_tmp[j250] = fYec57_perm[j250]; + + } + for (int j252 = 0; (j252 < 4); j252 = (j252 + 1)) { + fRec13_tmp[j252] = fRec13_perm[j252]; + + } + for (int j254 = 0; (j254 < 4); j254 = (j254 + 1)) { + fRec11_tmp[j254] = fRec11_perm[j254]; + + } + fYec58_idx = ((fYec58_idx + fYec58_idx_save) & 16383); + for (int j258 = 0; (j258 < 4); j258 = (j258 + 1)) { + fYec59_tmp[j258] = fYec59_perm[j258]; + + } + for (int j260 = 0; (j260 < 4); j260 = (j260 + 1)) { + fRec112_tmp[j260] = fRec112_perm[j260]; + + } + for (int j262 = 0; (j262 < 4); j262 = (j262 + 1)) { + fRec12_tmp[j262] = fRec12_perm[j262]; + + } + fYec60_idx = ((fYec60_idx + fYec60_idx_save) & 16383); + for (int j264 = 0; (j264 < 4); j264 = (j264 + 1)) { + fYec61_tmp[j264] = fYec61_perm[j264]; + + } + for (int j266 = 0; (j266 < 4); j266 = (j266 + 1)) { + fRec10_tmp[j266] = fRec10_perm[j266]; + + } + for (int j268 = 0; (j268 < 4); j268 = (j268 + 1)) { + fRec8_tmp[j268] = fRec8_perm[j268]; + + } + fYec62_idx = ((fYec62_idx + fYec62_idx_save) & 16383); + for (int j270 = 0; (j270 < 4); j270 = (j270 + 1)) { + fYec63_tmp[j270] = fYec63_perm[j270]; + + } + for (int j272 = 0; (j272 < 4); j272 = (j272 + 1)) { + fRec114_tmp[j272] = fRec114_perm[j272]; + + } + for (int j274 = 0; (j274 < 4); j274 = (j274 + 1)) { + fRec9_tmp[j274] = fRec9_perm[j274]; + + } + fYec64_idx = ((fYec64_idx + fYec64_idx_save) & 16383); + for (int j276 = 0; (j276 < 4); j276 = (j276 + 1)) { + fYec65_tmp[j276] = fYec65_perm[j276]; + + } + for (int j278 = 0; (j278 < 4); j278 = (j278 + 1)) { + fRec7_tmp[j278] = fRec7_perm[j278]; + + } + for (int j280 = 0; (j280 < 4); j280 = (j280 + 1)) { + fRec5_tmp[j280] = fRec5_perm[j280]; + + } + fYec66_idx = ((fYec66_idx + fYec66_idx_save) & 16383); + for (int j284 = 0; (j284 < 4); j284 = (j284 + 1)) { + fYec67_tmp[j284] = fYec67_perm[j284]; + + } + for (int j286 = 0; (j286 < 4); j286 = (j286 + 1)) { + fRec115_tmp[j286] = fRec115_perm[j286]; + + } + for (int j288 = 0; (j288 < 4); j288 = (j288 + 1)) { + fRec6_tmp[j288] = fRec6_perm[j288]; + + } + fYec68_idx = ((fYec68_idx + fYec68_idx_save) & 16383); + for (int j292 = 0; (j292 < 4); j292 = (j292 + 1)) { + fYec69_tmp[j292] = fYec69_perm[j292]; + + } + for (int j294 = 0; (j294 < 4); j294 = (j294 + 1)) { + fRec4_tmp[j294] = fRec4_perm[j294]; + + } + for (int j296 = 0; (j296 < 4); j296 = (j296 + 1)) { + fRec2_tmp[j296] = fRec2_perm[j296]; + + } + fYec70_idx = ((fYec70_idx + fYec70_idx_save) & 16383); + for (int j298 = 0; (j298 < 4); j298 = (j298 + 1)) { + fYec71_tmp[j298] = fYec71_perm[j298]; + + } + for (int j300 = 0; (j300 < 4); j300 = (j300 + 1)) { + fRec118_tmp[j300] = fRec118_perm[j300]; + + } + for (int j302 = 0; (j302 < 4); j302 = (j302 + 1)) { + fRec3_tmp[j302] = fRec3_perm[j302]; + + } + for (int j304 = 0; (j304 < 4); j304 = (j304 + 1)) { + fRec0_tmp[j304] = fRec0_perm[j304]; + + } + for (int j306 = 0; (j306 < 4); j306 = (j306 + 1)) { + fRec1_tmp[j306] = fRec1_perm[j306]; + + } + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + fZec1[i] = ((0.760313988f * fRec0[(i - 1)]) - (0.649555743f * fRec50[(i - 1)])); + fZec2[i] = ((0.760313988f * fRec1[(i - 1)]) - (0.649555743f * fRec51[(i - 1)])); + fYec0[((i + fYec0_idx) & 16383)] = ((0.707106769f * fZec1[i]) - (0.707106769f * fZec2[i])); + fYec1[i] = fYec0[(((i + fYec0_idx) - std::min(8192, std::max(0, int(fZec3[i])))) & 16383)]; + fRec52[i] = (fYec1[(i - 1)] - (((fZec4[i] + (2.0f - fRec53[i])) * (fRec52[(i - 1)] - fYec1[i])) / (fRec53[i] - fZec4[i]))); + fRec50[i] = fRec52[i]; + fYec2[((i + fYec2_idx) & 16383)] = ((0.707106769f * fZec1[i]) + (0.707106769f * fZec2[i])); + fYec3[i] = fYec2[(((i + fYec2_idx) - std::min(8192, std::max(0, int(fZec5[i])))) & 16383)]; + fRec54[i] = (fYec3[(i - 1)] - (((fZec6[i] + (2.0f - fRec55[i])) * (fRec54[(i - 1)] - fYec3[i])) / (fRec55[i] - fZec6[i]))); + fRec51[i] = fRec54[i]; + fZec7[i] = ((0.760313988f * fRec50[(i - 1)]) + (0.649555743f * fRec0[(i - 1)])); + fZec8[i] = ((0.760313988f * fZec7[i]) - (0.649555743f * fRec47[(i - 1)])); + fZec9[i] = ((0.760313988f * fRec51[(i - 1)]) + (0.649555743f * fRec1[(i - 1)])); + fZec10[i] = ((0.760313988f * fZec9[i]) - (0.649555743f * fRec48[(i - 1)])); + fYec4[((i + fYec4_idx) & 16383)] = ((0.707106769f * fZec8[i]) - (0.707106769f * fZec10[i])); + fYec5[i] = fYec4[(((i + fYec4_idx) - std::min(8192, std::max(0, int(fZec11[i])))) & 16383)]; + fRec49[i] = (fYec5[(i - 1)] - (((fZec12[i] + (2.0f - fRec56[i])) * (fRec49[(i - 1)] - fYec5[i])) / (fRec56[i] - fZec12[i]))); + fRec47[i] = fRec49[i]; + fYec6[((i + fYec6_idx) & 16383)] = ((0.707106769f * fZec8[i]) + (0.707106769f * fZec10[i])); + fYec7[i] = fYec6[(((i + fYec6_idx) - std::min(8192, std::max(0, int(fZec13[i])))) & 16383)]; + fRec57[i] = (fYec7[(i - 1)] - (((fZec14[i] + (2.0f - fRec58[i])) * (fRec57[(i - 1)] - fYec7[i])) / (fRec58[i] - fZec14[i]))); + fRec48[i] = fRec57[i]; + fZec15[i] = ((0.760313988f * fRec47[(i - 1)]) + (0.649555743f * fZec7[i])); + fZec16[i] = ((0.760313988f * fZec15[i]) - (0.649555743f * fRec44[(i - 1)])); + fZec17[i] = ((0.760313988f * fRec48[(i - 1)]) + (0.649555743f * fZec9[i])); + fZec18[i] = ((0.760313988f * fZec17[i]) - (0.649555743f * fRec45[(i - 1)])); + fYec8[((i + fYec8_idx) & 16383)] = ((0.707106769f * fZec16[i]) - (0.707106769f * fZec18[i])); + fYec9[i] = fYec8[(((i + fYec8_idx) - std::min(8192, std::max(0, int(fZec19[i])))) & 16383)]; + fRec46[i] = (fYec9[(i - 1)] - (((fZec20[i] + (2.0f - fRec59[i])) * (fRec46[(i - 1)] - fYec9[i])) / (fRec59[i] - fZec20[i]))); + fRec44[i] = fRec46[i]; + fYec10[((i + fYec10_idx) & 16383)] = ((0.707106769f * fZec16[i]) + (0.707106769f * fZec18[i])); + fYec11[i] = fYec10[(((i + fYec10_idx) - std::min(8192, std::max(0, int(fZec21[i])))) & 16383)]; + fRec60[i] = (fYec11[(i - 1)] - (((fZec22[i] + (2.0f - fRec61[i])) * (fRec60[(i - 1)] - fYec11[i])) / (fRec61[i] - fZec22[i]))); + fRec45[i] = fRec60[i]; + fZec23[i] = ((0.760313988f * fRec44[(i - 1)]) + (0.649555743f * fZec15[i])); + fZec24[i] = ((0.760313988f * fZec23[i]) - (0.649555743f * fRec41[(i - 1)])); + fZec25[i] = ((0.760313988f * fRec45[(i - 1)]) + (0.649555743f * fZec17[i])); + fZec26[i] = ((0.760313988f * fZec25[i]) - (0.649555743f * fRec42[(i - 1)])); + fYec12[((i + fYec12_idx) & 16383)] = ((0.707106769f * fZec24[i]) - (0.707106769f * fZec26[i])); + fYec13[i] = fYec12[(((i + fYec12_idx) - std::min(8192, std::max(0, int(fZec27[i])))) & 16383)]; + fRec43[i] = (fYec13[(i - 1)] - (((fZec28[i] + (2.0f - fRec62[i])) * (fRec43[(i - 1)] - fYec13[i])) / (fRec62[i] - fZec28[i]))); + fRec41[i] = fRec43[i]; + fYec14[((i + fYec14_idx) & 16383)] = ((0.707106769f * fZec24[i]) + (0.707106769f * fZec26[i])); + fYec15[i] = fYec14[(((i + fYec14_idx) - std::min(8192, std::max(0, int(fZec29[i])))) & 16383)]; + fRec63[i] = (fYec15[(i - 1)] - (((fZec30[i] + (2.0f - fRec64[i])) * (fRec63[(i - 1)] - fYec15[i])) / (fRec64[i] - fZec30[i]))); + fRec42[i] = fRec63[i]; + fZec31[i] = ((0.760313988f * fRec41[(i - 1)]) + (0.649555743f * fZec23[i])); + fZec32[i] = ((0.760313988f * fZec31[i]) - (0.649555743f * fRec38[(i - 1)])); + fZec33[i] = ((0.760313988f * fRec42[(i - 1)]) + (0.649555743f * fZec25[i])); + fZec34[i] = ((0.760313988f * fZec33[i]) - (0.649555743f * fRec39[(i - 1)])); + fYec16[((i + fYec16_idx) & 16383)] = ((0.707106769f * fZec32[i]) - (0.707106769f * fZec34[i])); + fYec17[i] = fYec16[(((i + fYec16_idx) - std::min(8192, std::max(0, int(fZec35[i])))) & 16383)]; + fRec40[i] = (fYec17[(i - 1)] - (((fZec36[i] + (2.0f - fRec65[i])) * (fRec40[(i - 1)] - fYec17[i])) / (fRec65[i] - fZec36[i]))); + fRec38[i] = fRec40[i]; + fYec18[((i + fYec18_idx) & 16383)] = ((0.707106769f * fZec32[i]) + (0.707106769f * fZec34[i])); + fYec19[i] = fYec18[(((i + fYec18_idx) - std::min(8192, std::max(0, int(fZec37[i])))) & 16383)]; + fRec66[i] = (fYec19[(i - 1)] - (((fZec38[i] + (2.0f - fRec67[i])) * (fRec66[(i - 1)] - fYec19[i])) / (fRec67[i] - fZec38[i]))); + fRec39[i] = fRec66[i]; + fYec20[((i + fYec20_idx) & 1023)] = ((0.760313988f * fRec38[(i - 1)]) + (0.649555743f * fZec31[i])); + fYec21[((i + fYec21_idx) & 16383)] = (((((fYec20[(((i + fYec20_idx) - iZec42[i]) & 1023)] * fZec45[i]) * fZec47[i]) * fZec49[i]) * fZec51[i]) + (fZec52[i] * ((((((fYec20[(((i + fYec20_idx) - iZec53[i]) & 1023)] * fZec54[i]) * fZec55[i]) * fZec56[i]) + (0.5f * (((fZec44[i] * fYec20[(((i + fYec20_idx) - iZec57[i]) & 1023)]) * fZec58[i]) * fZec59[i]))) + (0.166666672f * ((fZec60[i] * fYec20[(((i + fYec20_idx) - iZec61[i]) & 1023)]) * fZec62[i]))) + (0.0416666679f * (fZec63[i] * fYec20[(((i + fYec20_idx) - iZec64[i]) & 1023)]))))); + fYec22[i] = fYec21[(((i + fYec21_idx) - std::min(8192, std::max(0, int(fZec65[i])))) & 16383)]; + fRec37[i] = (fYec22[(i - 1)] - (((fZec66[i] + (2.0f - fRec68[i])) * (fRec37[(i - 1)] - fYec22[i])) / (fRec68[i] - fZec66[i]))); + fYec23[((i + fYec23_idx) & 1023)] = ((0.760313988f * fRec39[(i - 1)]) + (0.649555743f * fZec33[i])); + fYec24[((i + fYec24_idx) & 16383)] = (((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, iZec69[i]))) & 1023)] * (0.0f - fZec71[i])) * (0.0f - (0.5f * fZec72[i]))) * (0.0f - (0.333333343f * fZec73[i]))) * (0.0f - (0.25f * fZec74[i]))) + ((fSlow26 + (fZec67[i] + (5.0f - fZec70[i]))) * ((((((fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 1)))) & 1023)] * (0.0f - fZec72[i])) * (0.0f - (0.5f * fZec73[i]))) * (0.0f - (0.333333343f * fZec74[i]))) + (0.5f * (((fZec71[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 2)))) & 1023)]) * (0.0f - fZec73[i])) * (0.0f - (0.5f * fZec74[i]))))) + (0.166666672f * ((fZec75[i] * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 3)))) & 1023)]) * (0.0f - fZec74[i])))) + (0.0416666679f * ((fZec75[i] * fZec73[i]) * fYec23[(((i + fYec23_idx) - std::min(512, std::max(0, (iZec69[i] + 4)))) & 1023)]))))); + fYec25[i] = fYec24[(((i + fYec24_idx) - std::min(8192, std::max(0, int(fZec76[i])))) & 16383)]; + fRec69[i] = (fYec25[(i - 1)] - (((fZec77[i] + (2.0f - fRec70[i])) * (fRec69[(i - 1)] - fYec25[i])) / (fRec70[i] - fZec77[i]))); + fZec78[i] = ((0.760313988f * fRec37[i]) - (0.649555743f * fRec34[(i - 1)])); + fZec79[i] = ((0.760313988f * fRec69[i]) - (0.649555743f * fRec35[(i - 1)])); + fYec26[((i + fYec26_idx) & 16383)] = ((0.707106769f * fZec78[i]) - (0.707106769f * fZec79[i])); + fYec27[i] = fYec26[(((i + fYec26_idx) - std::min(8192, std::max(0, int(fZec80[i])))) & 16383)]; + fRec36[i] = (fYec27[(i - 1)] - (((fZec81[i] + (2.0f - fRec71[i])) * (fRec36[(i - 1)] - fYec27[i])) / (fRec71[i] - fZec81[i]))); + fRec34[i] = fRec36[i]; + fYec28[((i + fYec28_idx) & 16383)] = ((0.707106769f * fZec78[i]) + (0.707106769f * fZec79[i])); + fYec29[i] = fYec28[(((i + fYec28_idx) - std::min(8192, std::max(0, int(fZec82[i])))) & 16383)]; + fRec72[i] = (fYec29[(i - 1)] - (((fZec83[i] + (2.0f - fRec73[i])) * (fRec72[(i - 1)] - fYec29[i])) / (fRec73[i] - fZec83[i]))); + fRec35[i] = fRec72[i]; + fZec84[i] = ((0.760313988f * fRec34[(i - 1)]) + (0.649555743f * fRec37[i])); + fZec85[i] = ((0.760313988f * fZec84[i]) - (0.649555743f * fRec31[(i - 1)])); + fZec86[i] = ((0.760313988f * fRec35[(i - 1)]) + (0.649555743f * fRec69[i])); + fZec87[i] = ((0.760313988f * fZec86[i]) - (0.649555743f * fRec32[(i - 1)])); + fYec30[((i + fYec30_idx) & 16383)] = ((0.707106769f * fZec85[i]) - (0.707106769f * fZec87[i])); + fYec31[i] = fYec30[(((i + fYec30_idx) - std::min(8192, std::max(0, int(fZec88[i])))) & 16383)]; + fRec33[i] = (fYec31[(i - 1)] - (((fZec89[i] + (2.0f - fRec74[i])) * (fRec33[(i - 1)] - fYec31[i])) / (fRec74[i] - fZec89[i]))); + fRec31[i] = fRec33[i]; + fYec32[((i + fYec32_idx) & 16383)] = ((0.707106769f * fZec85[i]) + (0.707106769f * fZec87[i])); + fYec33[i] = fYec32[(((i + fYec32_idx) - iZec91[i]) & 16383)]; + fRec75[i] = (fYec33[(i - 1)] - ((fZec93[i] * (fRec75[(i - 1)] - fYec33[i])) / fZec94[i])); + fRec32[i] = fRec75[i]; + fZec95[i] = ((0.760313988f * fRec31[(i - 1)]) + (0.649555743f * fZec84[i])); + fZec96[i] = ((0.760313988f * fZec95[i]) - (0.649555743f * fRec28[(i - 1)])); + fZec97[i] = ((0.760313988f * fRec32[(i - 1)]) + (0.649555743f * fZec86[i])); + fZec98[i] = ((0.760313988f * fZec97[i]) - (0.649555743f * fRec29[(i - 1)])); + fYec34[((i + fYec34_idx) & 16383)] = ((0.707106769f * fZec96[i]) - (0.707106769f * fZec98[i])); + fYec35[i] = fYec34[(((i + fYec34_idx) - std::min(8192, std::max(0, int(fZec99[i])))) & 16383)]; + fRec30[i] = (fYec35[(i - 1)] - (((fZec100[i] + (2.0f - fRec77[i])) * (fRec30[(i - 1)] - fYec35[i])) / (fRec77[i] - fZec100[i]))); + fRec28[i] = fRec30[i]; + fYec36[((i + fYec36_idx) & 16383)] = ((0.707106769f * fZec96[i]) + (0.707106769f * fZec98[i])); + fYec37[i] = fYec36[(((i + fYec36_idx) - iZec102[i]) & 16383)]; + fRec78[i] = (fYec37[(i - 1)] - ((fZec104[i] * (fRec78[(i - 1)] - fYec37[i])) / fZec105[i])); + fRec29[i] = fRec78[i]; + fZec106[i] = ((0.760313988f * fRec28[(i - 1)]) + (0.649555743f * fZec95[i])); + fZec107[i] = ((0.760313988f * fZec106[i]) - (0.649555743f * fRec25[(i - 1)])); + fZec108[i] = ((0.760313988f * fRec29[(i - 1)]) + (0.649555743f * fZec97[i])); + fZec109[i] = ((0.760313988f * fZec108[i]) - (0.649555743f * fRec26[(i - 1)])); + fYec38[((i + fYec38_idx) & 16383)] = ((0.707106769f * fZec107[i]) - (0.707106769f * fZec109[i])); + fYec39[i] = fYec38[(((i + fYec38_idx) - iZec111[i]) & 16383)]; + fRec27[i] = (fYec39[(i - 1)] - ((fZec113[i] * (fRec27[(i - 1)] - fYec39[i])) / fZec114[i])); + fRec25[i] = fRec27[i]; + fYec40[((i + fYec40_idx) & 16383)] = ((0.707106769f * fZec107[i]) + (0.707106769f * fZec109[i])); + fYec41[i] = fYec40[(((i + fYec40_idx) - iZec116[i]) & 16383)]; + fRec81[i] = (fYec41[(i - 1)] - ((fZec118[i] * (fRec81[(i - 1)] - fYec41[i])) / fZec119[i])); + fRec26[i] = fRec81[i]; + fZec120[i] = ((0.760313988f * fRec25[(i - 1)]) + (0.649555743f * fZec106[i])); + fZec121[i] = ((0.760313988f * fZec120[i]) - (0.649555743f * fRec22[(i - 1)])); + fZec122[i] = ((0.760313988f * fRec26[(i - 1)]) + (0.649555743f * fZec108[i])); + fZec123[i] = ((0.760313988f * fZec122[i]) - (0.649555743f * fRec23[(i - 1)])); + fYec42[((i + fYec42_idx) & 16383)] = ((0.707106769f * fZec121[i]) - (0.707106769f * fZec123[i])); + fYec43[i] = fYec42[(((i + fYec42_idx) - std::min(8192, std::max(0, int(fZec124[i])))) & 16383)]; + fRec24[i] = (fYec43[(i - 1)] - (((fZec125[i] + (2.0f - fRec83[i])) * (fRec24[(i - 1)] - fYec43[i])) / (fRec83[i] - fZec125[i]))); + fRec22[i] = fRec24[i]; + fYec44[((i + fYec44_idx) & 16383)] = ((0.707106769f * fZec121[i]) + (0.707106769f * fZec123[i])); + fYec45[i] = fYec44[(((i + fYec44_idx) - iZec127[i]) & 16383)]; + fRec84[i] = (fYec45[(i - 1)] - ((fZec129[i] * (fRec84[(i - 1)] - fYec45[i])) / fZec130[i])); + fRec23[i] = fRec84[i]; + fYec46[((i + fYec46_idx) & 16383)] = ((0.760313988f * fRec22[(i - 1)]) + (0.649555743f * fZec120[i])); + fYec47[((i + fYec47_idx) & 16383)] = (((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec134[i])) & 16383)] * fZec137[i]) * fZec139[i]) * fZec141[i]) * fZec143[i]) + (fZec144[i] * ((((((fYec46[(((i + fYec46_idx) - std::min(8192, iZec145[i])) & 16383)] * fZec146[i]) * fZec147[i]) * fZec148[i]) + (0.5f * (((fZec136[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec149[i])) & 16383)]) * fZec150[i]) * fZec151[i]))) + (0.166666672f * ((fZec152[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec153[i])) & 16383)]) * fZec154[i]))) + (0.0416666679f * (fZec155[i] * fYec46[(((i + fYec46_idx) - std::min(8192, iZec156[i])) & 16383)]))))); + fYec48[i] = fYec47[(((i + fYec47_idx) - std::min(8192, std::max(0, int(fZec157[i])))) & 16383)]; + fRec21[i] = (fYec48[(i - 1)] - (((fZec158[i] + (2.0f - fRec86[i])) * (fRec21[(i - 1)] - fYec48[i])) / (fRec86[i] - fZec158[i]))); + fRec20[i] = ((fSlow55 * fRec21[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec20[(i - 1)]) - (fSlow53 * fRec21[i])))); + fRec19[i] = (fRec20[i] - (fSlow58 * ((fSlow59 * fRec19[(i - 2)]) + (fSlow62 * fRec19[(i - 1)])))); + fRec18[i] = ((fSlow58 * (((fSlow61 * fRec19[i]) + (fSlow63 * fRec19[(i - 1)])) + (fSlow61 * fRec19[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec18[(i - 2)]) + (fSlow62 * fRec18[(i - 1)])))); + fZec159[i] = (fSlow73 * fRec17[(i - 1)]); + fRec17[i] = ((fSlow65 * (((fSlow61 * fRec18[i]) + (fSlow63 * fRec18[(i - 1)])) + (fSlow61 * fRec18[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec17[(i - 2)]) + fZec159[i]))); + fRec92[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec92[(i - 1)]) - (fRec21[i] + fRec21[(i - 1)])))); + fRec91[i] = (fRec92[i] - (fSlow58 * ((fSlow59 * fRec91[(i - 2)]) + (fSlow62 * fRec91[(i - 1)])))); + fRec90[i] = ((fSlow58 * (fRec91[(i - 2)] + (fRec91[i] + (2.0f * fRec91[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec90[(i - 2)]) + (fSlow62 * fRec90[(i - 1)])))); + fZec160[i] = (fRec90[(i - 2)] + (fRec90[i] + (2.0f * fRec90[(i - 1)]))); + fYec49[i] = (fSlow65 * fZec160[i]); + fRec89[i] = ((fSlow75 * fYec49[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec89[(i - 1)]) - (fSlow78 * fZec160[i])))); + fRec88[i] = (fRec89[i] - (fSlow79 * ((fSlow80 * fRec88[(i - 2)]) + (fSlow73 * fRec88[(i - 1)])))); + fRec87[i] = ((fSlow79 * (((fSlow72 * fRec88[i]) + (fSlow81 * fRec88[(i - 1)])) + (fSlow72 * fRec88[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec87[(i - 2)]) + (fSlow73 * fRec87[(i - 1)])))); + fRec95[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec95[(i - 1)]) - (fYec49[i] + fYec49[(i - 1)])))); + fRec94[i] = (fRec95[i] - (fSlow79 * ((fSlow80 * fRec94[(i - 2)]) + (fSlow73 * fRec94[(i - 1)])))); + fRec93[i] = ((fSlow79 * (fRec94[(i - 2)] + (fRec94[i] + (2.0f * fRec94[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec93[(i - 2)]) + (fSlow73 * fRec93[(i - 1)])))); + fYec50[((i + fYec50_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec17[(i - 2)] + (fSlow69 * (fZec159[i] + (fSlow70 * fRec17[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec87[i]) + (fSlow81 * fRec87[(i - 1)])) + (fSlow72 * fRec87[(i - 2)]))) + (fSlow89 * (fRec93[(i - 2)] + (fRec93[i] + (2.0f * fRec93[(i - 1)])))))))) + float(input0[i])); + fRec14[i] = ((fSlow84 * fRec14[(i - 1)]) + (fSlow85 * (((((fZec137[i] * fZec139[i]) * fZec141[i]) * fZec143[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec134[i])) & 1023)]) + (fZec144[i] * ((((((fZec146[i] * fZec147[i]) * fZec148[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec145[i])) & 1023)]) + (0.5f * (((fZec136[i] * fZec150[i]) * fZec151[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec149[i])) & 1023)]))) + (0.166666672f * ((fZec152[i] * fZec154[i]) * fYec50[(((i + fYec50_idx) - std::min(512, iZec153[i])) & 1023)]))) + (0.0416666679f * (fZec155[i] * fYec50[(((i + fYec50_idx) - std::min(512, iZec156[i])) & 1023)]))))))); + fYec51[((i + fYec51_idx) & 16383)] = ((0.760313988f * fRec23[(i - 1)]) + (0.649555743f * fZec122[i])); + fYec52[((i + fYec52_idx) & 16383)] = (((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, iZec163[i]))) & 16383)] * (0.0f - fZec165[i])) * (0.0f - (0.5f * fZec166[i]))) * (0.0f - (0.333333343f * fZec167[i]))) * (0.0f - (0.25f * fZec168[i]))) + ((fSlow26 + (fZec161[i] + (5.0f - fZec164[i]))) * ((((((fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 1)))) & 16383)] * (0.0f - fZec166[i])) * (0.0f - (0.5f * fZec167[i]))) * (0.0f - (0.333333343f * fZec168[i]))) + (0.5f * (((fZec165[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 2)))) & 16383)]) * (0.0f - fZec167[i])) * (0.0f - (0.5f * fZec168[i]))))) + (0.166666672f * ((fZec169[i] * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 3)))) & 16383)]) * (0.0f - fZec168[i])))) + (0.0416666679f * ((fZec169[i] * fZec167[i]) * fYec51[(((i + fYec51_idx) - std::min(8192, std::max(0, (iZec163[i] + 4)))) & 16383)]))))); + fYec53[i] = fYec52[(((i + fYec52_idx) - std::min(8192, std::max(0, int(fZec170[i])))) & 16383)]; + fRec101[i] = (fYec53[(i - 1)] - (((fZec171[i] + (2.0f - fRec102[i])) * (fRec101[(i - 1)] - fYec53[i])) / (fRec102[i] - fZec171[i]))); + fRec100[i] = ((fSlow55 * fRec101[(i - 1)]) - (fSlow56 * ((fSlow57 * fRec100[(i - 1)]) - (fSlow53 * fRec101[i])))); + fRec99[i] = (fRec100[i] - (fSlow58 * ((fSlow59 * fRec99[(i - 2)]) + (fSlow62 * fRec99[(i - 1)])))); + fRec98[i] = ((fSlow58 * (((fSlow61 * fRec99[i]) + (fSlow63 * fRec99[(i - 1)])) + (fSlow61 * fRec99[(i - 2)]))) - (fSlow65 * ((fSlow66 * fRec98[(i - 2)]) + (fSlow62 * fRec98[(i - 1)])))); + fZec172[i] = (fSlow73 * fRec97[(i - 1)]); + fRec97[i] = ((fSlow65 * (((fSlow61 * fRec98[i]) + (fSlow63 * fRec98[(i - 1)])) + (fSlow61 * fRec98[(i - 2)]))) - (fSlow69 * ((fSlow70 * fRec97[(i - 2)]) + fZec172[i]))); + fRec108[i] = (0.0f - (fSlow56 * ((fSlow57 * fRec108[(i - 1)]) - (fRec101[i] + fRec101[(i - 1)])))); + fRec107[i] = (fRec108[i] - (fSlow58 * ((fSlow59 * fRec107[(i - 2)]) + (fSlow62 * fRec107[(i - 1)])))); + fRec106[i] = ((fSlow58 * (fRec107[(i - 2)] + (fRec107[i] + (2.0f * fRec107[(i - 1)])))) - (fSlow65 * ((fSlow66 * fRec106[(i - 2)]) + (fSlow62 * fRec106[(i - 1)])))); + fZec173[i] = (fRec106[(i - 2)] + (fRec106[i] + (2.0f * fRec106[(i - 1)]))); + fYec54[i] = (fSlow65 * fZec173[i]); + fRec105[i] = ((fSlow75 * fYec54[(i - 1)]) - (fSlow76 * ((fSlow77 * fRec105[(i - 1)]) - (fSlow78 * fZec173[i])))); + fRec104[i] = (fRec105[i] - (fSlow79 * ((fSlow80 * fRec104[(i - 2)]) + (fSlow73 * fRec104[(i - 1)])))); + fRec103[i] = ((fSlow79 * (((fSlow72 * fRec104[i]) + (fSlow81 * fRec104[(i - 1)])) + (fSlow72 * fRec104[(i - 2)]))) - (fSlow82 * ((fSlow83 * fRec103[(i - 2)]) + (fSlow73 * fRec103[(i - 1)])))); + fRec111[i] = (0.0f - (fSlow76 * ((fSlow77 * fRec111[(i - 1)]) - (fYec54[i] + fYec54[(i - 1)])))); + fRec110[i] = (fRec111[i] - (fSlow79 * ((fSlow80 * fRec110[(i - 2)]) + (fSlow73 * fRec110[(i - 1)])))); + fRec109[i] = ((fSlow79 * (fRec110[(i - 2)] + (fRec110[i] + (2.0f * fRec110[(i - 1)])))) - (fSlow82 * ((fSlow83 * fRec109[(i - 2)]) + (fSlow73 * fRec109[(i - 1)])))); + fYec55[((i + fYec55_idx) & 1023)] = ((fSlow86 * ((fSlow87 * (fRec97[(i - 2)] + (fSlow69 * (fZec172[i] + (fSlow70 * fRec97[i]))))) + (fSlow82 * ((fSlow88 * (((fSlow72 * fRec103[i]) + (fSlow81 * fRec103[(i - 1)])) + (fSlow72 * fRec103[(i - 2)]))) + (fSlow89 * (fRec109[(i - 2)] + (fRec109[i] + (2.0f * fRec109[(i - 1)])))))))) + float(input1[i])); + fRec96[i] = ((fSlow84 * fRec96[(i - 1)]) + (fSlow85 * (((((fZec45[i] * fZec47[i]) * fZec49[i]) * fZec51[i]) * fYec55[(((i + fYec55_idx) - iZec42[i]) & 1023)]) + (fZec52[i] * ((((((fZec54[i] * fZec55[i]) * fZec56[i]) * fYec55[(((i + fYec55_idx) - iZec53[i]) & 1023)]) + (0.5f * (((fZec44[i] * fZec58[i]) * fZec59[i]) * fYec55[(((i + fYec55_idx) - iZec57[i]) & 1023)]))) + (0.166666672f * ((fZec60[i] * fZec62[i]) * fYec55[(((i + fYec55_idx) - iZec61[i]) & 1023)]))) + (0.0416666679f * (fZec63[i] * fYec55[(((i + fYec55_idx) - iZec64[i]) & 1023)]))))))); + fZec174[i] = ((fSlow93 * fRec14[i]) - (fSlow94 * fRec11[(i - 1)])); + fZec175[i] = ((fSlow93 * fRec96[i]) - (fSlow94 * fRec12[(i - 1)])); + fYec56[((i + fYec56_idx) & 16383)] = ((0.707106769f * fZec174[i]) - (0.707106769f * fZec175[i])); + fYec57[i] = fYec56[(((i + fYec56_idx) - iZec91[i]) & 16383)]; + fRec13[i] = (fYec57[(i - 1)] - ((fZec93[i] * (fRec13[(i - 1)] - fYec57[i])) / fZec94[i])); + fRec11[i] = fRec13[i]; + fYec58[((i + fYec58_idx) & 16383)] = ((0.707106769f * fZec174[i]) + (0.707106769f * fZec175[i])); + fYec59[i] = fYec58[(((i + fYec58_idx) - std::min(8192, std::max(0, int(fZec176[i])))) & 16383)]; + fRec112[i] = (fYec59[(i - 1)] - (((fZec177[i] + (2.0f - fRec113[i])) * (fRec112[(i - 1)] - fYec59[i])) / (fRec113[i] - fZec177[i]))); + fRec12[i] = fRec112[i]; + fZec178[i] = ((fSlow93 * fRec11[(i - 1)]) + (fSlow94 * fRec14[i])); + fZec179[i] = ((fSlow93 * fZec178[i]) - (fSlow94 * fRec8[(i - 1)])); + fZec180[i] = ((fSlow93 * fRec12[(i - 1)]) + (fSlow94 * fRec96[i])); + fZec181[i] = ((fSlow93 * fZec180[i]) - (fSlow94 * fRec9[(i - 1)])); + fYec60[((i + fYec60_idx) & 16383)] = ((0.707106769f * fZec179[i]) - (0.707106769f * fZec181[i])); + fYec61[i] = fYec60[(((i + fYec60_idx) - iZec111[i]) & 16383)]; + fRec10[i] = (fYec61[(i - 1)] - ((fZec113[i] * (fRec10[(i - 1)] - fYec61[i])) / fZec114[i])); + fRec8[i] = fRec10[i]; + fYec62[((i + fYec62_idx) & 16383)] = ((0.707106769f * fZec179[i]) + (0.707106769f * fZec181[i])); + fYec63[i] = fYec62[(((i + fYec62_idx) - iZec102[i]) & 16383)]; + fRec114[i] = (fYec63[(i - 1)] - ((fZec104[i] * (fRec114[(i - 1)] - fYec63[i])) / fZec105[i])); + fRec9[i] = fRec114[i]; + fZec182[i] = ((fSlow93 * fRec8[(i - 1)]) + (fSlow94 * fZec178[i])); + fZec183[i] = ((fSlow93 * fZec182[i]) - (fSlow94 * fRec5[(i - 1)])); + fZec184[i] = ((fSlow93 * fRec9[(i - 1)]) + (fSlow94 * fZec180[i])); + fZec185[i] = ((fSlow93 * fZec184[i]) - (fSlow94 * fRec6[(i - 1)])); + fYec64[((i + fYec64_idx) & 16383)] = ((0.707106769f * fZec183[i]) - (0.707106769f * fZec185[i])); + fYec65[i] = fYec64[(((i + fYec64_idx) - iZec116[i]) & 16383)]; + fRec7[i] = (fYec65[(i - 1)] - ((fZec118[i] * (fRec7[(i - 1)] - fYec65[i])) / fZec119[i])); + fRec5[i] = fRec7[i]; + fYec66[((i + fYec66_idx) & 16383)] = ((0.707106769f * fZec183[i]) + (0.707106769f * fZec185[i])); + fYec67[i] = fYec66[(((i + fYec66_idx) - std::min(8192, std::max(0, int(fZec186[i])))) & 16383)]; + fRec115[i] = (fYec67[(i - 1)] - (((fZec187[i] + (2.0f - fRec116[i])) * (fRec115[(i - 1)] - fYec67[i])) / (fRec116[i] - fZec187[i]))); + fRec6[i] = fRec115[i]; + fZec188[i] = ((fSlow93 * fRec5[(i - 1)]) + (fSlow94 * fZec182[i])); + fZec189[i] = ((fSlow93 * fZec188[i]) - (fSlow94 * fRec2[(i - 1)])); + fZec190[i] = ((fSlow93 * fRec6[(i - 1)]) + (fSlow94 * fZec184[i])); + fZec191[i] = ((fSlow93 * fZec190[i]) - (fSlow94 * fRec3[(i - 1)])); + fYec68[((i + fYec68_idx) & 16383)] = ((0.707106769f * fZec189[i]) - (0.707106769f * fZec191[i])); + fYec69[i] = fYec68[(((i + fYec68_idx) - std::min(8192, std::max(0, int(fZec192[i])))) & 16383)]; + fRec4[i] = (fYec69[(i - 1)] - (((fZec193[i] + (2.0f - fRec117[i])) * (fRec4[(i - 1)] - fYec69[i])) / (fRec117[i] - fZec193[i]))); + fRec2[i] = fRec4[i]; + fYec70[((i + fYec70_idx) & 16383)] = ((0.707106769f * fZec189[i]) + (0.707106769f * fZec191[i])); + fYec71[i] = fYec70[(((i + fYec70_idx) - iZec127[i]) & 16383)]; + fRec118[i] = (fYec71[(i - 1)] - ((fZec129[i] * (fRec118[(i - 1)] - fYec71[i])) / fZec130[i])); + fRec3[i] = fRec118[i]; + fRec0[i] = ((fSlow93 * fRec2[(i - 1)]) + (fSlow94 * fZec188[i])); + fRec1[i] = ((fSlow93 * fRec3[(i - 1)]) + (fSlow94 * fZec190[i])); + + } + /* Post code */ + fYec70_idx_save = vsize; + for (int j299 = 0; (j299 < 4); j299 = (j299 + 1)) { + fYec71_perm[j299] = fYec71_tmp[(vsize + j299)]; + + } + for (int j301 = 0; (j301 < 4); j301 = (j301 + 1)) { + fRec118_perm[j301] = fRec118_tmp[(vsize + j301)]; + + } + fYec68_idx_save = vsize; + for (int j293 = 0; (j293 < 4); j293 = (j293 + 1)) { + fYec69_perm[j293] = fYec69_tmp[(vsize + j293)]; + + } + fYec66_idx_save = vsize; + for (int j285 = 0; (j285 < 4); j285 = (j285 + 1)) { + fYec67_perm[j285] = fYec67_tmp[(vsize + j285)]; + + } + for (int j287 = 0; (j287 < 4); j287 = (j287 + 1)) { + fRec115_perm[j287] = fRec115_tmp[(vsize + j287)]; + + } + fYec64_idx_save = vsize; + for (int j277 = 0; (j277 < 4); j277 = (j277 + 1)) { + fYec65_perm[j277] = fYec65_tmp[(vsize + j277)]; + + } + fYec62_idx_save = vsize; + for (int j271 = 0; (j271 < 4); j271 = (j271 + 1)) { + fYec63_perm[j271] = fYec63_tmp[(vsize + j271)]; + + } + for (int j273 = 0; (j273 < 4); j273 = (j273 + 1)) { + fRec114_perm[j273] = fRec114_tmp[(vsize + j273)]; + + } + fYec60_idx_save = vsize; + for (int j265 = 0; (j265 < 4); j265 = (j265 + 1)) { + fYec61_perm[j265] = fYec61_tmp[(vsize + j265)]; + + } + fYec58_idx_save = vsize; + for (int j259 = 0; (j259 < 4); j259 = (j259 + 1)) { + fYec59_perm[j259] = fYec59_tmp[(vsize + j259)]; + + } + for (int j261 = 0; (j261 < 4); j261 = (j261 + 1)) { + fRec112_perm[j261] = fRec112_tmp[(vsize + j261)]; + + } + fYec56_idx_save = vsize; + for (int j251 = 0; (j251 < 4); j251 = (j251 + 1)) { + fYec57_perm[j251] = fYec57_tmp[(vsize + j251)]; + + } + fYec55_idx_save = vsize; + for (int j243 = 0; (j243 < 4); j243 = (j243 + 1)) { + fRec111_perm[j243] = fRec111_tmp[(vsize + j243)]; + + } + for (int j245 = 0; (j245 < 4); j245 = (j245 + 1)) { + fRec110_perm[j245] = fRec110_tmp[(vsize + j245)]; + + } + for (int j247 = 0; (j247 < 4); j247 = (j247 + 1)) { + fRec109_perm[j247] = fRec109_tmp[(vsize + j247)]; + + } + for (int j235 = 0; (j235 < 4); j235 = (j235 + 1)) { + fYec54_perm[j235] = fYec54_tmp[(vsize + j235)]; + + } + for (int j229 = 0; (j229 < 4); j229 = (j229 + 1)) { + fRec108_perm[j229] = fRec108_tmp[(vsize + j229)]; + + } + for (int j231 = 0; (j231 < 4); j231 = (j231 + 1)) { + fRec107_perm[j231] = fRec107_tmp[(vsize + j231)]; + + } + for (int j233 = 0; (j233 < 4); j233 = (j233 + 1)) { + fRec106_perm[j233] = fRec106_tmp[(vsize + j233)]; + + } + for (int j237 = 0; (j237 < 4); j237 = (j237 + 1)) { + fRec105_perm[j237] = fRec105_tmp[(vsize + j237)]; + + } + for (int j239 = 0; (j239 < 4); j239 = (j239 + 1)) { + fRec104_perm[j239] = fRec104_tmp[(vsize + j239)]; + + } + for (int j241 = 0; (j241 < 4); j241 = (j241 + 1)) { + fRec103_perm[j241] = fRec103_tmp[(vsize + j241)]; + + } + fYec51_idx_save = vsize; + fYec52_idx_save = vsize; + for (int j217 = 0; (j217 < 4); j217 = (j217 + 1)) { + fYec53_perm[j217] = fYec53_tmp[(vsize + j217)]; + + } + for (int j219 = 0; (j219 < 4); j219 = (j219 + 1)) { + fRec101_perm[j219] = fRec101_tmp[(vsize + j219)]; + + } + for (int j221 = 0; (j221 < 4); j221 = (j221 + 1)) { + fRec100_perm[j221] = fRec100_tmp[(vsize + j221)]; + + } + for (int j223 = 0; (j223 < 4); j223 = (j223 + 1)) { + fRec99_perm[j223] = fRec99_tmp[(vsize + j223)]; + + } + for (int j225 = 0; (j225 < 4); j225 = (j225 + 1)) { + fRec98_perm[j225] = fRec98_tmp[(vsize + j225)]; + + } + for (int j227 = 0; (j227 < 4); j227 = (j227 + 1)) { + fRec97_perm[j227] = fRec97_tmp[(vsize + j227)]; + + } + for (int j249 = 0; (j249 < 4); j249 = (j249 + 1)) { + fRec96_perm[j249] = fRec96_tmp[(vsize + j249)]; + + } + fYec50_idx_save = vsize; + for (int j207 = 0; (j207 < 4); j207 = (j207 + 1)) { + fRec95_perm[j207] = fRec95_tmp[(vsize + j207)]; + + } + for (int j209 = 0; (j209 < 4); j209 = (j209 + 1)) { + fRec94_perm[j209] = fRec94_tmp[(vsize + j209)]; + + } + for (int j211 = 0; (j211 < 4); j211 = (j211 + 1)) { + fRec93_perm[j211] = fRec93_tmp[(vsize + j211)]; + + } + for (int j199 = 0; (j199 < 4); j199 = (j199 + 1)) { + fYec49_perm[j199] = fYec49_tmp[(vsize + j199)]; + + } + for (int j193 = 0; (j193 < 4); j193 = (j193 + 1)) { + fRec92_perm[j193] = fRec92_tmp[(vsize + j193)]; + + } + for (int j195 = 0; (j195 < 4); j195 = (j195 + 1)) { + fRec91_perm[j195] = fRec91_tmp[(vsize + j195)]; + + } + for (int j197 = 0; (j197 < 4); j197 = (j197 + 1)) { + fRec90_perm[j197] = fRec90_tmp[(vsize + j197)]; + + } + for (int j201 = 0; (j201 < 4); j201 = (j201 + 1)) { + fRec89_perm[j201] = fRec89_tmp[(vsize + j201)]; + + } + for (int j203 = 0; (j203 < 4); j203 = (j203 + 1)) { + fRec88_perm[j203] = fRec88_tmp[(vsize + j203)]; + + } + for (int j205 = 0; (j205 < 4); j205 = (j205 + 1)) { + fRec87_perm[j205] = fRec87_tmp[(vsize + j205)]; + + } + fYec46_idx_save = vsize; + fYec47_idx_save = vsize; + for (int j181 = 0; (j181 < 4); j181 = (j181 + 1)) { + fYec48_perm[j181] = fYec48_tmp[(vsize + j181)]; + + } + fYec44_idx_save = vsize; + for (int j173 = 0; (j173 < 4); j173 = (j173 + 1)) { + fYec45_perm[j173] = fYec45_tmp[(vsize + j173)]; + + } + for (int j175 = 0; (j175 < 4); j175 = (j175 + 1)) { + fRec84_perm[j175] = fRec84_tmp[(vsize + j175)]; + + } + fYec42_idx_save = vsize; + for (int j165 = 0; (j165 < 4); j165 = (j165 + 1)) { + fYec43_perm[j165] = fYec43_tmp[(vsize + j165)]; + + } + fYec40_idx_save = vsize; + for (int j157 = 0; (j157 < 4); j157 = (j157 + 1)) { + fYec41_perm[j157] = fYec41_tmp[(vsize + j157)]; + + } + for (int j159 = 0; (j159 < 4); j159 = (j159 + 1)) { + fRec81_perm[j159] = fRec81_tmp[(vsize + j159)]; + + } + fYec38_idx_save = vsize; + for (int j149 = 0; (j149 < 4); j149 = (j149 + 1)) { + fYec39_perm[j149] = fYec39_tmp[(vsize + j149)]; + + } + fYec36_idx_save = vsize; + for (int j141 = 0; (j141 < 4); j141 = (j141 + 1)) { + fYec37_perm[j141] = fYec37_tmp[(vsize + j141)]; + + } + for (int j143 = 0; (j143 < 4); j143 = (j143 + 1)) { + fRec78_perm[j143] = fRec78_tmp[(vsize + j143)]; + + } + fYec34_idx_save = vsize; + for (int j133 = 0; (j133 < 4); j133 = (j133 + 1)) { + fYec35_perm[j133] = fYec35_tmp[(vsize + j133)]; + + } + fYec32_idx_save = vsize; + for (int j125 = 0; (j125 < 4); j125 = (j125 + 1)) { + fYec33_perm[j125] = fYec33_tmp[(vsize + j125)]; + + } + for (int j127 = 0; (j127 < 4); j127 = (j127 + 1)) { + fRec75_perm[j127] = fRec75_tmp[(vsize + j127)]; + + } + fYec30_idx_save = vsize; + for (int j117 = 0; (j117 < 4); j117 = (j117 + 1)) { + fYec31_perm[j117] = fYec31_tmp[(vsize + j117)]; + + } + fYec28_idx_save = vsize; + for (int j109 = 0; (j109 < 4); j109 = (j109 + 1)) { + fYec29_perm[j109] = fYec29_tmp[(vsize + j109)]; + + } + for (int j111 = 0; (j111 < 4); j111 = (j111 + 1)) { + fRec72_perm[j111] = fRec72_tmp[(vsize + j111)]; + + } + fYec26_idx_save = vsize; + for (int j101 = 0; (j101 < 4); j101 = (j101 + 1)) { + fYec27_perm[j101] = fYec27_tmp[(vsize + j101)]; + + } + fYec23_idx_save = vsize; + fYec24_idx_save = vsize; + for (int j95 = 0; (j95 < 4); j95 = (j95 + 1)) { + fYec25_perm[j95] = fYec25_tmp[(vsize + j95)]; + + } + for (int j97 = 0; (j97 < 4); j97 = (j97 + 1)) { + fRec69_perm[j97] = fRec69_tmp[(vsize + j97)]; + + } + fYec20_idx_save = vsize; + fYec21_idx_save = vsize; + for (int j89 = 0; (j89 < 4); j89 = (j89 + 1)) { + fYec22_perm[j89] = fYec22_tmp[(vsize + j89)]; + + } + fYec18_idx_save = vsize; + for (int j81 = 0; (j81 < 4); j81 = (j81 + 1)) { + fYec19_perm[j81] = fYec19_tmp[(vsize + j81)]; + + } + for (int j83 = 0; (j83 < 4); j83 = (j83 + 1)) { + fRec66_perm[j83] = fRec66_tmp[(vsize + j83)]; + + } + fYec16_idx_save = vsize; + for (int j73 = 0; (j73 < 4); j73 = (j73 + 1)) { + fYec17_perm[j73] = fYec17_tmp[(vsize + j73)]; + + } + fYec14_idx_save = vsize; + for (int j65 = 0; (j65 < 4); j65 = (j65 + 1)) { + fYec15_perm[j65] = fYec15_tmp[(vsize + j65)]; + + } + for (int j67 = 0; (j67 < 4); j67 = (j67 + 1)) { + fRec63_perm[j67] = fRec63_tmp[(vsize + j67)]; + + } + fYec12_idx_save = vsize; + for (int j57 = 0; (j57 < 4); j57 = (j57 + 1)) { + fYec13_perm[j57] = fYec13_tmp[(vsize + j57)]; + + } + fYec10_idx_save = vsize; + for (int j49 = 0; (j49 < 4); j49 = (j49 + 1)) { + fYec11_perm[j49] = fYec11_tmp[(vsize + j49)]; + + } + for (int j51 = 0; (j51 < 4); j51 = (j51 + 1)) { + fRec60_perm[j51] = fRec60_tmp[(vsize + j51)]; + + } + fYec8_idx_save = vsize; + for (int j41 = 0; (j41 < 4); j41 = (j41 + 1)) { + fYec9_perm[j41] = fYec9_tmp[(vsize + j41)]; + + } + fYec6_idx_save = vsize; + for (int j33 = 0; (j33 < 4); j33 = (j33 + 1)) { + fYec7_perm[j33] = fYec7_tmp[(vsize + j33)]; + + } + for (int j35 = 0; (j35 < 4); j35 = (j35 + 1)) { + fRec57_perm[j35] = fRec57_tmp[(vsize + j35)]; + + } + fYec4_idx_save = vsize; + for (int j25 = 0; (j25 < 4); j25 = (j25 + 1)) { + fYec5_perm[j25] = fYec5_tmp[(vsize + j25)]; + + } + fYec2_idx_save = vsize; + for (int j17 = 0; (j17 < 4); j17 = (j17 + 1)) { + fYec3_perm[j17] = fYec3_tmp[(vsize + j17)]; + + } + for (int j19 = 0; (j19 < 4); j19 = (j19 + 1)) { + fRec54_perm[j19] = fRec54_tmp[(vsize + j19)]; + + } + fYec0_idx_save = vsize; + for (int j9 = 0; (j9 < 4); j9 = (j9 + 1)) { + fYec1_perm[j9] = fYec1_tmp[(vsize + j9)]; + + } + for (int j11 = 0; (j11 < 4); j11 = (j11 + 1)) { + fRec52_perm[j11] = fRec52_tmp[(vsize + j11)]; + + } + for (int j13 = 0; (j13 < 4); j13 = (j13 + 1)) { + fRec50_perm[j13] = fRec50_tmp[(vsize + j13)]; + + } + for (int j21 = 0; (j21 < 4); j21 = (j21 + 1)) { + fRec51_perm[j21] = fRec51_tmp[(vsize + j21)]; + + } + for (int j27 = 0; (j27 < 4); j27 = (j27 + 1)) { + fRec49_perm[j27] = fRec49_tmp[(vsize + j27)]; + + } + for (int j29 = 0; (j29 < 4); j29 = (j29 + 1)) { + fRec47_perm[j29] = fRec47_tmp[(vsize + j29)]; + + } + for (int j37 = 0; (j37 < 4); j37 = (j37 + 1)) { + fRec48_perm[j37] = fRec48_tmp[(vsize + j37)]; + + } + for (int j43 = 0; (j43 < 4); j43 = (j43 + 1)) { + fRec46_perm[j43] = fRec46_tmp[(vsize + j43)]; + + } + for (int j45 = 0; (j45 < 4); j45 = (j45 + 1)) { + fRec44_perm[j45] = fRec44_tmp[(vsize + j45)]; + + } + for (int j53 = 0; (j53 < 4); j53 = (j53 + 1)) { + fRec45_perm[j53] = fRec45_tmp[(vsize + j53)]; + + } + for (int j59 = 0; (j59 < 4); j59 = (j59 + 1)) { + fRec43_perm[j59] = fRec43_tmp[(vsize + j59)]; + + } + for (int j61 = 0; (j61 < 4); j61 = (j61 + 1)) { + fRec41_perm[j61] = fRec41_tmp[(vsize + j61)]; + + } + for (int j69 = 0; (j69 < 4); j69 = (j69 + 1)) { + fRec42_perm[j69] = fRec42_tmp[(vsize + j69)]; + + } + for (int j75 = 0; (j75 < 4); j75 = (j75 + 1)) { + fRec40_perm[j75] = fRec40_tmp[(vsize + j75)]; + + } + for (int j77 = 0; (j77 < 4); j77 = (j77 + 1)) { + fRec38_perm[j77] = fRec38_tmp[(vsize + j77)]; + + } + for (int j85 = 0; (j85 < 4); j85 = (j85 + 1)) { + fRec39_perm[j85] = fRec39_tmp[(vsize + j85)]; + + } + for (int j91 = 0; (j91 < 4); j91 = (j91 + 1)) { + fRec37_perm[j91] = fRec37_tmp[(vsize + j91)]; + + } + for (int j103 = 0; (j103 < 4); j103 = (j103 + 1)) { + fRec36_perm[j103] = fRec36_tmp[(vsize + j103)]; + + } + for (int j105 = 0; (j105 < 4); j105 = (j105 + 1)) { + fRec34_perm[j105] = fRec34_tmp[(vsize + j105)]; + + } + for (int j113 = 0; (j113 < 4); j113 = (j113 + 1)) { + fRec35_perm[j113] = fRec35_tmp[(vsize + j113)]; + + } + for (int j119 = 0; (j119 < 4); j119 = (j119 + 1)) { + fRec33_perm[j119] = fRec33_tmp[(vsize + j119)]; + + } + for (int j121 = 0; (j121 < 4); j121 = (j121 + 1)) { + fRec31_perm[j121] = fRec31_tmp[(vsize + j121)]; + + } + for (int j129 = 0; (j129 < 4); j129 = (j129 + 1)) { + fRec32_perm[j129] = fRec32_tmp[(vsize + j129)]; + + } + for (int j135 = 0; (j135 < 4); j135 = (j135 + 1)) { + fRec30_perm[j135] = fRec30_tmp[(vsize + j135)]; + + } + for (int j137 = 0; (j137 < 4); j137 = (j137 + 1)) { + fRec28_perm[j137] = fRec28_tmp[(vsize + j137)]; + + } + for (int j145 = 0; (j145 < 4); j145 = (j145 + 1)) { + fRec29_perm[j145] = fRec29_tmp[(vsize + j145)]; + + } + for (int j151 = 0; (j151 < 4); j151 = (j151 + 1)) { + fRec27_perm[j151] = fRec27_tmp[(vsize + j151)]; + + } + for (int j153 = 0; (j153 < 4); j153 = (j153 + 1)) { + fRec25_perm[j153] = fRec25_tmp[(vsize + j153)]; + + } + for (int j161 = 0; (j161 < 4); j161 = (j161 + 1)) { + fRec26_perm[j161] = fRec26_tmp[(vsize + j161)]; + + } + for (int j167 = 0; (j167 < 4); j167 = (j167 + 1)) { + fRec24_perm[j167] = fRec24_tmp[(vsize + j167)]; + + } + for (int j169 = 0; (j169 < 4); j169 = (j169 + 1)) { + fRec22_perm[j169] = fRec22_tmp[(vsize + j169)]; + + } + for (int j177 = 0; (j177 < 4); j177 = (j177 + 1)) { + fRec23_perm[j177] = fRec23_tmp[(vsize + j177)]; + + } + for (int j183 = 0; (j183 < 4); j183 = (j183 + 1)) { + fRec21_perm[j183] = fRec21_tmp[(vsize + j183)]; + + } + for (int j185 = 0; (j185 < 4); j185 = (j185 + 1)) { + fRec20_perm[j185] = fRec20_tmp[(vsize + j185)]; + + } + for (int j187 = 0; (j187 < 4); j187 = (j187 + 1)) { + fRec19_perm[j187] = fRec19_tmp[(vsize + j187)]; + + } + for (int j189 = 0; (j189 < 4); j189 = (j189 + 1)) { + fRec18_perm[j189] = fRec18_tmp[(vsize + j189)]; + + } + for (int j191 = 0; (j191 < 4); j191 = (j191 + 1)) { + fRec17_perm[j191] = fRec17_tmp[(vsize + j191)]; + + } + for (int j213 = 0; (j213 < 4); j213 = (j213 + 1)) { + fRec14_perm[j213] = fRec14_tmp[(vsize + j213)]; + + } + for (int j253 = 0; (j253 < 4); j253 = (j253 + 1)) { + fRec13_perm[j253] = fRec13_tmp[(vsize + j253)]; + + } + for (int j255 = 0; (j255 < 4); j255 = (j255 + 1)) { + fRec11_perm[j255] = fRec11_tmp[(vsize + j255)]; + + } + for (int j263 = 0; (j263 < 4); j263 = (j263 + 1)) { + fRec12_perm[j263] = fRec12_tmp[(vsize + j263)]; + + } + for (int j267 = 0; (j267 < 4); j267 = (j267 + 1)) { + fRec10_perm[j267] = fRec10_tmp[(vsize + j267)]; + + } + for (int j269 = 0; (j269 < 4); j269 = (j269 + 1)) { + fRec8_perm[j269] = fRec8_tmp[(vsize + j269)]; + + } + for (int j275 = 0; (j275 < 4); j275 = (j275 + 1)) { + fRec9_perm[j275] = fRec9_tmp[(vsize + j275)]; + + } + for (int j279 = 0; (j279 < 4); j279 = (j279 + 1)) { + fRec7_perm[j279] = fRec7_tmp[(vsize + j279)]; + + } + for (int j281 = 0; (j281 < 4); j281 = (j281 + 1)) { + fRec5_perm[j281] = fRec5_tmp[(vsize + j281)]; + + } + for (int j289 = 0; (j289 < 4); j289 = (j289 + 1)) { + fRec6_perm[j289] = fRec6_tmp[(vsize + j289)]; + + } + for (int j295 = 0; (j295 < 4); j295 = (j295 + 1)) { + fRec4_perm[j295] = fRec4_tmp[(vsize + j295)]; + + } + for (int j297 = 0; (j297 < 4); j297 = (j297 + 1)) { + fRec2_perm[j297] = fRec2_tmp[(vsize + j297)]; + + } + for (int j303 = 0; (j303 < 4); j303 = (j303 + 1)) { + fRec3_perm[j303] = fRec3_tmp[(vsize + j303)]; + + } + for (int j305 = 0; (j305 < 4); j305 = (j305 + 1)) { + fRec0_perm[j305] = fRec0_tmp[(vsize + j305)]; + + } + for (int j307 = 0; (j307 < 4); j307 = (j307 + 1)) { + fRec1_perm[j307] = fRec1_tmp[(vsize + j307)]; + + } + /* Vectorizable loop 170 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output0[i] = FAUSTFLOAT(fRec0[i]); + + } + /* Vectorizable loop 171 */ + /* Compute code */ + for (int i = 0; (i < vsize); i = (i + 1)) { + output1[i] = FAUSTFLOAT(fRec1[i]); + + } + } + } -}; - +}; //---------------------------------------------------------------------------- // SuperCollider/Faust interface @@ -1398,7 +7421,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1481,9 +7504,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1588,7 +7611,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1651,7 +7674,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1680,9 +7703,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF + +#endif diff --git a/source/DEINDUGens/include/faust/au/AUUI.h b/source/DEINDUGens/include/faust/au/AUUI.h index 17f1e758e7..a6fef46149 100644 --- a/source/DEINDUGens/include/faust/au/AUUI.h +++ b/source/DEINDUGens/include/faust/au/AUUI.h @@ -1,13 +1,3 @@ -/************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. - *************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - /************************************************************************ FAUST Audio Unit UI Copyright (C) 2013 Reza Payami @@ -44,381 +34,349 @@ In order to compile a AU (TM) Synth plugin with this architecture file you will need the proprietary AU SDK from Apple. Please check the corresponding license. - ************************************************************************/ + #include #include "faust/gui/UI.h" +#include "faust/gui/MetaDataUI.h" using namespace std; class auUI; -class auUIObject { -public: - string fLabel; - float* fZone; - - float range(float min, float max, float val) { // AU parameters are normalized in the range [0;1] - val = min + val * (max - min); - return (val < min) ? min : (val > max) ? max : val; - } +struct auUIObject { -public: - auUIObject(const char* label, FAUSTFLOAT* zone) : - fLabel(label), fZone(zone) { - } + string fLabel; + FAUSTFLOAT* fZone; - virtual ~auUIObject() { - } + FAUSTFLOAT range(FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT val) + { // AU parameters are normalized in the range [0;1] + val = min + val * (max - min); + return (val < min) ? min : (val > max) ? max : val; + } - virtual void GetName(char *text) { - std::strcpy(text, fLabel.c_str()); - } + auUIObject(const char* label, FAUSTFLOAT* zone): fLabel(label), fZone(zone) + {} - virtual void SetValue(double f) { - *fZone = range(0.0f, 1.0f, (float) f); - } + virtual ~auUIObject() + {} - virtual float GetValue() { - return *fZone; - } + virtual void GetName(char *text) + { + std::strcpy(text, fLabel.c_str()); + } - virtual void GetDisplay(char *text) { - std::sprintf(text, "%f", *fZone); - } + virtual void SetValue(double f) + { + *fZone = range(0.0f, 1.0f, FAUSTFLOAT(f)); + } - virtual long GetID() { /* returns the sum of all the ASCII characters contained in the parameter's label */ - int i; - long acc; - for (i = 0, acc = 0; i < fLabel.length(); i++) - acc += (fLabel.c_str())[i]; - return acc; - } + virtual FAUSTFLOAT GetValue() + { + return *fZone; + } + + virtual void GetDisplay(char *text) + { + std::sprintf(text, "%f", *fZone); + } + + virtual long GetID() + { /* returns the sum of all the ASCII characters contained in the parameter's label */ + int i; + long acc; + for (i = 0, acc = 0; i < fLabel.length(); i++) + acc += (fLabel.c_str())[i]; + return acc; + } }; /**********************************************************************************/ -class auToggleButton: public auUIObject { +struct auToggleButton: public auUIObject { -public: + auToggleButton(const char* label, FAUSTFLOAT* zone) : + auUIObject(label, zone) + {} - auToggleButton(const char* label, FAUSTFLOAT* zone) : - auUIObject(label, zone) { - } + virtual ~auToggleButton() + {} - virtual ~auToggleButton() { - } + virtual FAUSTFLOAT GetValue() + { + return *fZone; + } - virtual float GetValue() { - return *fZone; - } + virtual void SetValue(double f) + { + *fZone = (f > 0.5f) ? 1.0f : 0.0f; + } - virtual void SetValue(double f) { - *fZone = (f > 0.5f) ? 1.0f : 0.0f; - } + virtual void GetDisplay(char *text) + { + (*fZone > 0.5f) ? std::strcpy(text, "ON") : std::strcpy(text, "OFF"); + } - virtual void GetDisplay(char *text) { - (*fZone > 0.5f) ? std::strcpy(text, "ON") : std::strcpy(text, "OFF"); - } }; /**********************************************************************************/ -class auCheckButton: public auUIObject { +struct auCheckButton: public auUIObject { -public: + auCheckButton(const char* label, FAUSTFLOAT* zone) : + auUIObject(label, zone) + {} - auCheckButton(const char* label, FAUSTFLOAT* zone) : - auUIObject(label, zone) { - } + virtual ~auCheckButton() + {} - virtual ~auCheckButton() { - } + virtual FAUSTFLOAT GetValue() + { + return *fZone; + } - virtual float GetValue() { - return *fZone; - } + virtual void SetValue(double f) + { + *fZone = (f > 0.5f) ? 1.0f : 0.0f; + } - virtual void SetValue(double f) { - *fZone = (f > 0.5f) ? 1.0f : 0.0f; - } + virtual void GetDisplay(char *text) + { + (*fZone > 0.5f) ? std::strcpy(text, "ON") : std::strcpy(text, "OFF"); + } - virtual void GetDisplay(char *text) { - (*fZone > 0.5f) ? std::strcpy(text, "ON") : std::strcpy(text, "OFF"); - } }; /**********************************************************************************/ -class auButton: public auUIObject { +struct auButton: public auUIObject { -public: + auButton(const char* label, FAUSTFLOAT* zone) : + auUIObject(label, zone) + {} - auButton(const char* label, FAUSTFLOAT* zone) : - auUIObject(label, zone) { - } + virtual ~auButton() + {} - virtual ~auButton() { - } + virtual FAUSTFLOAT GetValue() + { + return *fZone; + } - virtual float GetValue() { - return *fZone; - } + virtual void SetValue(double f) + { + *fZone = (f > 0.5f) ? 1.0f : 0.0f; + } - virtual void SetValue(double f) { - *fZone = (f > 0.5f) ? 1.0f : 0.0f; - } + virtual void GetDisplay(char *text) + { + (*fZone > 0.5f) ? std::strcpy(text, "ON") : std::strcpy(text, "OFF"); + } - virtual void GetDisplay(char *text) { - (*fZone > 0.5f) ? std::strcpy(text, "ON") : std::strcpy(text, "OFF"); - } }; /**********************************************************************************/ -class auSlider: public auUIObject { +struct auSlider: public auUIObject { -public: - float fInit; - float fMin; - float fMax; - float fStep; + FAUSTFLOAT fInit; + FAUSTFLOAT fMin; + FAUSTFLOAT fMax; + FAUSTFLOAT fStep; bool fIsVertical; -public: + auSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, + FAUSTFLOAT step, bool isVertical) : + auUIObject(label, zone), fInit(init), fMin(min), fMax(max), fStep(step), fIsVertical(isVertical) + {} - auSlider(const char* label, FAUSTFLOAT* zone, float init, float min, float max, - float step, bool isVertical) : - auUIObject(label, zone), fInit(init), fMin(min), fMax(max), fStep(step), fIsVertical(isVertical) { - } + virtual ~auSlider() + {} - virtual ~auSlider() { - } + virtual FAUSTFLOAT GetValue() + { + return (*fZone - fMin) / (fMax - fMin); + } // normalize - virtual float GetValue() { - return (*fZone - fMin) / (fMax - fMin); - } // normalize + virtual void SetValue(double f) + { + *fZone = range(fMin, fMax, FAUSTFLOAT(f)); + } // expand - virtual void SetValue(double f) { - *fZone = range(fMin, fMax, (float) f); - } // expand }; - /**********************************************************************************/ - -class auBargraph: public auUIObject { +struct auBargraph: public auUIObject { -public: - float fInit; - float fMin; - float fMax; - float fStep; + FAUSTFLOAT fInit; + FAUSTFLOAT fMin; + FAUSTFLOAT fMax; + FAUSTFLOAT fStep; bool fIsVertical; -public: - - auBargraph(const char* label, FAUSTFLOAT* zone, float min, float max, bool isVertical) : - auUIObject(label, zone), fMin(min), fMax(max), fIsVertical(isVertical){ - } + auBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, bool isVertical) : + auUIObject(label, zone), fMin(min), fMax(max), fIsVertical(isVertical) + {} - virtual ~auBargraph() { - } + virtual ~auBargraph() + {} - virtual float GetValue() { + virtual FAUSTFLOAT GetValue() + { return (*fZone - fMin) / (fMax - fMin); } // normalize - virtual void SetValue(double f) { - *fZone = range(fMin, fMax, (float) f); + virtual void SetValue(double f) + { + *fZone = range(fMin, fMax, FAUSTFLOAT(f)); } // expand + }; /**********************************************************************************/ -class auBox: public auUIObject { +struct auBox: public auUIObject { -public: - vector children; - bool isVertical; + vector fChildren; + bool fIsVertical; auBox* parent; -public: - auBox(const char* label, auBox* inParent, bool inIsVertical) : - auUIObject(label, NULL), parent(inParent), isVertical(inIsVertical) { - } + auUIObject(label, NULL), parent(inParent), fIsVertical(inIsVertical) + {} - void add(auUIObject* child) { - children.push_back(child); + virtual ~auBox() + {} + + void add(auUIObject* child) + { + fChildren.push_back(child); } - - virtual ~auBox() { - } - + }; - /**********************************************************************************/ //eunum Direction {HORIZONTAL, VERTICAL}; //TODO -class auUI: public UI { -public: +struct auUI: public UI, public MetaDataUI { vector fUITable; - std::set knobSet; auBox* currentBox = NULL; auBox* boundingBox = NULL; -public: - - auUI() { + auUI() + { currentBox = boundingBox = new auBox("", NULL, true); } - virtual ~auUI() { + virtual ~auUI() + { for (vector::iterator iter = fUITable.begin(); - iter != fUITable.end(); iter++) + iter != fUITable.end(); iter++) delete *iter; - //TODO delete boxes + // TODO delete boxes } - - virtual void declare(float* zone, const char* key, const char* value) + void addButton(const char* label, FAUSTFLOAT* zone) { - if (zone == 0) - { - if (strcmp(key, "hidden") == 0) - { - - } - } - else - { - if (strcmp(key,"size") == 0) - { - } - else if (strcmp(key,"tooltip") == 0) - { - } - else if (strcmp(key,"unit") == 0) - { - } - if (strcmp(key,"hidden") == 0) - { - - } - else if (strcmp(key,"style") == 0) - { - if (strstr(value, "knob")) //TODO - { - - knobSet.insert(zone); - } - } - else if (strcmp(key,"color") == 0) - { - } - else if (strcmp(key,"accx") == 0 - || strcmp(key,"accy") == 0 - || strcmp(key,"accz") == 0 - || strcmp(key,"gyrox") == 0 - || strcmp(key,"gyroy") == 0 - || strcmp(key,"gyroz") == 0 - || strcmp(key,"compass") == 0) - { - } - - } - } - - - void addButton(const char* label, FAUSTFLOAT* zone) { auButton* button = new auButton(label, zone); fUITable.push_back(button); currentBox->add(button); } - void openTabBox(const char* label) { - - } + void openTabBox(const char* label) + {} - void addCheckButton(const char* label, FAUSTFLOAT* zone) { + void addCheckButton(const char* label, FAUSTFLOAT* zone) + { auCheckButton* checkButton= new auCheckButton(label, zone); fUITable.push_back(checkButton); currentBox->add(checkButton); } - void addVerticalSlider(const char* label, FAUSTFLOAT* zone, float init, float min, - float max, float step) { + void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { auSlider* slider = new auSlider(label, zone, init, min, max, step, true); fUITable.push_back(slider); currentBox->add(slider); } - void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, float init, float min, - float max, float step) { + void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { auSlider* slider = new auSlider(label, zone, init, min, max, step, false); fUITable.push_back(slider); currentBox->add(slider); } - void addNumEntry(const char* label, FAUSTFLOAT* zone, float init, float min, float max, - float step) { + void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { auSlider* slider = new auSlider(label, zone, init, min, max, step, false); fUITable.push_back(slider); currentBox->add(slider); } - void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, float min, float max) { + void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { auBargraph* bargraph = new auBargraph(label, zone, min, max, false); fUITable.push_back(bargraph); currentBox->add(bargraph); } - void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, float min, float max) { + void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { auBargraph* bargraph = new auBargraph(label, zone, min, max, true); fUITable.push_back(bargraph); currentBox->add(bargraph); } - void openHorizontalBox(const char* label) { + void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + + void openHorizontalBox(const char* label) + { auBox* box = new auBox(label, currentBox, false); currentBox->add(box); currentBox = box; } - void openVerticalBox(const char* label) { + void openVerticalBox(const char* label) + { auBox* box = new auBox(label, currentBox, true); currentBox->add(box); currentBox = box; } - void closeBox() { - if (currentBox) //TODO else? + void closeBox() + { + if (currentBox) { //TODO else? currentBox = currentBox->parent; + } } - void SetValue(int index, double f) { + void SetValue(int index, double f) + { assert(index < fUITable.size()); fUITable[index]->SetValue(f); } - float GetValue(long index) { + FAUSTFLOAT GetValue(long index) + { assert(index < fUITable.size()); return fUITable[index]->GetValue(); } - void GetDisplay(long index, char *text) { + void GetDisplay(long index, char *text) + { assert(index < fUITable.size()); fUITable[index]->GetDisplay(text); } - void GetName(long index, char *text) { + void GetName(long index, char *text) + { assert(index < fUITable.size()); fUITable[index]->GetName(text); } - long GetNumParams() { + long GetNumParams() + { return fUITable.size(); } @@ -436,13 +394,11 @@ class auUI: public UI { return baseid + id % maxNumberOfId; } - void addNumDisplay(char* label, float* zone, int precision) { - } - - void addTextDisplay(char* label, float* zone, char* names[], float min, - float max) { - } + void addNumDisplay(char* label, FAUSTFLOAT* zone, int precision) + {} + void addTextDisplay(char* label, FAUSTFLOAT* zone, char* names[], FAUSTFLOAT min, FAUSTFLOAT max) + {} }; diff --git a/source/DEINDUGens/include/faust/audio/alsa-dsp.h b/source/DEINDUGens/include/faust/audio/alsa-dsp.h index fec04bcd02..47b4af0b0a 100644 --- a/source/DEINDUGens/include/faust/audio/alsa-dsp.h +++ b/source/DEINDUGens/include/faust/audio/alsa-dsp.h @@ -1,37 +1,24 @@ /************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __alsa_dsp__ @@ -90,7 +77,7 @@ o thread */ static bool setRealtimePriority () { - struct passwd * pw; + struct passwd* pw; int err; uid_t uid; struct sched_param param; @@ -207,15 +194,15 @@ struct AudioInterface : public AudioParam int err; // try to open output device, quit if fail to open output device - err = snd_pcm_open( &fOutputDevice, fCardName, SND_PCM_STREAM_PLAYBACK, 0 ); check_error(err) + err = snd_pcm_open(&fOutputDevice, fCardName, SND_PCM_STREAM_PLAYBACK, 0); check_error(err) // setup output device parameters - err = snd_pcm_hw_params_malloc ( &fOutputParams ); check_error(err) + err = snd_pcm_hw_params_malloc(&fOutputParams); check_error(err) setAudioParams(fOutputDevice, fOutputParams); fCardOutputs = fSoftOutputs; snd_pcm_hw_params_set_channels_near(fOutputDevice, fOutputParams, &fCardOutputs); - err = snd_pcm_hw_params (fOutputDevice, fOutputParams ); check_error(err); + err = snd_pcm_hw_params(fOutputDevice, fOutputParams ); check_error(err); // allocate alsa output buffers if (fSampleAccess == SND_PCM_ACCESS_RW_INTERLEAVED) { @@ -246,11 +233,11 @@ struct AudioInterface : public AudioParam // we have and need an input device // set the number of physical inputs close to what we need - err = snd_pcm_hw_params_malloc ( &fInputParams ); check_error(err); + err = snd_pcm_hw_params_malloc(&fInputParams); check_error(err); setAudioParams(fInputDevice, fInputParams); - fCardInputs = fSoftInputs; + fCardInputs = fSoftInputs; snd_pcm_hw_params_set_channels_near(fInputDevice, fInputParams, &fCardInputs); - err = snd_pcm_hw_params (fInputDevice, fInputParams ); check_error(err); + err = snd_pcm_hw_params(fInputDevice, fInputParams); check_error(err); // allocation of alsa buffers if (fSampleAccess == SND_PCM_ACCESS_RW_INTERLEAVED) { @@ -270,14 +257,14 @@ struct AudioInterface : public AudioParam fChanOutputs = max(fSoftOutputs, fCardOutputs); assert (fChanOutputs < 256); for (unsigned int i = 0; i < fChanInputs; i++) { - fInputSoftChannels[i] = (float*) calloc (fBuffering, sizeof(float)); + fInputSoftChannels[i] = (float*)calloc(fBuffering, sizeof(float)); for (unsigned int j = 0; j < fBuffering; j++) { fInputSoftChannels[i][j] = 0.0; } } for (unsigned int i = 0; i < fChanOutputs; i++) { - fOutputSoftChannels[i] = (float*) calloc (fBuffering, sizeof(float)); + fOutputSoftChannels[i] = (float*)calloc(fBuffering, sizeof(float)); for (unsigned int j = 0; j < fBuffering; j++) { fOutputSoftChannels[i][j] = 0.0; } @@ -289,22 +276,22 @@ struct AudioInterface : public AudioParam int err; // set params record with initial values - err = snd_pcm_hw_params_any ( stream, params ); + err = snd_pcm_hw_params_any(stream, params); check_error_msg(err, "unable to init parameters") // set alsa access mode (and fSampleAccess field) either to non interleaved or interleaved - err = snd_pcm_hw_params_set_access (stream, params, SND_PCM_ACCESS_RW_NONINTERLEAVED ); + err = snd_pcm_hw_params_set_access(stream, params, SND_PCM_ACCESS_RW_NONINTERLEAVED); if (err) { - err = snd_pcm_hw_params_set_access (stream, params, SND_PCM_ACCESS_RW_INTERLEAVED ); + err = snd_pcm_hw_params_set_access(stream, params, SND_PCM_ACCESS_RW_INTERLEAVED); check_error_msg(err, "unable to set access mode neither to non-interleaved or to interleaved"); } snd_pcm_hw_params_get_access(params, &fSampleAccess); // search for 32-bits or 16-bits format - err = snd_pcm_hw_params_set_format (stream, params, SND_PCM_FORMAT_S32); + err = snd_pcm_hw_params_set_format(stream, params, SND_PCM_FORMAT_S32); if (err) { - err = snd_pcm_hw_params_set_format (stream, params, SND_PCM_FORMAT_S16); + err = snd_pcm_hw_params_set_format(stream, params, SND_PCM_FORMAT_S16); check_error_msg(err, "unable to set format to either 32-bits or 16-bits"); } snd_pcm_hw_params_get_format(params, &fSampleFormat); @@ -312,10 +299,10 @@ struct AudioInterface : public AudioParam snd_pcm_hw_params_set_rate_near (stream, params, &fFrequency, 0); // set period and period size (buffering) - err = snd_pcm_hw_params_set_period_size (stream, params, fBuffering, 0); + err = snd_pcm_hw_params_set_period_size(stream, params, fBuffering, 0); check_error_msg(err, "period size not available"); - err = snd_pcm_hw_params_set_periods (stream, params, fPeriods, 0); + err = snd_pcm_hw_params_set_periods(stream, params, fPeriods, 0); check_error_msg(err, "number of periods not available"); } @@ -324,7 +311,7 @@ struct AudioInterface : public AudioParam _snd_pcm_format format; snd_pcm_hw_params_get_format(params, &format); snd_pcm_uframes_t psize; snd_pcm_hw_params_get_period_size(params, &psize, NULL); unsigned int channels; snd_pcm_hw_params_get_channels(params, &channels); - ssize_t bsize = snd_pcm_format_size (format, psize * channels); + ssize_t bsize = snd_pcm_format_size(format, psize * channels); return bsize; } @@ -332,7 +319,7 @@ struct AudioInterface : public AudioParam { _snd_pcm_format format; snd_pcm_hw_params_get_format(params, &format); snd_pcm_uframes_t psize; snd_pcm_hw_params_get_period_size(params, &psize, NULL); - ssize_t bsize = snd_pcm_format_size (format, psize); + ssize_t bsize = snd_pcm_format_size(format, psize); return bsize; } @@ -355,16 +342,13 @@ struct AudioInterface : public AudioParam } if (fSampleFormat == SND_PCM_FORMAT_S16) { - short* buffer16b = (short*)fInputCardBuffer; for (unsigned int s = 0; s < fBuffering; s++) { for (unsigned int c = 0; c < fCardInputs; c++) { fInputSoftChannels[c][s] = float(buffer16b[c + s*fCardInputs])*(1.0/float(SHRT_MAX)); } } - } else if (fSampleFormat == SND_PCM_FORMAT_S32) { - int32* buffer32b = (int32*)fInputCardBuffer; for (unsigned int s = 0; s < fBuffering; s++) { for (unsigned int c = 0; c < fCardInputs; c++) { @@ -372,7 +356,6 @@ struct AudioInterface : public AudioParam } } } else { - printf("unrecognized input sample format : %u\n", fSampleFormat); exit(1); } @@ -387,16 +370,13 @@ struct AudioInterface : public AudioParam } if (fSampleFormat == SND_PCM_FORMAT_S16) { - for (unsigned int c = 0; c < fCardInputs; c++) { short* chan16b = (short*)fInputCardChannels[c]; for (unsigned int s = 0; s < fBuffering; s++) { fInputSoftChannels[c][s] = float(chan16b[s])*(1.0/float(SHRT_MAX)); } } - } else if (fSampleFormat == SND_PCM_FORMAT_S32) { - for (unsigned int c = 0; c < fCardInputs; c++) { int32* chan32b = (int32*)fInputCardChannels[c]; for (unsigned int s = 0; s < fBuffering; s++) { @@ -424,26 +404,23 @@ struct AudioInterface : public AudioParam if (fSampleAccess == SND_PCM_ACCESS_RW_INTERLEAVED) { if (fSampleFormat == SND_PCM_FORMAT_S16) { - short* buffer16b = (short*)fOutputCardBuffer; for (unsigned int f = 0; f < fBuffering; f++) { for (unsigned int c = 0; c < fCardOutputs; c++) { float x = fOutputSoftChannels[c][f]; - buffer16b[c + f*fCardOutputs] = short( max(min(x,1.0f),-1.0f) * float(SHRT_MAX) ) ; + buffer16b[c + f*fCardOutputs] = short(max(min(x,1.0f),-1.0f) * float(SHRT_MAX)) ; } } } else if (fSampleFormat == SND_PCM_FORMAT_S32) { - int32* buffer32b = (int32*)fOutputCardBuffer; for (unsigned int f = 0; f < fBuffering; f++) { for (unsigned int c = 0; c < fCardOutputs; c++) { float x = fOutputSoftChannels[c][f]; - buffer32b[c + f*fCardOutputs] = int( max(min(x,1.0f),-1.0f) * float(INT_MAX) ) ; + buffer32b[c + f*fCardOutputs] = int(max(min(x,1.0f),-1.0f) * float(INT_MAX)); } } } else { - printf("unrecognized output sample format : %u\n", fSampleFormat); exit(1); } @@ -465,7 +442,7 @@ struct AudioInterface : public AudioParam short* chan16b = (short*) fOutputCardChannels[c]; for (unsigned int f = 0; f < fBuffering; f++) { float x = fOutputSoftChannels[c][f]; - chan16b[f] = short( max(min(x,1.0f),-1.0f) * float(SHRT_MAX) ) ; + chan16b[f] = short(max(min(x,1.0f),-1.0f) * float(SHRT_MAX)); } } @@ -475,12 +452,11 @@ struct AudioInterface : public AudioParam int32* chan32b = (int32*) fOutputCardChannels[c]; for (unsigned int f = 0; f < fBuffering; f++) { float x = fOutputSoftChannels[c][f]; - chan32b[f] = int( max(min(x,1.0f),-1.0f) * float(INT_MAX) ) ; + chan32b[f] = int(max(min(x,1.0f),-1.0f) * float(INT_MAX)); } } } else { - printf("unrecognized output sample format : %u\n", fSampleFormat); exit(1); } @@ -506,9 +482,9 @@ struct AudioInterface : public AudioParam int err; snd_ctl_card_info_t* card_info; snd_ctl_t* ctl_handle; - err = snd_ctl_open (&ctl_handle, fCardName, 0); check_error(err); + err = snd_ctl_open(&ctl_handle, fCardName, 0); check_error(err); snd_ctl_card_info_alloca (&card_info); - err = snd_ctl_card_info(ctl_handle, card_info); check_error(err); + err = snd_ctl_card_info(ctl_handle, card_info); check_error(err); printf("%s|%d|%d|%d|%d|%s\n", snd_ctl_card_info_get_driver(card_info), fCardInputs, fCardOutputs, @@ -533,9 +509,9 @@ struct AudioInterface : public AudioParam printf("Channel inputs : %2d, Channel outputs : %2d\n", fChanInputs, fChanOutputs); // affichage des infos de la carte - err = snd_ctl_open (&ctl_handle, fCardName, 0); check_error(err); + err = snd_ctl_open (&ctl_handle, fCardName, 0); check_error(err); snd_ctl_card_info_alloca (&card_info); - err = snd_ctl_card_info(ctl_handle, card_info); check_error(err); + err = snd_ctl_card_info(ctl_handle, card_info); check_error(err); printCardInfo(card_info); // affichage des infos liees aux streams d'entree-sortie @@ -571,6 +547,9 @@ struct AudioInterface : public AudioParam #endif printf("--------------\n"); } + + int getNumInputs() { return fCardInputs; } + int getNumOutputs() { return fCardOutputs; } }; @@ -578,7 +557,7 @@ struct AudioInterface : public AudioParam long lopt(int argc, char *argv[], const char* longname, const char* shortname, long def) { for (int i=2; iinputs(DSP->getNumInputs()); fAudio->outputs(DSP->getNumOutputs()); fAudio->open(); @@ -674,26 +654,28 @@ class alsaaudio : public audio return true; } - virtual bool start() + virtual bool start() { - fRunning = true; - if (pthread_create(&fAudioThread, 0, __run, this)) { - fRunning = false; + fRunning = true; + if (pthread_create(&fAudioThread, 0, __run, this)) { + fRunning = false; } - return fRunning; - } + return fRunning; + } - virtual void stop() { - if (fRunning) { - fRunning = false; - pthread_join(fAudioThread, 0); - } - } + virtual void stop() + { + if (fRunning) { + fRunning = false; + pthread_join(fAudioThread, 0); + } + } - virtual int get_buffer_size() { return fAudio->buffering(); } - virtual int get_sample_rate() { return fAudio->frequency(); } + virtual int getBufferSize() { return fAudio->buffering(); } + virtual int getSampleRate() { return fAudio->frequency(); } - virtual void run() { + virtual void run() + { bool rt = setRealtimePriority(); printf(rt ? "RT : ":"NRT: "); fAudio->shortinfo(); AVOIDDENORMALS; @@ -713,6 +695,10 @@ class alsaaudio : public audio } } } + + virtual int getNumInputs() { return fAudio->getNumInputs(); } + virtual int getNumOutputs() { return fAudio->getNumOutputs(); } + }; void* __run (void* ptr) diff --git a/source/DEINDUGens/include/faust/audio/android-dsp.h b/source/DEINDUGens/include/faust/audio/android-dsp.h index 24633cf7e2..557425db90 100644 --- a/source/DEINDUGens/include/faust/audio/android-dsp.h +++ b/source/DEINDUGens/include/faust/audio/android-dsp.h @@ -1,6 +1,6 @@ /************************************************************************ FAUST Architecture File - Copyright (C) 2015-2015 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- This Architecture section is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -19,10 +19,7 @@ that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - - - ************************************************************************ - *************************************************************************/ + ************************************************************************/ #ifndef __android_dsp__ #define __android_dsp__ @@ -41,6 +38,40 @@ #define NUM_OUTPUTS 2 #define CPU_TABLE_SIZE 16 +static const char *res_str(SLresult result) +{ + switch(result) + { + case SL_RESULT_SUCCESS: return "Success"; + case SL_RESULT_PRECONDITIONS_VIOLATED: return "Preconditions violated"; + case SL_RESULT_PARAMETER_INVALID: return "Parameter invalid"; + case SL_RESULT_MEMORY_FAILURE: return "Memory failure"; + case SL_RESULT_RESOURCE_ERROR: return "Resource error"; + case SL_RESULT_RESOURCE_LOST: return "Resource lost"; + case SL_RESULT_IO_ERROR: return "I/O error"; + case SL_RESULT_BUFFER_INSUFFICIENT: return "Buffer insufficient"; + case SL_RESULT_CONTENT_CORRUPTED: return "Content corrupted"; + case SL_RESULT_CONTENT_UNSUPPORTED: return "Content unsupported"; + case SL_RESULT_CONTENT_NOT_FOUND: return "Content not found"; + case SL_RESULT_PERMISSION_DENIED: return "Permission denied"; + case SL_RESULT_FEATURE_UNSUPPORTED: return "Feature unsupported"; + case SL_RESULT_INTERNAL_ERROR: return "Internal error"; + case SL_RESULT_UNKNOWN_ERROR: return "Unknown error"; + case SL_RESULT_OPERATION_ABORTED: return "Operation aborted"; + case SL_RESULT_CONTROL_LOST: return "Control lost"; +#ifdef SL_RESULT_READONLY + case SL_RESULT_READONLY: return "ReadOnly"; +#endif +#ifdef SL_RESULT_ENGINEOPTION_UNSUPPORTED + case SL_RESULT_ENGINEOPTION_UNSUPPORTED: return "Engine option unsupported"; +#endif +#ifdef SL_RESULT_SOURCE_SINK_INCOMPATIBLE + case SL_RESULT_SOURCE_SINK_INCOMPATIBLE: return "Source/Sink incompatible"; +#endif + } + return "Unknown error code"; +} + struct CircularBuffer { short* fBuffer; @@ -86,7 +117,7 @@ class androidaudio : public audio { protected: - dsp* fDsp; + dsp* fDSP; int fNumInChans; int fNumOutChans; @@ -132,7 +163,9 @@ class androidaudio : public audio { } // Compute DSP - fDsp->compute(fBufferSize, fInputs, fOutputs); + fDSP->compute(fBufferSize, fInputs, fOutputs); + + runControlCallbacks(); // Converting float to short output if (fNumOutChans > 0) { @@ -160,7 +193,7 @@ class androidaudio : public audio { SLresult result = (*caller)->Enqueue(caller, fOpenSLInputs.getWritePtr(), fBufferSize * sizeof(short) * NUM_INPUTS); fOpenSLInputs.moveWritePtr(fBufferSize); if (result != SL_RESULT_SUCCESS) { - __android_log_print(ANDROID_LOG_ERROR, "Faust", "inputCallback Enqueue error = %d", int(result)); + __android_log_print(ANDROID_LOG_ERROR, "Faust", "inputCallback Enqueue error = %s", res_str(result)); } } @@ -178,14 +211,14 @@ class androidaudio : public audio { SLresult result = (*caller)->Enqueue(caller, fOpenSLOutputs.getReadPtr(), fBufferSize * sizeof(short) * NUM_OUTPUTS); fOpenSLOutputs.moveReadPtr(fBufferSize); if (result != SL_RESULT_SUCCESS) { - __android_log_print(ANDROID_LOG_ERROR, "Faust", "outputCallback Enqueue error = %d", int(result)); + __android_log_print(ANDROID_LOG_ERROR, "Faust", "outputCallback Enqueue error = %s", res_str(result)); } } public: androidaudio(long srate, long bsize) - : fDsp(0), fSampleRate(srate), + : fDSP(0), fSampleRate(srate), fBufferSize(bsize), fCPUTableIndex(0), fNumInChans(0), fNumOutChans(0), fOpenSLEngine(0), fOutputMix(0), fInputBufferQueue(0), fOutputBufferQueue(0), fOpenSLInputs(bsize * 4, NUM_INPUTS), fOpenSLOutputs(bsize * 4, NUM_OUTPUTS) @@ -256,10 +289,10 @@ class androidaudio : public audio { { __android_log_print(ANDROID_LOG_ERROR, "Faust", "init"); - fDsp = DSP; - fNumInChans = fDsp->getNumInputs(); - fNumOutChans = fDsp->getNumOutputs(); - fDsp->init(fSampleRate); + fDSP = DSP; + fNumInChans = fDSP->getNumInputs(); + fNumOutChans = fDSP->getNumOutputs(); + fDSP->init(fSampleRate); static const SLboolean requireds[2] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE }; SLresult result; @@ -309,22 +342,37 @@ class androidaudio : public audio { // Create the OpenSL ES engine. result = slCreateEngine(&fOpenSLEngine, 0, NULL, 0, NULL, NULL); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "slCreateEngine/fOpenSLEngine error = %s", res_str(result)); + return false; + } result = (*fOpenSLEngine)->Realize(fOpenSLEngine, SL_BOOLEAN_FALSE); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "Realize/fOpenSLEngine error = %s", res_str(result)); + return false; + } SLEngineItf openSLEngineInterface = NULL; result = (*fOpenSLEngine)->GetInterface(fOpenSLEngine, SL_IID_ENGINE, &openSLEngineInterface); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "GetInterface/fOpenSLEngine error = %s", res_str(result)); + return false; + } // Create the output mix. result = (*openSLEngineInterface)->CreateOutputMix(openSLEngineInterface, &fOutputMix, 0, NULL, NULL); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "CreateOutputMix/openSLEngineInterface error = %s", res_str(result)); + return false; + } result = (*fOutputMix)->Realize(fOutputMix, SL_BOOLEAN_FALSE); - if (result != SL_RESULT_SUCCESS) return false; - + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "Realize/fOutputMix error = %s", res_str(result)); + return false; + } + SLDataLocator_OutputMix outputMixLocator = { SL_DATALOCATOR_OUTPUTMIX, fOutputMix }; if (fNumInChans > 0) { @@ -337,7 +385,10 @@ class androidaudio : public audio { const SLInterfaceID inputInterfaces[2] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE, SL_IID_ANDROIDCONFIGURATION }; result = (*openSLEngineInterface)->CreateAudioRecorder(openSLEngineInterface, &fInputBufferQueue, &inputSource, &inputSink, 2, inputInterfaces, requireds); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "CreateAudioRecorder/openSLEngineInterface error = %s", res_str(result)); + return false; + } #if DISABLE_AGC SLAndroidConfigurationItf configObject; @@ -347,15 +398,18 @@ class androidaudio : public audio { SLuint32 mode = SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION; result = (*configObject)->SetConfiguration(configObject, SL_ANDROID_KEY_RECORDING_PRESET, &mode, sizeof(mode)); if (result != SL_RESULT_SUCCESS) { - __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetConfiguration SL_ANDROID_KEY_RECORDING_PRESET error %d", result); + __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetConfiguration SL_ANDROID_KEY_RECORDING_PRESET error = %s", res_str(result)); } } else { - __android_log_print(ANDROID_LOG_ERROR, "Faust", "GetInterface SL_IID_ANDROIDCONFIGURATION error %d", result); + __android_log_print(ANDROID_LOG_ERROR, "Faust", "GetInterface SL_IID_ANDROIDCONFIGURATION error = %s", res_str(result)); } #endif result = (*fInputBufferQueue)->Realize(fInputBufferQueue, SL_BOOLEAN_FALSE); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "Realize/fInputBufferQueue error = %s", res_str(result)); + return false; + } } if (fNumOutChans > 0) { @@ -367,52 +421,86 @@ class androidaudio : public audio { SLDataSink outputSink = { &outputMixLocator, NULL }; result = (*openSLEngineInterface)->CreateAudioPlayer(openSLEngineInterface, &fOutputBufferQueue, &outputSource, &outputSink, 1, outputInterfaces, requireds); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "CreateAudioPlayer/openSLEngineInterface error = %s", res_str(result)); + return false; + } result = (*fOutputBufferQueue)->Realize(fOutputBufferQueue, SL_BOOLEAN_FALSE); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "Realize/fOutputBufferQueue error = %s", res_str(result)); + return false; + } } if (fNumInChans > 0) { // Initialize result = (*fInputBufferQueue)->GetInterface(fInputBufferQueue, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &fInputBufferQueueInterface); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "GetInterface/fInputBufferQueue error = %s", res_str(result)); + return false; + } result = (*fInputBufferQueueInterface)->RegisterCallback(fInputBufferQueueInterface, inputCallback, this); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "RegisterCallback/fInputBufferQueueInterface error = %s", res_str(result)); + return false; + } result = (*fInputBufferQueue)->GetInterface(fInputBufferQueue, SL_IID_RECORD, &fRecordInterface); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "GetInterface/fInputBufferQueue error = %s", res_str(result)); + return false; + } result = (*fInputBufferQueueInterface)->Enqueue(fInputBufferQueueInterface, fOpenSLInputs.getWritePtr(), fBufferSize * sizeof(short) * NUM_INPUTS); fOpenSLInputs.moveWritePtr(fBufferSize); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "Enqueue/fInputBufferQueueInterface error = %s", res_str(result)); + return false; + } result = (*fRecordInterface)->SetRecordState(fRecordInterface, SL_RECORDSTATE_STOPPED); - if (result != SL_RESULT_SUCCESS) __android_log_print(ANDROID_LOG_ERROR, "Faust", "stop: SetRecordState error"); + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetRecordState/fRecordInterface error = %s", res_str(result)); + } } if (fNumOutChans > 0) { // Initialize result = (*fOutputBufferQueue)->GetInterface(fOutputBufferQueue, SL_IID_BUFFERQUEUE, &fOutputBufferQueueInterface); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "GetInterface/fOutputBufferQueue error = %s", res_str(result)); + return false; + } result = (*fOutputBufferQueueInterface)->RegisterCallback(fOutputBufferQueueInterface, outputCallback, this); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "RegisterCallback/fOutputBufferQueueInterface error = %s", res_str(result)); + return false; + } result = (*fOutputBufferQueue)->GetInterface(fOutputBufferQueue, SL_IID_PLAY, &fPlayInterface); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "GetInterface/fOutputBufferQueue error = %s", res_str(result)); + return false; + } result = (*fOutputBufferQueueInterface)->Enqueue(fOutputBufferQueueInterface, fOpenSLOutputs.getReadPtr(), fBufferSize * sizeof(short) * NUM_OUTPUTS); fOpenSLOutputs.moveReadPtr(fBufferSize); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "Enqueue/fOutputBufferQueueInterface error = %s", res_str(result)); + return false; + } result = (*fPlayInterface)->SetPlayState(fPlayInterface, SL_PLAYSTATE_STOPPED); - if (result != SL_RESULT_SUCCESS) __android_log_print(ANDROID_LOG_ERROR, "Faust", "stop: SetPlayState error"); + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetPlayState/fPlayInterface error = %s", res_str(result)); + } } return true; @@ -426,13 +514,17 @@ class androidaudio : public audio { if (fNumInChans > 0) { // start the inout buffer queue. result = (*fRecordInterface)->SetRecordState(fRecordInterface, SL_RECORDSTATE_RECORDING); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetRecordState/fRecordInterface error = %s", res_str(result)); + } } if (fNumOutChans > 0) { // start the output buffer queue. result = (*fPlayInterface)->SetPlayState(fPlayInterface, SL_PLAYSTATE_PLAYING); - if (result != SL_RESULT_SUCCESS) return false; + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetPlayState/fPlayInterface error = %s", res_str(result)); + } } return true; @@ -445,31 +537,35 @@ class androidaudio : public audio { if (fNumInChans > 0) { result = (*fRecordInterface)->SetRecordState(fRecordInterface, SL_RECORDSTATE_PAUSED); - if (result != SL_RESULT_SUCCESS) __android_log_print(ANDROID_LOG_ERROR, "Faust", "stop: SetRecordState error"); + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetRecordState/fRecordInterface error = %s", res_str(result)); + } } if (fNumOutChans > 0) { result = (*fPlayInterface)->SetPlayState(fPlayInterface, SL_PLAYSTATE_PAUSED); - if (result != SL_RESULT_SUCCESS) __android_log_print(ANDROID_LOG_ERROR, "Faust", "stop: SetPlayState error"); + if (result != SL_RESULT_SUCCESS) { + __android_log_print(ANDROID_LOG_ERROR, "Faust", "SetPlayState/fPlayInterface error = %s", res_str(result)); + } } } - virtual int get_buffer_size() + virtual int getBufferSize() { return fBufferSize; } - virtual int get_sample_rate() + virtual int getSampleRate() { return fSampleRate; } - virtual int get_num_inputs() + virtual int getNumInputs() { return fNumInChans; } - virtual int get_num_outputs() + virtual int getNumOutputs() { return fNumOutChans; } diff --git a/source/DEINDUGens/include/faust/audio/audio.h b/source/DEINDUGens/include/faust/audio/audio.h index ced70b713c..b0676fe4fc 100644 --- a/source/DEINDUGens/include/faust/audio/audio.h +++ b/source/DEINDUGens/include/faust/audio/audio.h @@ -1,71 +1,85 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - An abstraction layer over audio layer - -******************************************************************************* -*******************************************************************************/ + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __audio__ #define __audio__ - + +#include +#include + class dsp; typedef void (* shutdown_callback)(const char* message, void* arg); +typedef void (* compute_callback)(void* arg); + class audio { - public: - audio() {} - virtual ~audio() {} - - virtual bool init(const char* name, dsp*) = 0; - virtual bool start() = 0; - virtual void stop() = 0; - virtual void shutdown(shutdown_callback cb, void* arg) {} + protected: + + shutdown_callback fShutdown; // Shutdown callback + void* fShutdownArg; // Shutdown callback data + + std::set > fComputeCallbackList; - virtual int get_buffer_size() = 0; - virtual int get_sample_rate() = 0; + public: - virtual int get_num_inputs() { return -1; } - virtual int get_num_outputs() { return -1; } + audio():fShutdown(nullptr), fShutdownArg(nullptr) {} + virtual ~audio() {} + + virtual bool init(const char* name, dsp* dsp) = 0; + + virtual bool start() = 0; + virtual void stop() = 0; + + void setShutdownCallback(shutdown_callback cb, void* arg) + { + fShutdown = cb; + fShutdownArg = arg; + } - virtual float get_cpu_load() { return 0.f; } + void addControlCallback(compute_callback cb, void* arg) + { + fComputeCallbackList.insert(std::make_pair(cb, arg)); + } + bool removeControlCallback(compute_callback cb, void* arg) + { + return (fComputeCallbackList.erase(std::make_pair(cb, arg)) == 1); + } + void runControlCallbacks() + { + for (auto& it : fComputeCallbackList) { + it.first(it.second); + } + } + + virtual int getBufferSize() = 0; + virtual int getSampleRate() = 0; + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + + virtual float getCPULoad() { return 0.f; } }; #endif diff --git a/source/DEINDUGens/include/faust/audio/channels.h b/source/DEINDUGens/include/faust/audio/channels.h index 1e775b3a23..61852de982 100644 --- a/source/DEINDUGens/include/faust/audio/channels.h +++ b/source/DEINDUGens/include/faust/audio/channels.h @@ -1,94 +1,119 @@ /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __audio_channels__ #define __audio_channels__ +#include +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -class channels +template +class real_channels { private: - + int fNumFrames; int fNumChannels; - FAUSTFLOAT** fBuffers; - + REAL** fBuffers; + REAL** fSliceBuffers; + public: - - channels(int nframes, int nchannels) + + real_channels(int nframes, int nchannels) { - fBuffers = new FAUSTFLOAT*[nchannels]; + fBuffers = new REAL*[nchannels]; + fSliceBuffers = new REAL*[nchannels]; fNumFrames = nframes; fNumChannels = nchannels; - + // allocate audio channels - for (int i = 0; i < fNumChannels; i++) { - fBuffers[i] = new FAUSTFLOAT[fNumFrames]; + for (int chan = 0; chan < fNumChannels; chan++) { + fBuffers[chan] = new FAUSTFLOAT[fNumFrames]; } + + zero(); } - + void zero() { // allocate audio channels - for (int i = 0; i < fNumChannels; i++) { - for (int f = 0; f < fNumFrames; f++) { - fBuffers[i][f] = FAUSTFLOAT(0.0); - } + for (int chan = 0; chan < fNumChannels; chan++) { + memset(fBuffers[chan], 0, sizeof(REAL) * fNumFrames); } } - + void impulse() { // allocate audio channels - for (int i = 0; i < fNumChannels; i++) { - fBuffers[i][0] = FAUSTFLOAT(1.0); - for (int f = 1; f < fNumFrames; f++) { - fBuffers[i][f] = FAUSTFLOAT(0.0); + for (int chan = 0; chan < fNumChannels; chan++) { + fBuffers[chan][0] = FAUSTFLOAT(1.0); + for (int frame = 1; frame < fNumFrames; frame++) { + fBuffers[chan][frame] = REAL(0.0); } } } - + void display() { - for (int i = 0; i < fNumChannels; i++) { - for (int f = 0; f < fNumFrames; f++) { - std::cout << "chan = " << i << " frame = " << f << " value = " << fBuffers[i][f] << std::endl; + for (int chan = 0; chan < fNumChannels; chan++) { + for (int frame = 0; frame < fNumFrames; frame++) { + std::cout << "chan = " << chan << " frame = " << frame << " value = " << fBuffers[chan][frame] << std::endl; } } } - - virtual ~channels() + + virtual ~real_channels() { // free separate input channels - for (int i = 0; i < fNumChannels; i++) { - delete [] fBuffers[i]; + for (int chan = 0; chan < fNumChannels; chan++) { + delete [] fBuffers[chan]; } delete [] fBuffers; + delete [] fSliceBuffers; + } + + REAL** buffers() { return fBuffers; } + + REAL** buffers(int index) + { + assert(index < fNumFrames); + for (int chan = 0; chan < fNumChannels; chan++) { + fSliceBuffers[chan] = &fBuffers[chan][index]; + } + return fSliceBuffers; } + +}; - FAUSTFLOAT** buffers() { return fBuffers; } +class channels : public real_channels { + + public: + channels(int nframes, int nchannels):real_channels(nframes, nchannels) {} }; #endif diff --git a/source/DEINDUGens/include/faust/audio/coreaudio-dsp.h b/source/DEINDUGens/include/faust/audio/coreaudio-dsp.h index ceb2da29a3..426ab625ea 100644 --- a/source/DEINDUGens/include/faust/audio/coreaudio-dsp.h +++ b/source/DEINDUGens/include/faust/audio/coreaudio-dsp.h @@ -1,36 +1,24 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __coreaudio_dsp__ @@ -79,7 +67,7 @@ static void PrintStreamDesc(AudioStreamBasicDescription *inDesc) printf("- - - - - - - - - - - - - - - - - - - -\n"); printf(" Sample Rate:%f\n", inDesc->mSampleRate); printf(" Format ID:%.*s\n", (int)sizeof(inDesc->mFormatID), (char*)&inDesc->mFormatID); - printf(" Format Flags:%lX\n", inDesc->mFormatFlags); + printf(" Format Flags:%lX\n", (unsigned long)inDesc->mFormatFlags); printf(" Bytes per Packet:%ld\n", (long)inDesc->mBytesPerPacket); printf(" Frames per Packet:%ld\n", (long)inDesc->mFramesPerPacket); printf(" Bytes per Frame:%ld\n", (long)inDesc->mBytesPerFrame); @@ -235,6 +223,8 @@ class TCoreAudioRenderer bool fIsOutJackDevice; dsp* fDSP; + + audio* fAudio; AudioBufferList* fInputData; AudioDeviceID fDeviceID; @@ -734,13 +724,13 @@ class TCoreAudioRenderer if (fAggregatePluginID > 0) { osErr = AudioObjectGetPropertyDataSize(fAggregatePluginID, &pluginAOPA, 0, NULL, &outDataSize); if (osErr != noErr) { - printf("TCoreAudioRenderer::DestroyAggregateDevice : AudioObjectGetPropertyDataSize error\n"); - printError(osErr); + //printf("TCoreAudioRenderer::DestroyAggregateDevice : AudioObjectGetPropertyDataSize error\n"); + //printError(osErr); } osErr = AudioObjectGetPropertyData(fAggregatePluginID, &pluginAOPA, 0, NULL, &outDataSize, &fAggregateDeviceID); if (osErr != noErr) { - printf("TCoreAudioRenderer::DestroyAggregateDevice : AudioObjectGetPropertyData error\n"); - printError(osErr); + //printf("TCoreAudioRenderer::DestroyAggregateDevice : AudioObjectGetPropertyData error\n"); + //printError(osErr); } } } @@ -974,6 +964,7 @@ class TCoreAudioRenderer fOutChannel[i] = (float*)ioData->mBuffers[i].mData; } fDSP->compute(double(AudioConvertHostTimeToNanos(inTimeStamp->mHostTime))/1000., inNumberFrames, fInChannel, fOutChannel); + fAudio->runControlCallbacks(); } else { printf("AudioUnitRender error... %x\n", fInputData); printError(err); @@ -982,18 +973,20 @@ class TCoreAudioRenderer } public: - - TCoreAudioRenderer() + + TCoreAudioRenderer(audio* audio) :fAggregateDeviceID(-1),fAggregatePluginID(-1), fDevNumInChans(0),fDevNumOutChans(0), fPhysicalInputs(0), fPhysicalOutputs(0), fInChannel(0),fOutChannel(0), - fBufferSize(0),fSampleRate(0), - fDSP(0),fInputData(0), - fDeviceID(0),fAUHAL(0), - fState(false), + fBufferSize(0),fSampleRate(0), fIsInJackDevice(false), - fIsOutJackDevice(false) + fIsOutJackDevice(false), + fDSP(0), + fAudio(audio), + fInputData(0), + fDeviceID(0),fAUHAL(0), + fState(false) {} virtual ~TCoreAudioRenderer() @@ -1206,7 +1199,7 @@ class TCoreAudioRenderer //printf("Error calling AudioUnitGetPropertyInfo - kAudioOutputUnitProperty_ChannelMap 1\n"); //printError(err); } else { - fPhysicalInputs = (err == noErr) ? outSize / sizeof(SInt32) : 0; + fPhysicalInputs = outSize / sizeof(SInt32); //printf("fPhysicalInputs = %ld\n", fPhysicalInputs); } @@ -1215,7 +1208,7 @@ class TCoreAudioRenderer //printf("Error calling AudioUnitGetPropertyInfo - kAudioOutputUnitProperty_ChannelMap 0\n"); //printError(err); } else { - fPhysicalOutputs = (err == noErr) ? outSize / sizeof(SInt32) : 0; + fPhysicalOutputs = outSize / sizeof(SInt32); //printf("fPhysicalOutputs = %ld\n", fPhysicalOutputs); } @@ -1447,7 +1440,7 @@ class TCoreAudioRenderer } } - void set_dsp(dsp* DSP) + void setDsp(dsp* DSP) { fDSP = DSP; } @@ -1473,8 +1466,8 @@ class coreaudio : public audio { public: - coreaudio(int srate, int bsize) : fSampleRate(srate), fBufferSize(bsize) {} - coreaudio(int bsize) : fSampleRate(-1), fBufferSize(bsize) {} + coreaudio(int srate, int bsize) : fAudioDevice(this), fSampleRate(srate), fBufferSize(bsize) {} + coreaudio(int bsize) : fAudioDevice(this), fSampleRate(-1), fBufferSize(bsize) {} virtual ~coreaudio() { fAudioDevice.Close(); } virtual bool init(const char* /*name*/, dsp* DSP) @@ -1483,7 +1476,7 @@ class coreaudio : public audio { printf("Cannot open CoreAudio device\n"); return false; } - fAudioDevice.set_dsp(DSP); + fAudioDevice.setDsp(DSP); // If -1 was given, fSampleRate will be changed by OpenDefault DSP->init(fSampleRate); return true; @@ -1503,11 +1496,11 @@ class coreaudio : public audio { fAudioDevice.Stop(); } - virtual int get_buffer_size() { return fAudioDevice.GetBufferSize(); } - virtual int get_sample_rate() { return fAudioDevice.GetSampleRate(); } + virtual int getBufferSize() { return fAudioDevice.GetBufferSize(); } + virtual int getSampleRate() { return fAudioDevice.GetSampleRate(); } - virtual int get_num_inputs() { return fAudioDevice.GetNumInputs(); } - virtual int get_num_outputs() { return fAudioDevice.GetNumOutputs(); } + virtual int getNumInputs() { return fAudioDevice.GetNumInputs(); } + virtual int getNumOutputs() { return fAudioDevice.GetNumOutputs(); } }; diff --git a/source/DEINDUGens/include/faust/audio/coreaudio-ios-dsp.h b/source/DEINDUGens/include/faust/audio/coreaudio-ios-dsp.h index a835b29a4f..50063106aa 100644 --- a/source/DEINDUGens/include/faust/audio/coreaudio-ios-dsp.h +++ b/source/DEINDUGens/include/faust/audio/coreaudio-ios-dsp.h @@ -1,39 +1,27 @@ /************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ - ************************************************************************ - ************************************************************************/ - #ifndef __coreaudio_ios_dsp__ #define __coreaudio_ios_dsp__ @@ -65,11 +53,9 @@ using namespace std; #define OPEN_ERR -1 #define NO_ERR 0 -typedef void (* ControlCallback) (void* data); - class TiPhoneCoreAudioRenderer { - + protected: AudioUnit fAUHAL; @@ -79,11 +65,10 @@ class TiPhoneCoreAudioRenderer int fHWNumInChans; int fHWNumOutChans; - - ControlCallback fControlCb; - void* fControlCbArg; - + dsp* fDSP; + + audio* fAudio; AudioBufferList* fCAInputData; @@ -100,7 +85,7 @@ class TiPhoneCoreAudioRenderer printf(" Bits per Channel:%ld\n", inDesc->mBitsPerChannel); printf("- - - - - - - - - - - - - - - - - - - -\n"); } - + static void printError(OSStatus err) { switch (err) { @@ -139,7 +124,7 @@ class TiPhoneCoreAudioRenderer break; } } - + static OSStatus Render(void *inRefCon,AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32, @@ -148,59 +133,58 @@ class TiPhoneCoreAudioRenderer { return static_cast(inRefCon)->Render(ioActionFlags, inTimeStamp, inNumberFrames, ioData); } - + OSStatus Render(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData) { OSStatus err = noErr; - + if (fDevNumInChans > 0) { err = AudioUnitRender(fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, fCAInputData); } - + if (err == noErr) { float* fInChannel[fDevNumInChans]; float* fOutChannel[fDevNumOutChans]; - + for (int chan = 0; chan < fDevNumInChans; chan++) { fInChannel[chan] = (float*)fCAInputData->mBuffers[chan].mData; } - + for (int chan = 0; chan < fDevNumOutChans; chan++) { fOutChannel[chan] = (float*)ioData->mBuffers[chan].mData; } - - if (fControlCb) { - fControlCb(fControlCbArg); - } + fDSP->compute((int)inNumberFrames, fInChannel, fOutChannel); + + fAudio->runControlCallbacks(); } return err; } - + static void InterruptionListener(void *inClientData, UInt32 inInterruption) { TiPhoneCoreAudioRenderer *obj = (TiPhoneCoreAudioRenderer*)inClientData; printf("Session interrupted! --- %s ---", (inInterruption == kAudioSessionBeginInterruption) ? "Begin Interruption" : "End Interruption"); - + if (inInterruption == kAudioSessionEndInterruption) { // Make sure we are again the active session AudioSessionSetActive(true); obj->SetupMixing(); AudioOutputUnitStart(obj->fAUHAL); } - + if (inInterruption == kAudioSessionBeginInterruption) { AudioOutputUnitStop(obj->fAUHAL); } } - + int SetupMixing() { OSStatus err; - + /* 01/07/2014 : cause iRig to fail, so deactivated for now... CFStringRef route; @@ -214,8 +198,8 @@ class TiPhoneCoreAudioRenderer AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(newRoute), &newRoute); } } - */ - + */ + UInt32 allowMixing = true; err = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); if (err != noErr) { @@ -226,7 +210,7 @@ class TiPhoneCoreAudioRenderer return 0; } } - + static void AudioSessionPropertyListener(void* inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void* inData) { TiPhoneCoreAudioRenderer *obj = (TiPhoneCoreAudioRenderer*)inData; @@ -247,7 +231,7 @@ class TiPhoneCoreAudioRenderer } } } - + static int SetAudioCategory(int input, int output) { // Set the audioCategory the way Faust DSP wants @@ -262,42 +246,55 @@ class TiPhoneCoreAudioRenderer audioCategory = kAudioSessionCategory_MediaPlayback; printf("AudioCategory kAudioSessionCategory_MediaPlayback\n"); } - + OSStatus err = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory); if (err != noErr) { printf("Couldn't set audio category\n"); printError(err); return OPEN_ERR; } - + // 09/07/2015 : https://developer.apple.com/library/ios/qa/qa1754/_index.html if (audioCategory == kAudioSessionCategory_PlayAndRecord) { + + // 21/09/2017 Compatible with bluetooth devices. Deactivate bluetooth micro which run at 16khz, use internal micro instead. + /* UInt32 overrideAudioRoute = 1; err = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(UInt32), &overrideAudioRoute); if (err != noErr) { printf("Error setting kAudioSessionProperty_OverrideCategoryDefaultToSpeaker\n"); printError(err); } - + UInt32 allowBluetoothInput = 1; err = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, sizeof(UInt32), &allowBluetoothInput); if (err != noErr) { printf("Error setting kAudioSessionProperty_OverrideCategoryEnableBluetoothInput\n"); printError(err); } + */ + + // On devices with more than one built-in microphone, the microphone closest to the video camera is used. + UInt32 allowInternalInput = kAudioSessionMode_VideoRecording; + err = AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(UInt32), &allowInternalInput); + if (err != noErr) { + printf("Error setting kAudioSessionMode_VideoRecording\n"); + printError(err); + } + } - - #if NOAGC + + #if NOAGC // If input is used, disable AGC if (audioCategory == kAudioSessionCategory_RecordAudio || audioCategory == kAudioSessionCategory_PlayAndRecord) { - + UInt32 sessionMode = kAudioSessionMode_Measurement; err = AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(sessionMode), &sessionMode); if (err != noErr) { printf("Error setting kAudioSessionMode_Measurement\n"); printError(err); } - + UInt32 availableGain; UInt32 outSize = sizeof(availableGain); err = AudioSessionGetProperty(kAudioSessionProperty_InputGainAvailable, &outSize, &availableGain); @@ -320,35 +317,35 @@ class TiPhoneCoreAudioRenderer } } } - #endif - + #endif + return NO_ERR; } - + int SetParameters(int bufferSize, int samplerate) { OSStatus err; UInt32 outSize; UInt32 enableIO; AudioStreamBasicDescription srcFormat, dstFormat; - + printf("SetParameters fDevNumInChans = %d fDevNumOutChans = %d bufferSize = %d samplerate = %d\n", fDevNumInChans, fDevNumOutChans, bufferSize, samplerate); - + err = AudioSessionSetActive(true); if (err != noErr) { printf("Couldn't set audio session active\n"); printError(err); return OPEN_ERR; } - + AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, AudioSessionPropertyListener, this); AudioSessionAddPropertyListener(kAudioSessionProperty_AudioInputAvailable, AudioSessionPropertyListener, this); AudioSessionAddPropertyListener(kAudioSessionProperty_ServerDied, AudioSessionPropertyListener, this); - + if (SetAudioCategory(fDevNumInChans, fDevNumOutChans) != NO_ERR) { return OPEN_ERR; } - + // Scan Hardware outSize = sizeof(fHWNumInChans); err = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareInputNumberChannels, &outSize, &fHWNumInChans); @@ -359,7 +356,7 @@ class TiPhoneCoreAudioRenderer } else { printf("Get hw input channels %d\n", fHWNumInChans); } - + outSize = sizeof(fHWNumOutChans); err = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputNumberChannels, &outSize, &fHWNumOutChans); if (err != noErr) { @@ -369,16 +366,17 @@ class TiPhoneCoreAudioRenderer } else { printf("Get hw output channels %d\n", fHWNumOutChans); } - + /* // Possibly reset the audioCategory the way hardware allows + // 21/09/2017 cause problem when use bluetooth, deactive for now if (SetAudioCategory(fHWNumInChans, fHWNumOutChans) != NO_ERR) { return OPEN_ERR; } - + */ if (SetupMixing() < 0) { return OPEN_ERR; } - + Float64 hwSampleRate; outSize = sizeof(hwSampleRate); err = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate, &outSize, &hwSampleRate); @@ -389,7 +387,7 @@ class TiPhoneCoreAudioRenderer } else { printf("Get hw sample rate %f\n", hwSampleRate); } - + Float32 hwBufferSize; outSize = sizeof(hwBufferSize); err = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration, &outSize, &hwBufferSize); @@ -400,17 +398,17 @@ class TiPhoneCoreAudioRenderer } else { printf("Get hw buffer duration %f\n", hwBufferSize); } - + Float32 preferredPeriodDuration = float(bufferSize) / float(samplerate); printf("preferredPeriodDuration %f \n", preferredPeriodDuration); - + err = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredPeriodDuration), &preferredPeriodDuration); if (err != noErr) { printf("Couldn't set i/o buffer duration\n"); printError(err); return OPEN_ERR; } - + Float32 actualPeriodDuration; outSize = sizeof(actualPeriodDuration); err = AudioSessionGetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, &outSize, &actualPeriodDuration); @@ -419,13 +417,13 @@ class TiPhoneCoreAudioRenderer printError(err); return OPEN_ERR; } - + printf("preferredPeriodDuration %f actualPeriodDuration %f\n", preferredPeriodDuration, actualPeriodDuration); if (preferredPeriodDuration != actualPeriodDuration) { printf("Couldn't set hw buffer duration\n"); return OPEN_ERR; } - + Float64 preferredSamplerate = float(samplerate); err = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareSampleRate, sizeof(preferredSamplerate), &preferredSamplerate); if (err != noErr) { @@ -433,7 +431,7 @@ class TiPhoneCoreAudioRenderer printError(err); return OPEN_ERR; } - + Float32 inputLatency; outSize = sizeof(inputLatency); err = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareInputLatency, &outSize, &inputLatency); @@ -443,7 +441,7 @@ class TiPhoneCoreAudioRenderer } else { printf("inputLatency in sec : %f\n", inputLatency); } - + Float32 outputLatency; outSize = sizeof(outputLatency); err = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputLatency, &outSize, &outputLatency); @@ -453,18 +451,18 @@ class TiPhoneCoreAudioRenderer } else { printf("outputLatency in sec : %f\n", outputLatency); } - + // AUHAL AudioComponentDescription cd = {kAudioUnitType_Output, kAudioUnitSubType_RemoteIO, kAudioUnitManufacturer_Apple, 0, 0}; AudioComponent HALOutput = AudioComponentFindNext(NULL, &cd); - + err = AudioComponentInstanceNew(HALOutput, &fAUHAL); if (err != noErr) { printf("Error calling OpenAComponent\n"); printError(err); goto error; } - + enableIO = 1; err = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO)); if (err != noErr) { @@ -472,7 +470,7 @@ class TiPhoneCoreAudioRenderer printError(err); goto error; } - + enableIO = 1; err = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO)); if (err != noErr) { @@ -480,7 +478,7 @@ class TiPhoneCoreAudioRenderer printError(err); goto error; } - + UInt32 maxFPS; outSize = sizeof(maxFPS); err = AudioUnitGetProperty(fAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &maxFPS, &outSize); @@ -491,28 +489,28 @@ class TiPhoneCoreAudioRenderer } else { printf("Get kAudioUnitProperty_MaximumFramesPerSlice %d\n", (unsigned int)maxFPS); } - + err = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 1, (UInt32*)&bufferSize, sizeof(UInt32)); if (err != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_MaximumFramesPerSlice\n"); printError(err); goto error; } - + err = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, (UInt32*)&bufferSize, sizeof(UInt32)); if (err != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_MaximumFramesPerSlice\n"); printError(err); goto error; } - + err = AudioUnitInitialize(fAUHAL); if (err != noErr) { printf("Cannot initialize AUHAL unit\n"); printError(err); goto error; } - + // Setting format if (fDevNumInChans > 0) { outSize = sizeof(AudioStreamBasicDescription); @@ -522,7 +520,7 @@ class TiPhoneCoreAudioRenderer printError(err); } PrintStreamDesc(&srcFormat); - + srcFormat.mFormatID = kAudioFormatLinearPCM; srcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; srcFormat.mBytesPerPacket = sizeof(AudioUnitSampleType); @@ -530,16 +528,16 @@ class TiPhoneCoreAudioRenderer srcFormat.mBytesPerFrame = sizeof(AudioUnitSampleType); srcFormat.mChannelsPerFrame = fDevNumInChans; srcFormat.mBitsPerChannel = 32; - + PrintStreamDesc(&srcFormat); - + err = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &srcFormat, sizeof(AudioStreamBasicDescription)); if (err != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Output\n"); printError(err); } } - + if (fDevNumOutChans > 0) { outSize = sizeof(AudioStreamBasicDescription); err = AudioUnitGetProperty(fAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &dstFormat, &outSize); @@ -548,7 +546,7 @@ class TiPhoneCoreAudioRenderer printError(err); } PrintStreamDesc(&dstFormat); - + dstFormat.mFormatID = kAudioFormatLinearPCM; dstFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; dstFormat.mBytesPerPacket = sizeof(AudioUnitSampleType); @@ -556,16 +554,16 @@ class TiPhoneCoreAudioRenderer dstFormat.mBytesPerFrame = sizeof(AudioUnitSampleType); dstFormat.mChannelsPerFrame = fDevNumOutChans; dstFormat.mBitsPerChannel = 32; - + PrintStreamDesc(&dstFormat); - + err = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &dstFormat, sizeof(AudioStreamBasicDescription)); if (err != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Input\n"); printError(err); } } - + if (fDevNumInChans > 0 && fDevNumOutChans == 0) { AURenderCallbackStruct output; output.inputProc = Render; @@ -587,7 +585,7 @@ class TiPhoneCoreAudioRenderer goto error; } } - + // Possibly prepare input buffers if (fDevNumInChans > 0) { fCAInputData = (AudioBufferList*)malloc(sizeof(float) + fDevNumInChans * sizeof(AudioBuffer)); @@ -598,9 +596,9 @@ class TiPhoneCoreAudioRenderer fCAInputData->mBuffers[i].mData = malloc(bufferSize * sizeof(float)); } } - + return NO_ERR; - + error: AudioUnitUninitialize(fAUHAL); AudioComponentInstanceDispose(fAUHAL); @@ -609,10 +607,10 @@ class TiPhoneCoreAudioRenderer public: - TiPhoneCoreAudioRenderer() + TiPhoneCoreAudioRenderer(audio* audio) :fAUHAL(0), fDevNumInChans(0), fDevNumOutChans(0), fHWNumInChans(0), fHWNumOutChans(0), - fDSP(0), fCAInputData(NULL), fControlCb(NULL), fControlCbArg(NULL) + fDSP(0), fAudio(audio), fCAInputData(NULL) {} virtual ~TiPhoneCoreAudioRenderer() @@ -624,15 +622,13 @@ class TiPhoneCoreAudioRenderer free(fCAInputData); } } - - int Open(dsp* dsp, int inChan, int outChan, int buffersize, int samplerate, ControlCallback cb, void* arg) + + int Open(dsp* dsp, int inChan, int outChan, int buffersize, int samplerate) { fDSP = dsp; fDevNumInChans = inChan; fDevNumOutChans = outChan; - fControlCb = cb; - fControlCbArg = arg; - + // Initialize and configure the audio session OSStatus err = AudioSessionInitialize(NULL, NULL, InterruptionListener, this); if (err != noErr && err != kAudioSessionAlreadyInitialized) { @@ -640,26 +636,26 @@ class TiPhoneCoreAudioRenderer printError(err); return OPEN_ERR; } - + if (SetParameters(buffersize, samplerate) < 0) { printf("Cannot set parameters to CoreAudio device\n"); return OPEN_ERR; } - + return NO_ERR; } - + int Close() { AudioUnitUninitialize(fAUHAL); AudioComponentInstanceDispose(fAUHAL); return NO_ERR; } - + int Start() { AudioSessionSetActive(true); - + if (AudioOutputUnitStart(fAUHAL) != noErr) { printf("Error while opening device : device open error\n"); return OPEN_ERR; @@ -667,11 +663,11 @@ class TiPhoneCoreAudioRenderer return NO_ERR; } } - + int Stop() { AudioSessionSetActive(false); - + if (AudioOutputUnitStop(fAUHAL) != noErr) { printf("Error while closing device : device close error\n"); return OPEN_ERR; @@ -680,44 +676,45 @@ class TiPhoneCoreAudioRenderer } } + int GetNumInputs() { return fHWNumInChans; } + int GetNumOutputs() { return fHWNumOutChans; } + }; /****************************************************************************** ******************************************************************************* - + CORE AUDIO INTERFACE - + ******************************************************************************* *******************************************************************************/ class iosaudio : public audio { - + protected: - + TiPhoneCoreAudioRenderer fAudioDevice; int fSampleRate, fBufferSize; - ControlCallback fControlCb; - void* fControlCbArg; - + public: - - iosaudio(int srate, int bsize, ControlCallback cb = NULL, void* arg = NULL) - :fSampleRate(srate), fBufferSize(bsize), fControlCb(cb), fControlCbArg(arg) + + iosaudio(int srate, int bsize) + :fAudioDevice(this), fSampleRate(srate), fBufferSize(bsize) {} - + virtual ~iosaudio() { fAudioDevice.Close(); } - - virtual bool init(const char* /*name*/, dsp* DSP) + + virtual bool init(const char* /*name*/, dsp* DSP) { DSP->init(fSampleRate); - if (fAudioDevice.Open(DSP, DSP->getNumInputs(), DSP->getNumOutputs(), fBufferSize, fSampleRate, fControlCb, fControlCbArg) < 0) { + if (fAudioDevice.Open(DSP, DSP->getNumInputs(), DSP->getNumOutputs(), fBufferSize, fSampleRate) < 0) { printf("Cannot open iOS audio device\n"); return false; } return true; } - - virtual bool start() + + virtual bool start() { if (fAudioDevice.Start() < 0) { printf("Cannot start iOS audio device\n"); @@ -725,19 +722,20 @@ class iosaudio : public audio { } return true; } - - virtual void stop() + + virtual void stop() { fAudioDevice.Stop(); } - - virtual int get_buffer_size() { return fBufferSize; } - virtual int get_sample_rate() { return fSampleRate; } - + + virtual int getBufferSize() { return fBufferSize; } + virtual int getSampleRate() { return fSampleRate; } + + virtual int getNumInputs() { return fAudioDevice.GetNumInputs(); } + virtual int getNumOutputs() { return fAudioDevice.GetNumOutputs(); } + }; #endif /********************END ARCHITECTURE SECTION (part 2/2)****************/ - - diff --git a/source/DEINDUGens/include/faust/audio/dummy-audio.h b/source/DEINDUGens/include/faust/audio/dummy-audio.h index 67b4df8d6b..7bca62c781 100644 --- a/source/DEINDUGens/include/faust/audio/dummy-audio.h +++ b/source/DEINDUGens/include/faust/audio/dummy-audio.h @@ -1,45 +1,25 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - A dummy audio driver - -******************************************************************************* -*******************************************************************************/ + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dummy_audio__ #define __dummy_audio__ @@ -47,8 +27,15 @@ #include #include #include +#include #include #include + +#ifdef USE_PTHREAD +#include +#else +#include +#endif #include "faust/dsp/dsp.h" #include "faust/audio/audio.h" @@ -62,27 +49,68 @@ class dummyaudio : public audio { dsp* fDSP; long fSampleRate; - long fBufferSize; - + long fBufferSize; + FAUSTFLOAT** fInChannel; - FAUSTFLOAT** fOutChannel; + FAUSTFLOAT** fOutChannel; + + int fNumInputs; + int fNumOutputs; + + bool fRunning; + int fRender; int fCount; - bool fIsSample; + int fSample; + bool fManager; + +#ifdef USE_PTHREAD + pthread_t fAudioThread; + static void* run(void* ptr) + { + dummyaudio* audio = (dummyaudio*)ptr; + audio->process(); + return 0; + } +#else + static void run(dummyaudio* audio) + { + audio->process(); + } + std::thread* fAudioThread = 0; +#endif + + void process() + { + while (fRunning && (--fRender > 0)) { + if (fSample > 0) { std::cout << "Render one buffer\n"; } + render(); + } + fRunning = false; + } public: - dummyaudio(int sr, int bs, int count = 10, bool sample = false) - :fSampleRate(sr), fBufferSize(bs), fCount(count), fIsSample(sample) {} - dummyaudio(int count = 10) - :fSampleRate(48000), fBufferSize(512), fCount(count) {} + dummyaudio(int sr, int bs, int count = BUFFER_TO_RENDER, int sample = -1, bool manager = false) + :fSampleRate(sr), fBufferSize(bs), + fInChannel(0), fOutChannel(0), + fRender(0), fCount(count), + fSample(sample), fManager(manager) + {} - virtual ~dummyaudio() + dummyaudio(int count = BUFFER_TO_RENDER) + :fSampleRate(48000), fBufferSize(512), + fInChannel(0), fOutChannel(0), + fRender(0), fCount(count), + fSample(512), fManager(false) + {} + + virtual ~dummyaudio() { - for (int i = 0; i < fDSP->getNumInputs(); i++) { + for (int i = 0; i < fNumInputs; i++) { delete[] fInChannel[i]; } - for (int i = 0; i < fDSP->getNumOutputs(); i++) { + for (int i = 0; i < fNumOutputs; i++) { delete[] fOutChannel[i]; } @@ -93,7 +121,17 @@ class dummyaudio : public audio { virtual bool init(const char* name, dsp* dsp) { fDSP = dsp; - fDSP->init(fSampleRate); + + // To be used in destructor + fNumInputs = fDSP->getNumInputs(); + fNumOutputs = fDSP->getNumOutputs(); + + if (fManager) { + // classInit is called elsewhere with a custom memory manager + fDSP->instanceInit(fSampleRate); + } else { + fDSP->init(fSampleRate); + } fInChannel = new FAUSTFLOAT*[fDSP->getNumInputs()]; fOutChannel = new FAUSTFLOAT*[fDSP->getNumOutputs()]; @@ -108,43 +146,61 @@ class dummyaudio : public audio { } return true; } + virtual bool start() { - while (--fCount > 0) { - printf("Render one buffer\n"); - render(); + fRender = fCount; + fRunning = true; + if (fCount == INT_MAX) { +#ifdef USE_PTHREAD + if (pthread_create(&fAudioThread, 0, run, this) != 0) { + fRunning = false; + } +#else + fAudioThread = new std::thread (dummyaudio::run, this); +#endif + return fRunning; + } else { + process(); + return true; } - return true; } + virtual void stop() - {} + { + if (fRunning) { + fRunning = false; +#ifdef USE_PTHREAD + pthread_join(fAudioThread, 0); +#else + fAudioThread->join(); + delete fAudioThread; + fAudioThread = 0; +#endif + } + } void render() { fDSP->compute(fBufferSize, fInChannel, fOutChannel); if (fDSP->getNumInputs() > 0) { - if (fIsSample) { - for (int frame = 0; frame < fBufferSize; frame++) { - std::cout << std::setprecision(6) << "sample in " << fInChannel[0][frame] << std::endl; - } - } else { - std::cout << std::setprecision(6) << "sample in " << fInChannel[0][0] << std::endl; + for (int frame = 0; frame < fSample; frame++) { + std::cout << std::fixed << std::setprecision(6) << "sample in " << fInChannel[0][frame] << std::endl; } } if (fDSP->getNumOutputs() > 0) { - if (fIsSample) { - for (int frame = 0; frame < fBufferSize; frame++) { - std::cout << std::fixed << std::setprecision(6) << "sample out " << fOutChannel[0][frame] << std::endl; - } - } else { - std::cout << std::fixed << std::setprecision(6) << "sample out " << fOutChannel[0][0] << std::endl; + for (int frame = 0; frame < fSample; frame++) { + std::cout << std::fixed << std::setprecision(6) << "sample out " << fOutChannel[0][frame] << std::endl; } } } - - virtual int get_buffer_size() { return fBufferSize; } - virtual int get_sample_rate() { return fSampleRate; } + + virtual int getBufferSize() { return fBufferSize; } + virtual int getSampleRate() { return fSampleRate; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } }; - + #endif diff --git a/source/DEINDUGens/include/faust/audio/jack-dsp.h b/source/DEINDUGens/include/faust/audio/jack-dsp.h index 121cb2107e..ae663b769c 100644 --- a/source/DEINDUGens/include/faust/audio/jack-dsp.h +++ b/source/DEINDUGens/include/faust/audio/jack-dsp.h @@ -1,35 +1,24 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __jack_dsp__ @@ -42,11 +31,9 @@ #include #include #include -#ifdef JACK_IOS -#include -#endif #include "faust/audio/audio.h" #include "faust/dsp/dsp.h" +#include "faust/dsp/dsp-adapter.h" #include "faust/midi/jack-midi.h" #if defined(_WIN32) && !defined(__MINGW32__) @@ -73,11 +60,7 @@ class jackaudio : public audio { std::vector fPhysicalInputs; std::vector fPhysicalOutputs; - - shutdown_callback fShutdown; // Shutdown callback to be called by libjack - void* fShutdownArg; // Shutdown callback data - void* fIconData; // iOS specific - int fIconSize; // iOS specific + bool fAutoConnect; // autoconnect with system in/out ports std::list > fConnections; // Connections list @@ -129,12 +112,12 @@ class jackaudio : public audio { } // Save client connections - virtual bool save_connections() + virtual bool saveConnections() { if (fClient) { fConnections.clear(); - for (int i = 0; i < fInputPorts.size(); i++) { + for (size_t i = 0; i < fInputPorts.size(); i++) { const char** connected_port = jack_port_get_all_connections(fClient, fInputPorts[i]); if (connected_port != NULL) { for (int port = 0; connected_port[port]; port++) { @@ -145,7 +128,7 @@ class jackaudio : public audio { } } - for (int i = 0; i < fOutputPorts.size(); i++) { + for (size_t i = 0; i < fOutputPorts.size(); i++) { const char** connected_port = jack_port_get_all_connections(fClient, fOutputPorts[i]); if (connected_port != NULL) { for (int port = 0; connected_port[port]; port++) { @@ -163,7 +146,7 @@ class jackaudio : public audio { } // Load client connections - void load_connections() + void loadConnections() { std::list >::const_iterator it; for (it = fConnections.begin(); it != fConnections.end(); it++) { @@ -191,73 +174,60 @@ class jackaudio : public audio { // Retrieve JACK inputs/output audio buffers float** fInChannel = (float**)alloca(fInputPorts.size() * sizeof(float*)); - for (int i = 0; i < fInputPorts.size(); i++) { + for (size_t i = 0; i < fInputPorts.size(); i++) { fInChannel[i] = (float*)jack_port_get_buffer(fInputPorts[i], nframes); } float** fOutChannel = (float**)alloca(fOutputPorts.size() * sizeof(float*)); - for (int i = 0; i < fOutputPorts.size(); i++) { + for (size_t i = 0; i < fOutputPorts.size(); i++) { fOutChannel[i] = (float*)jack_port_get_buffer(fOutputPorts[i], nframes); } - fDSP->compute(nframes, fInChannel, fOutChannel); + fDSP->compute(nframes, reinterpret_cast(fInChannel), reinterpret_cast(fOutChannel)); + + runControlCallbacks(); + return 0; } - + public: - jackaudio(const void* icon_data = 0, size_t icon_size = 0, bool auto_connect = true) - : fDSP(0), fClient(0), fShutdown(0), fShutdownArg(0), fAutoConnect(auto_connect) - { - if (icon_data) { - fIconData = malloc(icon_size); - fIconSize = icon_size; - memcpy(fIconData, icon_data, icon_size); - } else { - fIconData = NULL; - fIconSize = 0; - } - } + jackaudio(bool auto_connect = true) + : fDSP(0), fClient(0), fAutoConnect(auto_connect) + {} virtual ~jackaudio() { if (fClient) { stop(); - for (int i = 0; i < fInputPorts.size(); i++) { + for (size_t i = 0; i < fInputPorts.size(); i++) { jack_port_unregister(fClient, fInputPorts[i]); } - for (int i = 0; i < fOutputPorts.size(); i++) { + for (size_t i = 0; i < fOutputPorts.size(); i++) { jack_port_unregister(fClient, fOutputPorts[i]); } jack_client_close(fClient); - - if (fIconData) { - free(fIconData); - } } } virtual bool init(const char* name, dsp* dsp) { - if (init(name)) { - if (dsp) { set_dsp(dsp); } + if (initAux(name)) { + if (dsp) { setDsp(dsp); } return true; } else { return false; } } - virtual bool init(const char* name) + bool initAux(const char* name) { if ((fClient = jack_client_open(name, JackNullOption, NULL)) == 0) { fprintf(stderr, "JACK server not running ?\n"); return false; } - #ifdef JACK_IOS - jack_custom_publish_data(fClient, "icon.png", fIconData, fIconSize); - #endif - + #ifdef _OPENMP jack_set_process_thread(fClient, _jack_thread, this); #else @@ -303,9 +273,9 @@ class jackaudio : public audio { } if (fConnections.size() > 0) { - load_connections(); + loadConnections(); } else if (fAutoConnect) { - default_connections(); + defaultConnections(); } return true; @@ -314,36 +284,30 @@ class jackaudio : public audio { virtual void stop() { if (fClient) { - save_connections(); + saveConnections(); jack_deactivate(fClient); } } - virtual void shutdown(shutdown_callback cb, void* arg) - { - fShutdown = cb; - fShutdownArg = arg; - } - - virtual int get_buffer_size() { return jack_get_buffer_size(fClient); } - virtual int get_sample_rate() { return jack_get_sample_rate(fClient); } + virtual int getBufferSize() { return jack_get_buffer_size(fClient); } + virtual int getSampleRate() { return jack_get_sample_rate(fClient); } - virtual int get_num_inputs() + virtual int getNumInputs() { return fPhysicalInputs.size(); } - virtual int get_num_outputs() + virtual int getNumOutputs() { return fPhysicalOutputs.size(); } // Additional public API - jack_client_t* get_client() { return fClient; } + jack_client_t* getClient() { return fClient; } // Connect to physical inputs/outputs - void default_connections() + void defaultConnections() { // To avoid feedback at launch time, don't connect hardware inputs /* @@ -351,14 +315,15 @@ class jackaudio : public audio { jack_connect(fClient, fPhysicalInputs[i], jack_port_name(fInputPorts[i])); } */ - for (int i = 0; i < fOutputPorts.size() && i < fPhysicalInputs.size(); i++) { + for (size_t i = 0; i < fOutputPorts.size() && i < fPhysicalInputs.size(); i++) { jack_connect(fClient, jack_port_name(fOutputPorts[i]), fPhysicalOutputs[i]); } } - virtual void set_dsp(dsp* dsp) + virtual void setDsp(dsp* dsp) { - fDSP = dsp; + // Warning: possible memory leak here... + fDSP = (sizeof(FAUSTFLOAT) == 8) ? (new dsp_sample_adapter(dsp)) : dsp; for (int i = 0; i < fDSP->getNumInputs(); i++) { char buf[256]; @@ -378,22 +343,22 @@ class jackaudio : public audio { { if (driver) { // Connection between drivers - jack_port_t* src_port = get_output_port(src); - jack_port_t* dst_port = driver->get_input_port(src); + jack_port_t* src_port = getOutputPort(src); + jack_port_t* dst_port = driver->getInputPort(src); if (src_port && dst_port) { jack_connect(fClient, jack_port_name(src_port), jack_port_name(dst_port)); } } else if (reverse) { // Connection to physical input - if (src > fPhysicalInputs.size()) return; - jack_port_t* dst_port = get_input_port(dst); + if ((size_t)src > fPhysicalInputs.size()) return; + jack_port_t* dst_port = getInputPort(dst); if (dst_port) { jack_connect(fClient, fPhysicalInputs[src], jack_port_name(dst_port)); } } else { // Connection to physical output - if (dst > fPhysicalOutputs.size()) return; - jack_port_t* src_port = get_output_port(src); + if ((size_t)dst > fPhysicalOutputs.size()) return; + jack_port_t* src_port = getOutputPort(src); if (src_port) { jack_connect(fClient, jack_port_name(src_port), fPhysicalOutputs[dst]); } @@ -404,34 +369,34 @@ class jackaudio : public audio { { if (driver) { // Connection between drivers - jack_port_t* src_port = get_output_port(src); - jack_port_t* dst_port = driver->get_input_port(src); + jack_port_t* src_port = getOutputPort(src); + jack_port_t* dst_port = driver->getInputPort(src); if (src_port && dst_port) { jack_disconnect(fClient, jack_port_name(src_port), jack_port_name(dst_port)); } } else if (reverse) { // Connection to physical input - if (src > fPhysicalInputs.size()) return; - jack_port_t* dst_port = get_input_port(dst); + if ((size_t)src > fPhysicalInputs.size()) return; + jack_port_t* dst_port = getInputPort(dst); if (dst_port) { jack_disconnect(fClient, fPhysicalInputs[src], jack_port_name(dst_port)); } } else { // Connection to physical output - if (dst > fPhysicalOutputs.size()) return; - jack_port_t* src_port = get_output_port(src); + if ((size_t)dst > fPhysicalOutputs.size()) return; + jack_port_t* src_port = getOutputPort(src); if (src_port) { jack_disconnect(fClient, jack_port_name(src_port), fPhysicalOutputs[dst]); } } } - bool is_connected(jackaudio* driver, int src, int dst, bool reverse) + bool isConnected(jackaudio* driver, int src, int dst, bool reverse) { if (driver) { // Connection between drivers - jack_port_t* src_port = get_output_port(src); - jack_port_t* dst_port = driver->get_input_port(src); + jack_port_t* src_port = getOutputPort(src); + jack_port_t* dst_port = driver->getInputPort(src); if (src_port && dst_port) { return jack_port_connected_to(src_port, jack_port_name(dst_port)); } else { @@ -439,8 +404,8 @@ class jackaudio : public audio { } } else if (reverse) { // Connection to physical input - if (src > fPhysicalInputs.size()) return false; - jack_port_t* dst_port = get_input_port(dst); + if ((size_t)src > fPhysicalInputs.size()) return false; + jack_port_t* dst_port = getInputPort(dst); if (dst_port) { return jack_port_connected_to(dst_port, fPhysicalInputs[src]); } else { @@ -448,8 +413,8 @@ class jackaudio : public audio { } } else { // Connection to physical output - if (dst > fPhysicalOutputs.size()) return false; - jack_port_t* src_port = get_output_port(src); + if ((size_t)dst > fPhysicalOutputs.size()) return false; + jack_port_t* src_port = getOutputPort(src); if (src_port) { return jack_port_connected_to(src_port, fPhysicalOutputs[dst]); } else { @@ -458,8 +423,8 @@ class jackaudio : public audio { } } - jack_port_t* get_input_port(int port) { return (port >= 0 && port < fInputPorts.size()) ? fInputPorts[port] : 0; } - jack_port_t* get_output_port(int port) { return (port >= 0 && port < fOutputPorts.size()) ? fOutputPorts[port] : 0; } + jack_port_t* getInputPort(int port) { return (port >= 0 && port < (int)fInputPorts.size()) ? fInputPorts[port] : 0; } + jack_port_t* getOutputPort(int port) { return (port >= 0 && port < (int)fOutputPorts.size()) ? fOutputPorts[port] : 0; } }; @@ -472,9 +437,9 @@ class jackaudio_midi : public jackaudio, public jack_midi_handler { jack_port_t* fInputMidiPort; // JACK input MIDI port jack_port_t* fOutputMidiPort; // JACK output MIDI port - virtual bool save_connections() + virtual bool saveConnections() { - if (jackaudio::save_connections()) { // Audio connections can be saved, so try MIDI + if (jackaudio::saveConnections()) { // Audio connections can be saved, so try MIDI if (fInputMidiPort) { const char** connected_port = jack_port_get_all_connections(fClient, fInputMidiPort); @@ -519,17 +484,17 @@ class jackaudio_midi : public jackaudio, public jack_midi_handler { // Retrieve JACK inputs/output audio buffers float** fInChannel = (float**)alloca(fInputPorts.size() * sizeof(float*)); - for (int i = 0; i < fInputPorts.size(); i++) { + for (size_t i = 0; i < fInputPorts.size(); i++) { fInChannel[i] = (float*)jack_port_get_buffer(fInputPorts[i], nframes); } float** fOutChannel = (float**)alloca(fOutputPorts.size() * sizeof(float*)); - for (int i = 0; i < fOutputPorts.size(); i++) { + for (size_t i = 0; i < fOutputPorts.size(); i++) { fOutChannel[i] = (float*)jack_port_get_buffer(fOutputPorts[i], nframes); } // By convention timestamp of -1 means 'no timestamp conversion' : events already have a timestamp espressed in frames - fDSP->compute(-1, nframes, fInChannel, fOutChannel); + fDSP->compute(-1, nframes, reinterpret_cast(fInChannel), reinterpret_cast(fOutChannel)); } virtual void processMidiOut(jack_nframes_t nframes) @@ -555,8 +520,8 @@ class jackaudio_midi : public jackaudio, public jack_midi_handler { public: - jackaudio_midi(const void* icon_data = 0, size_t icon_size = 0, bool auto_connect = true) - :jackaudio(icon_data, icon_size, auto_connect), jack_midi_handler("JACKMidi"), + jackaudio_midi(bool auto_connect = true) + :jackaudio(auto_connect), jack_midi_handler("JACKMidi"), fInputMidiPort(0), fOutputMidiPort(0) {} @@ -567,15 +532,13 @@ class jackaudio_midi : public jackaudio, public jack_midi_handler { if (fOutputMidiPort) { jack_port_unregister(fClient, fOutputMidiPort); } } } - - virtual bool init(const char* name, dsp* dsp, bool midi = false) + + virtual bool init(const char* name, dsp* dsp) { - if (jackaudio::init(name)) { - if (dsp) { set_dsp(dsp); } - if (midi) { - fInputMidiPort = jack_port_register(fClient, "midi_in_1", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); - fOutputMidiPort = jack_port_register(fClient, "midi_out_1", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0); - } + if (jackaudio::initAux(name)) { + if (dsp) { setDsp(dsp); } + fInputMidiPort = jack_port_register(fClient, "midi_in_1", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); + fOutputMidiPort = jack_port_register(fClient, "midi_out_1", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0); return true; } else { return false; diff --git a/source/DEINDUGens/include/faust/audio/juce-dsp.h b/source/DEINDUGens/include/faust/audio/juce-dsp.h index 604d53cb61..d2f3a5305b 100644 --- a/source/DEINDUGens/include/faust/audio/juce-dsp.h +++ b/source/DEINDUGens/include/faust/audio/juce-dsp.h @@ -1,7 +1,6 @@ /************************************************************************ FAUST Architecture File - Copyright (C) 2017 Allen Weng - Copyright (C) 2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- This Architecture section is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -20,7 +19,6 @@ that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ #ifndef __juce_dsp__ @@ -38,10 +36,10 @@ class juceaudio : public audio, private AudioAppComponent { dsp* fDSP; - void prepareToPlay (int, double) override + void prepareToPlay(int, double) override { - const BigInteger activeInputChannels = deviceManager.getCurrentAudioDevice()->getActiveInputChannels(); - const BigInteger activeOutputChannels = deviceManager.getCurrentAudioDevice()->getActiveOutputChannels(); + const BigInteger activeInputChannels = deviceManager.getCurrentAudioDevice()->getActiveInputChannels(); + const BigInteger activeOutputChannels = deviceManager.getCurrentAudioDevice()->getActiveOutputChannels(); const int maxInputChannels = activeInputChannels.getHighestBit() + 1; const int maxOutputChannels = activeOutputChannels.getHighestBit() + 1; @@ -56,7 +54,7 @@ class juceaudio : public audio, private AudioAppComponent { void releaseResources() override {} - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override + void getNextAudioBlock(const AudioSourceChannelInfo& bufferToFill) override { AVOIDDENORMALS; @@ -100,20 +98,20 @@ class juceaudio : public audio, private AudioAppComponent { shutdownAudio(); } - int get_buffer_size() override + int getBufferSize() override { return int(deviceManager.getCurrentAudioDevice()->getCurrentBufferSizeSamples()); } - int get_sample_rate() override + int getSampleRate() override { return int(deviceManager.getCurrentAudioDevice()->getCurrentSampleRate()); } - int get_num_inputs() override { return deviceManager.getCurrentAudioDevice()->getActiveInputChannels().toInteger(); } - int get_num_outputs() override { return deviceManager.getCurrentAudioDevice()->getActiveOutputChannels().toInteger(); } + int getNumInputs() override { return deviceManager.getCurrentAudioDevice()->getActiveInputChannels().toInteger(); } + int getNumOutputs() override { return deviceManager.getCurrentAudioDevice()->getActiveOutputChannels().toInteger(); } - float get_cpu_load() override { return float(deviceManager.getCpuUsage()); } + float getCPULoad() override { return float(deviceManager.getCpuUsage()); } }; #endif diff --git a/source/DEINDUGens/include/faust/audio/netjack-dsp.h b/source/DEINDUGens/include/faust/audio/netjack-dsp.h index 78287903f4..502a6b19df 100644 --- a/source/DEINDUGens/include/faust/audio/netjack-dsp.h +++ b/source/DEINDUGens/include/faust/audio/netjack-dsp.h @@ -1,37 +1,24 @@ /************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __netjack_dsp__ @@ -59,38 +46,40 @@ class netjackaudio : public audio int fMasterPort; int fMTU; int fLatency; + int fMIDIInputs; + int fMIDIOutputs; jack_master_t fResult; #ifdef RESTART_CB_API - static int net_restart(void* arg) + static int netRestart(void* arg) { printf("Network failure, restart...\n"); - return static_cast(arg)->restart_cb(); + return static_cast(arg)->restartCb(); } #else - static void net_shutdown(void* arg) + static void netShutdown(void* arg) { printf("Network failure, shutdown...\n"); static_cast(arg)->shutdown_cb(); } #endif - static int net_sample_rate(jack_nframes_t nframes, void* arg) + static int netSampleRate(jack_nframes_t nframes, void* arg) { - return static_cast(arg)->set_sample_rate(nframes); + return static_cast(arg)->setSampleRate(nframes); } - static int net_buffer_size(jack_nframes_t nframes, void* arg) + static int netBufferSize(jack_nframes_t nframes, void* arg) { - return static_cast(arg)->set_buffer_size(nframes); + return static_cast(arg)->setBufferSize(nframes); } - static void net_error(int error_code, void* arg) + static void netError(int error_code, void* arg) { - return static_cast(arg)->error_cb(error_code); + return static_cast(arg)->errorCb(error_code); } - static int net_process(jack_nframes_t buffer_size, + static int netProcess(jack_nframes_t buffer_size, int, float** audio_inputs, int, @@ -105,17 +94,17 @@ class netjackaudio : public audio return 0; } - bool init_aux(const char* name, dsp* DSP, int audio_inputs, int audio_outputs, int midi_inputs, int midi_outputs) + bool initAux(const char* name, dsp* DSP, int audio_inputs, int audio_outputs, int midi_inputs, int midi_outputs) { - if (init_aux(name, audio_inputs, audio_outputs, midi_inputs, midi_outputs)) { - set_dsp(DSP); + if (initAux(name, audio_inputs, audio_outputs, midi_inputs, midi_outputs)) { + setDsp(DSP); return true; } else { return false; } } - bool init_aux(const char* name, int audio_inputs, int audio_outputs, int midi_inputs, int midi_outputs) + bool initAux(const char* name, int audio_inputs, int audio_outputs, int midi_inputs, int midi_outputs) { jack_slave_t request = { audio_inputs, @@ -134,40 +123,38 @@ class netjackaudio : public audio return false; } - jack_set_net_slave_process_callback(fNet, net_process, this); + jack_set_net_slave_process_callback(fNet, netProcess, this); #ifdef RESTART_CB_API - jack_set_net_slave_restart_callback(fNet, net_restart, this); + jack_set_net_slave_restart_callback(fNet, netRestart, this); #else - jack_set_net_slave_shutdown_callback(fNet, net_shutdown, this); + jack_set_net_slave_shutdown_callback(fNet, netShutdown, this); #endif - jack_set_net_slave_sample_rate_callback(fNet, net_sample_rate, this); - - jack_set_net_slave_buffer_size_callback(fNet, net_buffer_size, this); - - jack_set_net_slave_error_callback(fNet, net_error, this); + jack_set_net_slave_sample_rate_callback(fNet, netSampleRate, this); + jack_set_net_slave_buffer_size_callback(fNet, netBufferSize, this); + jack_set_net_slave_error_callback(fNet, netError, this); return true; } // Possibly to be redefined by subclasses - virtual int restart_cb() + virtual int restartCb() { return 0; } - virtual void shutdown_cb() + virtual void shutdownCb() {} - virtual void error_cb(int error_code) + virtual void errorCb(int error_code) {} - virtual int set_sample_rate(jack_nframes_t nframes) + virtual int setSampleRate(jack_nframes_t nframes) { return 0; } - virtual int set_buffer_size(jack_nframes_t nframes) + virtual int setBufferSize(jack_nframes_t nframes) { return 0; } @@ -180,8 +167,22 @@ class netjackaudio : public audio public: - netjackaudio(int net_format, const std::string& master_ip, int master_port, int mtu, int latency = 2) - : fDSP(0), fNet(0), fNetFormat(net_format), fMasterIP(master_ip), fMasterPort(master_port), fMTU(mtu), fLatency(latency) + netjackaudio(int net_format, + const std::string& master_ip, + int master_port, + int mtu, + int latency, + int midi_in, + int midi_out) + : fDSP(0), + fNet(0), + fNetFormat(net_format), + fMasterIP(master_ip), + fMasterPort(master_port), + fMTU(mtu), + fLatency(latency), + fMIDIInputs(midi_in), + fMIDIOutputs(midi_out) {} virtual ~netjackaudio() @@ -194,13 +195,13 @@ class netjackaudio : public audio virtual bool init(const char* name, dsp* DSP) { - return init_aux(name, DSP, DSP->getNumInputs(), DSP->getNumOutputs(), 0, 0); + return initAux(name, DSP, DSP->getNumInputs(), DSP->getNumOutputs(), fMIDIInputs, fMIDIOutputs); } virtual bool start() { if (jack_net_slave_activate(fNet)) { - printf("cannot activate net"); + printf("cannot activate net\n"); return false; } return true; @@ -213,14 +214,22 @@ class netjackaudio : public audio } } - void set_dsp(dsp* DSP) + virtual bool isConnexionActive() + { + return jack_net_slave_is_active(fNet); + } + + void setDsp(dsp* DSP) { fDSP = DSP; fDSP->init(fResult.sample_rate); } - virtual int get_buffer_size() { return fResult.buffer_size; } - virtual int get_sample_rate() { return fResult.sample_rate; } + virtual int getBufferSize() { return fResult.buffer_size; } + virtual int getSampleRate() { return fResult.sample_rate; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } }; @@ -236,37 +245,30 @@ class netjackaudio_control : public netjackaudio, public ControlUI { { AVOIDDENORMALS; - float** inputs_tmp = (float**)alloca(fDSP->getNumInputs()*sizeof(float*)); - float** outputs_tmp = (float**)alloca(fDSP->getNumOutputs()*sizeof(float*)); - - for (int i = 0; i < fDSP->getNumInputs(); i++) { - inputs_tmp[i] = audio_inputs[i+1]; - } - - for (int i = 0; i < fDSP->getNumOutputs(); i++) { - outputs_tmp[i] = audio_outputs[i+1]; - } - // Control buffer always use buffer_size, even if uncomplete data buffer (count < buffer_size) is received - decode_control(audio_inputs[0], fResult.buffer_size); + decodeControl(audio_inputs[0], fResult.buffer_size); // "count" may be less than buffer_size - fDSP->compute(count, inputs_tmp, outputs_tmp); + fDSP->compute(count, audio_inputs, audio_outputs); // Control buffer always use buffer_size, even if uncomplete data buffer (count < buffer_size) is received - encode_control(audio_outputs[0], fResult.buffer_size); + encodeControl(audio_outputs[0], fResult.buffer_size); } public: - netjackaudio_control(int net_format, const std::string& master_ip, int master_port, int mtu, int latency) - :netjackaudio(net_format, master_ip, master_port, mtu, latency) + netjackaudio_control(int net_format, + const std::string& master_ip, + int master_port, + int mtu, + int latency) + :netjackaudio(net_format, master_ip, master_port, mtu, latency, 0, 0) {} virtual ~netjackaudio_control() {} - - bool is_connexion_active() + + bool isConnexionActive() { return jack_net_slave_is_active(fNet); } @@ -274,10 +276,10 @@ class netjackaudio_control : public netjackaudio, public ControlUI { virtual bool init(const char* name, dsp* dsp) { dsp->buildUserInterface(this); - return init_aux(name, dsp, dsp->getNumInputs() + 1, dsp->getNumOutputs() + 1, 0, 0); // One more audio port for control + return initAux(name, dsp, dsp->getNumInputs() + 1, dsp->getNumOutputs() + 1, fMIDIInputs, fMIDIOutputs); // One more audio port for control } - virtual int restart_cb() + virtual int restartCb() { return -1; } @@ -296,43 +298,37 @@ class netjackaudio_midicontrol : public netjackaudio, public ControlUI, public j { AVOIDDENORMALS; - float** inputs_tmp = (float**)alloca(fDSP->getNumInputs()*sizeof(float*)); - float** outputs_tmp = (float**)alloca(fDSP->getNumOutputs()*sizeof(float*)); - - for (int i = 0; i < fDSP->getNumInputs(); i++) { - inputs_tmp[i] = audio_inputs[i]; - } - - for (int i = 0; i < fDSP->getNumOutputs(); i++) { - outputs_tmp[i] = audio_outputs[i]; - } - // Control buffer always use buffer_size, even if uncomplete data buffer (count < buffer_size) is received - decode_midi_control(midi_inputs[0], fResult.buffer_size); + decodeMidiControl(midi_inputs[0], fResult.buffer_size); // Decode MIDI messages processMidiInBuffer(midi_inputs[1]); // "count" may be less than buffer_size - fDSP->compute(count, inputs_tmp, outputs_tmp); + fDSP->compute(count, audio_inputs, audio_outputs); // Control buffer always use buffer_size, even if uncomplete data buffer (count < buffer_size) is received - encode_midi_control(midi_outputs[0], fResult.buffer_size); + encodeMidiControl(midi_outputs[0], fResult.buffer_size); // Encode MIDI messages processMidiOutBuffer(midi_outputs[1], true); } public: - - netjackaudio_midicontrol(int net_format, const std::string& master_ip, int master_port, int mtu, int latency) - :netjackaudio(net_format, master_ip, master_port, mtu, latency) + + // One MIDI port for control, and one MIDI port for messages in both directions + netjackaudio_midicontrol(int net_format, + const std::string& master_ip, + int master_port, + int mtu, + int latency) + :netjackaudio(net_format, master_ip, master_port, mtu, latency, 2, 2) {} virtual ~netjackaudio_midicontrol() {} - - bool is_connexion_active() + + bool isConnexionActive() { return jack_net_slave_is_active(fNet); } @@ -340,11 +336,10 @@ class netjackaudio_midicontrol : public netjackaudio, public ControlUI, public j virtual bool init(const char* name, dsp* dsp) { dsp->buildUserInterface(this); - // One MIDI channel for control, and one MIDI channel for messages in both direction - return init_aux(name, dsp, dsp->getNumInputs(), dsp->getNumOutputs(), 2, 2); + return initAux(name, dsp, dsp->getNumInputs(), dsp->getNumOutputs(), fMIDIInputs, fMIDIOutputs); } - virtual int restart_cb() + virtual int restartCb() { return -1; } diff --git a/source/DEINDUGens/include/faust/audio/ofaudio-dsp.h b/source/DEINDUGens/include/faust/audio/ofaudio-dsp.h index 31bf60b4af..cb991fd28a 100644 --- a/source/DEINDUGens/include/faust/audio/ofaudio-dsp.h +++ b/source/DEINDUGens/include/faust/audio/ofaudio-dsp.h @@ -1,31 +1,25 @@ - /************************************************************************ - FAUST Architecture File - Copyright (C) 2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . -/****************************************************************************** - Using OpenFramework -*******************************************************************************/ + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __openframework__ #define __openframework__ @@ -129,22 +123,20 @@ class ofaudio : public audio, public ofBaseSoundInput, public ofBaseSoundOutput fStream.stop(); } - void shutdown(shutdown_callback cb, void* arg) {} - - int get_buffer_size() + int getBufferSize() { return fStream.getBufferSize(); } - int get_sample_rate() + int getSampleRate() { return fStream.getSampleRate(); } - int get_num_inputs() { return fStream.getNumInputChannels(); } - int get_num_outputs() { return fStream.getNumOutputChannels(); } + int getNumInputs() { return fStream.getNumInputChannels(); } + int getNumOutputs() { return fStream.getNumOutputChannels(); } - float get_cpu_load() { return 0.f; } + float getCPULoad() { return 0.f; } }; #endif diff --git a/source/DEINDUGens/include/faust/audio/opensles-android-dsp.h b/source/DEINDUGens/include/faust/audio/opensles-android-dsp.h index fce52d0374..90d89a16ce 100644 --- a/source/DEINDUGens/include/faust/audio/opensles-android-dsp.h +++ b/source/DEINDUGens/include/faust/audio/opensles-android-dsp.h @@ -1,36 +1,24 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2014 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ /* diff --git a/source/DEINDUGens/include/faust/audio/osc-dsp.h b/source/DEINDUGens/include/faust/audio/osc-dsp.h index 75d155e890..451cd399f3 100644 --- a/source/DEINDUGens/include/faust/audio/osc-dsp.h +++ b/source/DEINDUGens/include/faust/audio/osc-dsp.h @@ -1,29 +1,26 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __osc_dsp__ #define __osc_dsp__ @@ -44,72 +41,79 @@ #define kMaxBuffer 4096 class oscdsp : public audio, public oscfaust::OSCIO { - dsp* fDsp; - float ** fInBuffers, **fOutBuffers; - - public: - oscdsp(const char * dst, int argc, char *argv[]) : OSCIO(dst), fDsp(0), fInBuffers(0), fOutBuffers(0) - { - for (int i = 1; i < argc-1; i++) { - if (!strcmp(argv[i], "-iodst")) setDest (argv[i+1]); - } - } - virtual ~oscdsp() - { - stop(); - for (int i = 0; i < numInputs(); i++) { - delete [] fInBuffers[i]; - } - for (int i = 0; i < numOutputs(); i++) { - delete [] fOutBuffers[i]; + + private: + + dsp* fDsp; + float **fInBuffers, **fOutBuffers; + + public: + + oscdsp(const char * dst, int argc, char *argv[]) : OSCIO(dst), fDsp(0), fInBuffers(0), fOutBuffers(0) + { + for (int i = 1; i < argc-1; i++) { + if (!strcmp(argv[i], "-iodst")) setDest (argv[i+1]); + } } - delete [] fInBuffers; - delete [] fOutBuffers; - } - - virtual bool init(const char*name, dsp* DSP) - { - fDsp = DSP; - fDsp->init(44100); - fInBuffers = new float*[numInputs()]; - fOutBuffers = new float*[numOutputs()]; - for (int i = 0; i < numInputs(); i++) { - fInBuffers[i] = new float[kMaxBuffer]; + + virtual ~oscdsp() + { + stop(); + for (int i = 0; i < numInputs(); i++) { + delete [] fInBuffers[i]; + } + for (int i = 0; i < numOutputs(); i++) { + delete [] fOutBuffers[i]; + } + delete [] fInBuffers; + delete [] fOutBuffers; } - for (int i = 0; i < numOutputs(); i++) { - fOutBuffers [i] = new float[kMaxBuffer]; + + virtual bool init(const char* name, dsp* DSP) + { + fDsp = DSP; + fDsp->init(44100); + fInBuffers = new float*[numInputs()]; + fOutBuffers = new float*[numOutputs()]; + for (int i = 0; i < numInputs(); i++) { + fInBuffers[i] = new float[kMaxBuffer]; + } + for (int i = 0; i < numOutputs(); i++) { + fOutBuffers [i] = new float[kMaxBuffer]; + } + return true; } - return true; - } - virtual bool start() { return true; } - virtual void stop() {} + virtual bool start() { return true; } + virtual void stop() {} + + void compute(int nframes) + { + fDsp->compute(nframes, fInBuffers, fOutBuffers); + for (int i= 0; i < numOutputs(); i++) { + send(nframes, fOutBuffers [i], i); + } + } - void compute(int nframes) - { - fDsp->compute(nframes, fInBuffers, fOutBuffers); - for (int i= 0; i < numOutputs(); i++) { - send(nframes, fOutBuffers [i], i); + void receive(int nvalues, float* val) + { + int inChans = numInputs(); + if (!inChans) { + compute(nvalues); + return; + } + + for (int i=0; i < nvalues; i++) { + int c = i % inChans; + int frame = i / inChans; + fInBuffers[c][frame] = val[i]; + } + compute (nvalues / inChans); } - } - - void receive(int nvalues, float* val) - { - int inChans = numInputs(); - if (!inChans) { - compute(nvalues); - return; - } - - for (int i=0; i < nvalues; i++) { - int c = i % inChans; - int frame = i / inChans; - fInBuffers[c][frame] = val[i]; - } - compute (nvalues / inChans); - } - int numOutputs() const { return fDsp ? fDsp->getNumOutputs() : 0; } - int numInputs() const { return fDsp ? fDsp->getNumInputs() : 0; } + + int getNumInputs() const { return fDsp ? fDsp->getNumInputs() : 0; } + int getNumOutputs() const { return fDsp ? fDsp->getNumOutputs() : 0; } + }; #endif diff --git a/source/DEINDUGens/include/faust/audio/portaudio-dsp.h b/source/DEINDUGens/include/faust/audio/portaudio-dsp.h index 5b0a60ba35..d1cd63d225 100644 --- a/source/DEINDUGens/include/faust/audio/portaudio-dsp.h +++ b/source/DEINDUGens/include/faust/audio/portaudio-dsp.h @@ -1,16 +1,6 @@ -/************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. - *************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - /************************************************************************ FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- This Architecture section is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -29,9 +19,6 @@ that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - - - ************************************************************************ ************************************************************************/ #ifndef __portaudio_dsp__ @@ -47,8 +34,8 @@ static bool pa_error(int err) { - if (err != paNoError) { - printf("PortAudio error: %s\n", Pa_GetErrorText(err)); + if (err != paNoError) { + printf("PortAudio error: %s\n", Pa_GetErrorText(err)); return true; } else { return false; @@ -122,7 +109,7 @@ class portaudio : public audio { virtual bool init(const char* name, dsp* DSP) { if (init(name, DSP->getNumInputs(), DSP->getNumOutputs())) { - set_dsp(DSP); + setDsp(DSP); return true; } else { return false; @@ -192,7 +179,7 @@ class portaudio : public audio { return true; } - void set_dsp(dsp* DSP) + void setDsp(dsp* DSP) { fDsp = DSP; if (fDsp->getNumInputs() > fDevNumInChans || fDsp->getNumOutputs() > fDevNumOutChans) { @@ -221,22 +208,22 @@ class portaudio : public audio { } } - virtual int get_buffer_size() + virtual int getBufferSize() { return fBufferSize; } - virtual int get_sample_rate() + virtual int getSampleRate() { return fSampleRate; } - virtual int get_num_inputs() + virtual int getNumInputs() { return fDevNumInChans; } - virtual int get_num_outputs() + virtual int getNumOutputs() { return fDevNumOutChans; } diff --git a/source/DEINDUGens/include/faust/audio/rtaudio-dsp.h b/source/DEINDUGens/include/faust/audio/rtaudio-dsp.h index 3d4e846537..738b962545 100644 --- a/source/DEINDUGens/include/faust/audio/rtaudio-dsp.h +++ b/source/DEINDUGens/include/faust/audio/rtaudio-dsp.h @@ -1,16 +1,6 @@ -/************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. - *************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - /************************************************************************ FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- This Architecture section is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -29,9 +19,6 @@ that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - - - ************************************************************************ ************************************************************************/ #ifndef __rtaudio_dsp__ @@ -114,7 +101,7 @@ class rtaudio : public audio { virtual bool init(const char* name, dsp* DSP) { if (init(name, DSP->getNumInputs(), DSP->getNumOutputs())) { - set_dsp(DSP); + setDsp(DSP); return true; } else { return false; @@ -157,7 +144,7 @@ class rtaudio : public audio { return true; } - void set_dsp(dsp* DSP) + void setDsp(dsp* DSP) { fDsp = DSP; @@ -191,22 +178,22 @@ class rtaudio : public audio { } } - virtual int get_buffer_size() + virtual int getBufferSize() { return fBufferSize; } - virtual int get_sample_rate() + virtual int getSampleRate() { return fSampleRate; } - virtual int get_num_inputs() + virtual int getNumInputs() { return fDevNumInChans; } - virtual int get_num_outputs() + virtual int getNumOutputs() { return fDevNumOutChans; } diff --git a/source/DEINDUGens/include/faust/audio/samAudio.h b/source/DEINDUGens/include/faust/audio/samAudio.h new file mode 100644 index 0000000000..c9436b728c --- /dev/null +++ b/source/DEINDUGens/include/faust/audio/samAudio.h @@ -0,0 +1,138 @@ +/************************************************************************ + SHARC Audio Module Faust Architecture File + Copyright (c) 2018 Analog Devices, Inc. All rights reserved. + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __sam_audio__ +#define __sam_audio__ + +#include +#include +#include +#include +#include + +#include "faust/dsp/dsp.h" +#include "faust/audio/audio.h" + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class samAudio : public audio { + + private: + + dsp* fDSP; + + int iSampleRate; + int iBufferSize; + int iNumInputs; + int iNumOutputs; + + // Faust convention for input/output arrays + FAUSTFLOAT *inputsArray[8]; + FAUSTFLOAT *outputsArray[8]; + + public: + + samAudio(int sampleRate, int bufferSize, int numInputs, int numOutputs) + { + iSampleRate = sampleRate; + iBufferSize = bufferSize; + iNumInputs = numInputs; + iNumOutputs = numOutputs; + } + + virtual ~samAudio() + { + // nothing for now + } + + // the sam hardware DSP supports up to 8 channels (4 stereo pairs). + virtual void setDSP_ChannelBuffers(FAUSTFLOAT *AudioChannelA_0_Left, + FAUSTFLOAT *AudioChannelA_0_Right, + FAUSTFLOAT *AudioChannelA_1_Left, + FAUSTFLOAT *AudioChannelA_1_Right, + FAUSTFLOAT *AudioChannelA_2_Left, + FAUSTFLOAT *AudioChannelA_2_Right, + FAUSTFLOAT *AudioChannelA_3_Left, + FAUSTFLOAT *AudioChannelA_3_Right, + FAUSTFLOAT *AudioChannelB_0_Left, + FAUSTFLOAT *AudioChannelB_0_Right, + FAUSTFLOAT *AudioChannelB_1_Left, + FAUSTFLOAT *AudioChannelB_1_Right, + FAUSTFLOAT *AudioChannelB_2_Left, + FAUSTFLOAT *AudioChannelB_2_Right, + FAUSTFLOAT *AudioChannelB_3_Left, + FAUSTFLOAT *AudioChannelB_3_Right) + { + // set the pointers, generalized for the sam's 8 channels. + inputsArray[0] = AudioChannelB_0_Left; + inputsArray[1] = AudioChannelB_0_Right; + inputsArray[2] = AudioChannelB_1_Left; + inputsArray[3] = AudioChannelB_1_Right; + inputsArray[4] = AudioChannelB_2_Left; + inputsArray[5] = AudioChannelB_2_Right; + inputsArray[6] = AudioChannelB_3_Left; + inputsArray[7] = AudioChannelB_3_Right; + + outputsArray[0] = AudioChannelA_0_Left; + outputsArray[1] = AudioChannelA_0_Right; + outputsArray[2] = AudioChannelA_1_Left; + outputsArray[3] = AudioChannelA_1_Right; + outputsArray[4] = AudioChannelA_2_Left; + outputsArray[5] = AudioChannelA_2_Right; + outputsArray[6] = AudioChannelA_3_Left; + outputsArray[7] = AudioChannelA_3_Right; + } + + virtual bool init(const char* name, dsp* dsp) + { + fDSP = dsp; // this should be fFinalDSP + fDSP->init(iSampleRate); // this sets the sample rate + return true; + } + + virtual bool start() + { + // Nothing for now. Will want to find the sam way to start. + return true; + } + + virtual void stop() + { + // nothing for now. Will want to find the sam way to stop. + } + + void processAudioCallback() + { + // Faust compute function + fDSP->compute(iBufferSize, inputsArray, outputsArray); + } + + virtual int getBufferSize() { return iBufferSize; } + virtual int getSampleRate() { return iSampleRate; } + virtual int getNumInputs() { return iNumInputs; } + virtual int getNumOutputs() { return iNumOutputs; } +}; + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/dsp-adapter.h b/source/DEINDUGens/include/faust/dsp/dsp-adapter.h index 1e25b37dd7..f966b7c0f0 100644 --- a/source/DEINDUGens/include/faust/dsp/dsp-adapter.h +++ b/source/DEINDUGens/include/faust/dsp/dsp-adapter.h @@ -1,32 +1,31 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __dsp_adapter__ #define __dsp_adapter__ #include +#include #include "faust/dsp/dsp.h" // Adapts a DSP for a different number of inputs/outputs @@ -101,19 +100,19 @@ class dsp_adapter : public decorator_dsp { // Adapts a DSP for a different sample size -template +template class dsp_sample_adapter : public decorator_dsp { protected: - SAMPLE_TYPE** fAdaptedInputs; - SAMPLE_TYPE** fAdaptedOutputs; + TYPE_INT** fAdaptedInputs; + TYPE_INT** fAdaptedOutputs; void adaptInputBuffers(int count, FAUSTFLOAT** inputs) { for (int chan = 0; chan < fDSP->getNumInputs(); chan++) { for (int frame = 0; frame < count; frame++) { - fAdaptedInputs[chan][frame] = SAMPLE_TYPE(inputs[chan][frame]); + fAdaptedInputs[chan][frame] = TYPE_INT(reinterpret_cast(inputs)[chan][frame]); } } } @@ -122,7 +121,7 @@ class dsp_sample_adapter : public decorator_dsp { { for (int chan = 0; chan < fDSP->getNumOutputs(); chan++) { for (int frame = 0; frame < count; frame++) { - outputs[chan][frame] = SAMPLE_TYPE(fAdaptedOutputs[chan][frame]); + reinterpret_cast(outputs)[chan][frame] = TYPE_EXT(fAdaptedOutputs[chan][frame]); } } } @@ -131,14 +130,14 @@ class dsp_sample_adapter : public decorator_dsp { dsp_sample_adapter(dsp* dsp):decorator_dsp(dsp) { - fAdaptedInputs = new SAMPLE_TYPE*[dsp->getNumInputs()]; + fAdaptedInputs = new TYPE_INT*[dsp->getNumInputs()]; for (int i = 0; i < dsp->getNumInputs(); i++) { - fAdaptedInputs[i] = new SAMPLE_TYPE[4096]; + fAdaptedInputs[i] = new TYPE_INT[4096]; } - fAdaptedOutputs = new SAMPLE_TYPE*[dsp->getNumOutputs()]; + fAdaptedOutputs = new TYPE_INT*[dsp->getNumOutputs()]; for (int i = 0; i < dsp->getNumOutputs(); i++) { - fAdaptedOutputs[i] = new SAMPLE_TYPE[4096]; + fAdaptedOutputs[i] = new TYPE_INT[4096]; } } @@ -158,7 +157,7 @@ class dsp_sample_adapter : public decorator_dsp { virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { adaptInputBuffers(count, inputs); - // DSP base class uses FAUSTFLOAT** type, so reinterpret_cast has to be used even if the real DSP uses SAMPLE_TYPE + // DSP base class uses FAUSTFLOAT** type, so reinterpret_cast has to be used even if the real DSP uses TYPE_INT fDSP->compute(count, reinterpret_cast(fAdaptedInputs), reinterpret_cast(fAdaptedOutputs)); adaptOutputsBuffers(count, outputs); } @@ -166,7 +165,7 @@ class dsp_sample_adapter : public decorator_dsp { virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { adaptInputBuffers(count, inputs); - // DSP base class uses FAUSTFLOAT** type, so reinterpret_cast has to be used even if the real DSP uses SAMPLE_TYPE + // DSP base class uses FAUSTFLOAT** type, so reinterpret_cast has to be used even if the real DSP uses TYPE_INT fDSP->compute(date_usec, count, reinterpret_cast(fAdaptedInputs), reinterpret_cast(fAdaptedOutputs)); adaptOutputsBuffers(count, outputs); } diff --git a/source/DEINDUGens/include/faust/dsp/dsp-bench.h b/source/DEINDUGens/include/faust/dsp/dsp-bench.h index d2bb28bc72..a87fbf9122 100644 --- a/source/DEINDUGens/include/faust/dsp/dsp-bench.h +++ b/source/DEINDUGens/include/faust/dsp/dsp-bench.h @@ -1,26 +1,25 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . -************************************************************************/ + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp_bench__ #define __dsp_bench__ @@ -33,6 +32,8 @@ #include #include #include +#include +#include #include "faust/dsp/dsp.h" @@ -53,6 +54,20 @@ #include #endif +#define BENCH_SAMPLE_RATE 44100.0 +#define NV 4096 // number of vectors in BIG buffer (should exceed cache) + +template +void FAUSTBENCH_LOG(VAL_TYPE val) +{ + const char* log = getenv("FAUSTBENCH_LOG"); + if (log && (strcasecmp(log, "on") == 0)) { + std::ofstream gFaustbenchLog; + gFaustbenchLog.open("Faustbench.csv", std::ofstream::app); + gFaustbenchLog << val << std::endl; + } +} + /* A class to do do timing measurements */ @@ -66,14 +81,14 @@ class time_bench { #endif int fMeasure; - int fMeasureCount; + int fCount; int fSkip; // These values are used to determine the number of clocks in a second uint64 fFirstRDTSC; uint64 fLastRDTSC; - // These tables contains the last fMeasureCount in clocks + // These tables contains the last fCount in clocks uint64* fStarts; uint64* fStops; @@ -83,7 +98,7 @@ class time_bench { /** * Returns the number of clock cycles elapsed since the last reset of the processor */ - inline uint64 rdtsc(void) + uint64 rdtsc(void) { #ifdef TARGET_OS_IPHONE return (uint64)(mach_absolute_time() * (double)fTimeInfo.numer / (double)fTimeInfo.denom); @@ -157,12 +172,12 @@ class time_bench { time_bench(int count, int skip) { fSkip = skip; - fMeasureCount = count; + fCount = count; fMeasure = 0; fFirstRDTSC = 0; fLastRDTSC = 0; - fStarts = new uint64[fMeasureCount]; - fStops = new uint64[fMeasureCount]; + fStarts = new uint64[fCount]; + fStops = new uint64[fCount]; #ifdef TARGET_OS_IPHONE mach_timebase_info(&fTimeInfo); #endif @@ -174,9 +189,9 @@ class time_bench { delete [] fStops; } - void startMeasure() { fStarts[fMeasure % fMeasureCount] = rdtsc(); } + void startMeasure() { fStarts[fMeasure % fCount] = rdtsc(); } - void stopMeasure() { fStops[fMeasure % fMeasureCount] = rdtsc(); fMeasure++; } + void stopMeasure() { fStops[fMeasure % fCount] = rdtsc(); fMeasure++; } void openMeasure() { @@ -203,12 +218,10 @@ class time_bench { */ double getStats(int bsize, int ichans, int ochans) { - //std::cout << "getStats fMeasure = " << fMeasure << " fMeasureCount = " << fMeasureCount << std::endl; - - assert(fMeasure > fMeasureCount); - std::vector V(fMeasureCount); + assert(fMeasure > fCount); + std::vector V(fCount); - for (int i = 0; i < fMeasureCount; i++) { + for (int i = 0; i < fCount; i++) { V[i] = fStops[i] - fStarts[i]; } @@ -220,14 +233,14 @@ class time_bench { } /** - * Print the median value (in Megabytes/second) of fMeasureCount throughputs measurements. + * Print the median value (in Megabytes/second) of fCount throughputs measurements. */ void printStats(const char* applname, int bsize, int ichans, int ochans) { - assert(fMeasure > fMeasureCount); - std::vector V(fMeasureCount); + assert(fMeasure > fCount); + std::vector V(fCount); - for (int i = 0; i < fMeasureCount; i++) { + for (int i = 0; i < fCount; i++) { V[i] = fStops[i] - fStarts[i]; } @@ -235,9 +248,9 @@ class time_bench { // Mean of 10 best values (gives relatively stable results) uint64 meaval00 = meanValue(V.begin(), V.begin()+ 5); - uint64 meaval25 = meanValue(V.begin() + fMeasureCount / 4 - 2, V.begin()+fMeasureCount / 4 + 3); - uint64 meaval50 = meanValue(V.begin() + fMeasureCount / 2 - 2, V.begin()+fMeasureCount / 2 + 3); - uint64 meaval75 = meanValue(V.begin() + 3 * fMeasureCount / 4 - 2, V.begin() + 3 * fMeasureCount / 4 + 3); + uint64 meaval25 = meanValue(V.begin() + fCount / 4 - 2, V.begin()+fCount / 4 + 3); + uint64 meaval50 = meanValue(V.begin() + fCount / 2 - 2, V.begin()+fCount / 2 + 3); + uint64 meaval75 = meanValue(V.begin() + 3 * fCount / 4 - 2, V.begin() + 3 * fCount / 4 + 3); uint64 meaval100 = meanValue(V.end() - 5, V.end()); // Printing @@ -250,7 +263,12 @@ class time_bench { << std::endl; } - bool isRunning() { return (fMeasure <= (fMeasureCount + fSkip)); } + bool isRunning() { return (fMeasure <= (fCount + fSkip)); } + + int getCount() + { + return fMeasure; + } }; @@ -263,24 +281,70 @@ class measure_dsp : public decorator_dsp { protected: FAUSTFLOAT** fInputs; + FAUSTFLOAT** fAllInputs; FAUSTFLOAT** fOutputs; + FAUSTFLOAT** fAllOutputs; time_bench* fBench; int fBufferSize; + int fInputIndex; + int fOutputIndex; + int fCount; void init() { + fDSP->init(BENCH_SAMPLE_RATE); + + fInputIndex = 0; + fOutputIndex = 0; + fInputs = new FAUSTFLOAT*[fDSP->getNumInputs()]; + fAllInputs = new FAUSTFLOAT*[fDSP->getNumInputs()]; for (int i = 0; i < fDSP->getNumInputs(); i++) { - fInputs[i] = new FAUSTFLOAT[fBufferSize]; - memset(fInputs[i], 0, sizeof(FAUSTFLOAT) * fBufferSize); + fAllInputs[i] = new FAUSTFLOAT[fBufferSize * NV]; + fInputs[i] = fAllInputs[i]; + // Write noise in inputs (to avoid 'speedup' effect due to null values) + int R0_0 = 0; + for (int j = 0; j < fBufferSize * NV; j++) { + int R0temp0 = (12345 + (1103515245 * R0_0)); + fAllInputs[i][j] = FAUSTFLOAT(4.656613e-10f * R0temp0); + R0_0 = R0temp0; + } } + fOutputs = new FAUSTFLOAT*[fDSP->getNumOutputs()]; + fAllOutputs = new FAUSTFLOAT*[fDSP->getNumOutputs()]; for (int i = 0; i < fDSP->getNumOutputs(); i++) { - fOutputs[i] = new FAUSTFLOAT[fBufferSize]; - memset(fOutputs[i], 0, sizeof(FAUSTFLOAT) * fBufferSize); + fAllOutputs[i] = new FAUSTFLOAT[fBufferSize * NV]; + fOutputs[i] = fAllOutputs[i]; + // Write zero in outputs + memset(fAllOutputs[i], 0, sizeof(FAUSTFLOAT) * fBufferSize * NV); } } + bool setRealtimePriority() + { + struct passwd* pw; + struct sched_param param; + int policy; + uid_t uid = getuid(); + pw = getpwnam("root"); + setuid(pw->pw_uid); + + int err = pthread_getschedparam(pthread_self(), &policy, ¶m); + if (err != 0) { + std::cerr << "setRealtimePriority : pthread_getschedparam res = %d" << err << std::endl; + } + policy = SCHED_RR; + param.sched_priority = 80; + err = pthread_setschedparam(pthread_self(), policy, ¶m); + if (err != 0) { + std::cerr << "setRealtimePriority : pthread_setschedparam res = %d" << err << std::endl; + } + + setuid(uid); + return (err != -1); + } + public: /** @@ -289,43 +353,56 @@ class measure_dsp : public decorator_dsp { * @param dsp - the dsp to be measured. * @param buffer_size - the buffer size used when calling 'computeAll' * @param count - the number of cycles using in 'computeAll' - * @param skip - ?? * */ - measure_dsp(dsp* dsp, int buffer_size, int count, int skip) - :decorator_dsp(dsp), fBufferSize(buffer_size) + measure_dsp(dsp* dsp, int buffer_size, int count, bool trace = true) + :decorator_dsp(dsp), fBufferSize(buffer_size), fCount(count) { init(); - fBench = new time_bench(count, 10); + fBench = new time_bench(fCount, 10); } - measure_dsp(dsp* dsp, int buffer_size, double duration_in_sec) + /** + * Constructor. + * + * @param dsp - the dsp to be measured. + * @param buffer_size - the buffer size used when calling 'computeAll' + * @param duration_in_sec - the wanted durection used in 'computeAll' + * + */ + measure_dsp(dsp* dsp, int buffer_size, double duration_in_sec, bool trace = true) :decorator_dsp(dsp), fBufferSize(buffer_size) { init(); // Creates a first time_bench object to estimate the proper 'count' number of measure to do later - fBench = new time_bench(500, 10); + fBench = new time_bench(1000, 10); measure(); double duration = fBench->measureDurationUsec(); - int cout = int (500 * (duration_in_sec * 1e6 / duration)); + if (trace) std::cout << "duration " << (duration / 1e6) << std::endl; + fCount = int(1000 * (duration_in_sec * 1e6 / duration)); delete fBench; // Then allocate final time_bench object with proper 'count' parameter - fBench = new time_bench(cout, 10); + fBench = new time_bench(fCount, 10); } virtual ~measure_dsp() { for (int i = 0; i < fDSP->getNumInputs(); i++) { - delete [] fInputs[i]; + delete [] fAllInputs[i]; } delete [] fInputs; + delete [] fAllInputs; + for (int i = 0; i < fDSP->getNumOutputs(); i++) { - delete [] fOutputs[i]; + delete [] fAllOutputs[i]; } - delete[] fOutputs; + delete [] fOutputs; + delete [] fAllOutputs; + delete fBench; + // DSP is deallocated by the decorator_dsp class. } /** @@ -333,6 +410,7 @@ class measure_dsp : public decorator_dsp { */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + AVOIDDENORMALS; fBench->startMeasure(); fDSP->compute(count, inputs, outputs); fBench->stopMeasure(); @@ -349,6 +427,16 @@ class measure_dsp : public decorator_dsp { void computeAll() { do { + for (int i = 0; i < fDSP->getNumInputs(); i++) { + FAUSTFLOAT* allinputs = fAllInputs[i]; + fInputs[i] = &allinputs[fInputIndex * fBufferSize]; + fInputIndex = (1 + fInputIndex) % NV; + } + for (int i = 0; i < fDSP->getNumOutputs(); i++) { + FAUSTFLOAT* alloutputs = fAllOutputs[i]; + fOutputs[i] = &alloutputs[fOutputIndex * fBufferSize]; + fOutputIndex = (1 + fOutputIndex) % NV; + } compute(0, fBufferSize, fInputs, fOutputs); } while (fBench->isRunning()); } @@ -371,6 +459,8 @@ class measure_dsp : public decorator_dsp { void measure() { + setRealtimePriority(); + openMeasure(); computeAll(); closeMeasure(); @@ -385,7 +475,7 @@ class measure_dsp : public decorator_dsp { } /** - * Print the median value (in Megabytes/second) of fMeasureCount throughputs measurements + * Print the median value (in Megabytes/second) of fCount throughputs measurements */ void printStats(const char* applname) { @@ -394,6 +484,13 @@ class measure_dsp : public decorator_dsp { bool isRunning() { return fBench->isRunning(); } + float getCPULoad() + { + return (fBench->measureDurationUsec() / 1000.0 * BENCH_SAMPLE_RATE) / (fBench->getCount() * fBufferSize * 1000.0); + } + + int getCount() { return fCount; } + }; #endif diff --git a/source/DEINDUGens/include/faust/dsp/dsp-checker.h b/source/DEINDUGens/include/faust/dsp/dsp-checker.h new file mode 100644 index 0000000000..94814f5799 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/dsp-checker.h @@ -0,0 +1,90 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp_checker__ +#define __dsp_checker__ + +#include +#include + +#include "faust/dsp/dsp.h" + +class dsp_checker : public decorator_dsp +{ + + private: + + long long fFP_SUBNORMAL; + long long fFP_INFINITE; + long long fFP_NAN; + + void getStats(int cout, FAUSTFLOAT** outputs) + { + for (int chan = 0; chan < fDSP->getNumOutputs(); chan++) { + for (int frame = 0; frame < cout; frame++) { + FAUSTFLOAT value = outputs[chan][frame]; + if (std::isnan(value)) { + fFP_NAN++; + } else if (std::isinf(value)) { + fFP_INFINITE++; + } else if (std::fpclassify(val) == FP_SUBNORMAL) { + fFP_SUBNORMAL++; + } + } + } + } + + public: + + dsp_checker(dsp* dsp):decorator_dsp(dsp) + { + fFP_SUBNORMAL = 0; + fFP_INFINITE = 0; + fFP_NAN = 0; + } + + virtual ~dsp_checker() {} + + void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + fDSP->compute(count, inputs, outputs); + getStats(count, outputs); + } + void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + fDSP->compute(date_usec, count, inputs, outputs); + getStats(count, outputs); + } + + void printStats() + { + std::cout << "-------------------------------"<< std::endl; + std::cout << "FP_SUBNORMAL: " << fFP_SUBNORMAL << std::endl; + std::cout << "FP_INFINITE: " << fFP_INFINITE << std::endl; + std::cout << "FP_NAN: " << fFP_NAN << std::endl; + std::cout << "-------------------------------"<< std::endl; + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/dsp-combiner.h b/source/DEINDUGens/include/faust/dsp/dsp-combiner.h index 15d1dee7cb..5cfbb3cd4c 100644 --- a/source/DEINDUGens/include/faust/dsp/dsp-combiner.h +++ b/source/DEINDUGens/include/faust/dsp/dsp-combiner.h @@ -1,83 +1,49 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2019 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __dsp_combiner__ #define __dsp_combiner__ #include +#include #include +#include + #include "faust/dsp/dsp.h" +#include "faust/gui/UI.h" -// Combine two DSP in sequence +// Base class and common code for binary combiners -class dsp_sequencer : public dsp { +class dsp_binary_combiner : public dsp { - private: + protected: dsp* fDSP1; dsp* fDSP2; - FAUSTFLOAT** fSeqBuffer; - - public: - - dsp_sequencer(dsp* dsp1, dsp* dsp2, int buffer_size = 4096) - :fDSP1(dsp1), fDSP2(dsp2) - { - assert(fDSP1->getNumOutputs() == fDSP2->getNumInputs()); - fSeqBuffer = new FAUSTFLOAT*[fDSP1->getNumOutputs()]; - for (int i = 0; i < fDSP1->getNumOutputs(); i++) { - fSeqBuffer[i] = new FAUSTFLOAT[buffer_size]; - } - } - - virtual ~dsp_sequencer() - { - for (int i = 0; i < fDSP1->getNumOutputs(); i++) { - delete [] fSeqBuffer[i]; - } - - delete [] fSeqBuffer; - delete fDSP1; - delete fDSP2; - } - - virtual int getNumInputs() { return fDSP1->getNumInputs(); } - virtual int getNumOutputs() { return fDSP2->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) + void buildUserInterfaceAux(UI* ui_interface, const char* name) { - ui_interface->openTabBox("Sequencer"); + ui_interface->openTabBox(name); ui_interface->openVerticalBox("DSP1"); fDSP1->buildUserInterface(ui_interface); ui_interface->closeBox(); @@ -86,46 +52,70 @@ class dsp_sequencer : public dsp { ui_interface->closeBox(); ui_interface->closeBox(); } + + FAUSTFLOAT** allocateChannels(int num, int buffer_size) + { + FAUSTFLOAT** channels = new FAUSTFLOAT*[num]; + for (int chan = 0; chan < num; chan++) { + channels[chan] = new FAUSTFLOAT[buffer_size]; + memset(channels[chan], 0, sizeof(FAUSTFLOAT) * buffer_size); + } + return channels; + } + + void deleteChannels(FAUSTFLOAT** channels, int num) + { + for (int chan = 0; chan < num; chan++) { + delete [] channels[chan]; + } + delete [] channels; + } + + public: + + dsp_binary_combiner(dsp* dsp1, dsp* dsp2):fDSP1(dsp1), fDSP2(dsp2) + {} + virtual ~dsp_binary_combiner() + { + delete fDSP1; + delete fDSP2; + } + virtual int getSampleRate() { return fDSP1->getSampleRate(); } - + virtual void init(int samplingRate) { fDSP1->init(samplingRate); fDSP2->init(samplingRate); } - + virtual void instanceInit(int samplingRate) { fDSP1->instanceInit(samplingRate); fDSP2->instanceInit(samplingRate); } - + virtual void instanceConstants(int samplingRate) { fDSP1->instanceConstants(samplingRate); fDSP2->instanceConstants(samplingRate); } - + virtual void instanceResetUserInterface() { fDSP1->instanceResetUserInterface(); fDSP2->instanceResetUserInterface(); } - + virtual void instanceClear() { fDSP1->instanceClear(); fDSP2->instanceClear(); } - - virtual dsp* clone() - { - return new dsp_sequencer(fDSP1->clone(), fDSP2->clone()); - } virtual void metadata(Meta* m) { @@ -133,33 +123,72 @@ class dsp_sequencer : public dsp { fDSP2->metadata(m); } +}; + +// Combine two 'compatible' DSP in sequence + +class dsp_sequencer : public dsp_binary_combiner { + + private: + + FAUSTFLOAT** fDSP1Outputs; + + public: + + dsp_sequencer(dsp* dsp1, dsp* dsp2, int buffer_size = 4096):dsp_binary_combiner(dsp1, dsp2) + { + fDSP1Outputs = allocateChannels(fDSP1->getNumOutputs(), buffer_size); + } + + virtual ~dsp_sequencer() + { + deleteChannels(fDSP1Outputs, fDSP1->getNumOutputs()); + } + + virtual int getNumInputs() { return fDSP1->getNumInputs(); } + virtual int getNumOutputs() { return fDSP2->getNumOutputs(); } + + virtual void buildUserInterface(UI* ui_interface) + { + buildUserInterfaceAux(ui_interface, "Sequencer"); + } + + virtual dsp* clone() + { + return new dsp_sequencer(fDSP1->clone(), fDSP2->clone()); + } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - fDSP1->compute(count, inputs, fSeqBuffer); - fDSP2->compute(count, fSeqBuffer, outputs); + fDSP1->compute(count, inputs, fDSP1Outputs); + fDSP2->compute(count, fDSP1Outputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + }; // Combine two DSP in parallel -class dsp_parallelizer : public dsp { +class dsp_parallelizer : public dsp_binary_combiner { private: - dsp* fDSP1; - dsp* fDSP2; - + FAUSTFLOAT** fDSP2Inputs; + FAUSTFLOAT** fDSP2Outputs; + public: - dsp_parallelizer(dsp* dsp1, dsp* dsp2, int buffer_size = 4096) - :fDSP1(dsp1), fDSP2(dsp2) - {} + dsp_parallelizer(dsp* dsp1, dsp* dsp2, int buffer_size = 4096):dsp_binary_combiner(dsp1, dsp2) + { + fDSP2Inputs = new FAUSTFLOAT*[fDSP2->getNumInputs()]; + fDSP2Outputs = new FAUSTFLOAT*[fDSP2->getNumOutputs()]; + } virtual ~dsp_parallelizer() { - delete fDSP1; - delete fDSP2; + delete [] fDSP2Inputs; + delete [] fDSP2Outputs; } virtual int getNumInputs() { return fDSP1->getNumInputs() + fDSP2->getNumInputs(); } @@ -167,80 +196,311 @@ class dsp_parallelizer : public dsp { virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openTabBox("Parallelizer"); - ui_interface->openVerticalBox("DSP1"); - fDSP1->buildUserInterface(ui_interface); - ui_interface->closeBox(); - ui_interface->openVerticalBox("DSP2"); - fDSP2->buildUserInterface(ui_interface); - ui_interface->closeBox(); - ui_interface->closeBox(); + buildUserInterfaceAux(ui_interface, "Parallelizer"); } - - virtual int getSampleRate() + + virtual dsp* clone() { - return fDSP1->getSampleRate(); + return new dsp_parallelizer(fDSP1->clone(), fDSP2->clone()); + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + fDSP1->compute(count, inputs, outputs); + + // Shift inputs/outputs channels for fDSP2 + for (int chan = 0; chan < fDSP2->getNumInputs(); chan++) { + fDSP2Inputs[chan] = inputs[fDSP1->getNumInputs() + chan]; + } + for (int chan = 0; chan < fDSP2->getNumOutputs(); chan++) { + fDSP2Outputs[chan] = outputs[fDSP1->getNumOutputs() + chan]; + } + + fDSP2->compute(count, fDSP2Inputs, fDSP2Outputs); } - virtual void init(int samplingRate) + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +// Combine two 'compatible' DSP in splitter + +class dsp_splitter : public dsp_binary_combiner { + + private: + + FAUSTFLOAT** fDSP1Outputs; + FAUSTFLOAT** fDSP2Inputs; + + public: + + dsp_splitter(dsp* dsp1, dsp* dsp2, int buffer_size = 4096):dsp_binary_combiner(dsp1, dsp2) { - fDSP1->init(samplingRate); - fDSP2->init(samplingRate); + fDSP1Outputs = allocateChannels(fDSP1->getNumOutputs(), buffer_size); + fDSP2Inputs = new FAUSTFLOAT*[fDSP2->getNumInputs()]; } - virtual void instanceInit(int samplingRate) + virtual ~dsp_splitter() { - fDSP1->instanceInit(samplingRate); - fDSP2->instanceInit(samplingRate); + deleteChannels(fDSP1Outputs, fDSP1->getNumOutputs()); + delete [] fDSP2Inputs; } - virtual void instanceConstants(int samplingRate) + virtual int getNumInputs() { return fDSP1->getNumInputs(); } + virtual int getNumOutputs() { return fDSP2->getNumOutputs(); } + + virtual void buildUserInterface(UI* ui_interface) { - fDSP1->instanceConstants(samplingRate); - fDSP2->instanceConstants(samplingRate); + buildUserInterfaceAux(ui_interface, "Splitter"); } - virtual void instanceResetUserInterface() + virtual dsp* clone() { - fDSP1->instanceResetUserInterface(); - fDSP2->instanceResetUserInterface(); + return new dsp_splitter(fDSP1->clone(), fDSP2->clone()); } - virtual void instanceClear() + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - fDSP1->instanceClear(); - fDSP2->instanceClear(); + fDSP1->compute(count, inputs, fDSP1Outputs); + + for (int chan = 0; chan < fDSP2->getNumInputs(); chan++) { + fDSP2Inputs[chan] = fDSP1Outputs[chan % fDSP1->getNumOutputs()]; + } + + fDSP2->compute(count, fDSP2Inputs, outputs); } +}; + +// Combine two 'compatible' DSP in merger + +class dsp_merger : public dsp_binary_combiner { + + private: + + FAUSTFLOAT** fDSP1Inputs; + FAUSTFLOAT** fDSP1Outputs; + FAUSTFLOAT** fDSP2Inputs; + + void mix(int count, FAUSTFLOAT* dst, FAUSTFLOAT* src) + { + for (int frame = 0; frame < count; frame++) { + dst[frame] += src[frame]; + } + } + + public: - virtual dsp* clone() + dsp_merger(dsp* dsp1, dsp* dsp2, int buffer_size = 4096):dsp_binary_combiner(dsp1, dsp2) { - return new dsp_parallelizer(fDSP1->clone(), fDSP2->clone()); + fDSP1Inputs = allocateChannels(fDSP1->getNumInputs(), buffer_size); + fDSP1Outputs = allocateChannels(fDSP1->getNumOutputs(), buffer_size); + fDSP2Inputs = new FAUSTFLOAT*[fDSP2->getNumInputs()]; } - - virtual void metadata(Meta* m) + + virtual ~dsp_merger() { - fDSP1->metadata(m); - fDSP2->metadata(m); + deleteChannels(fDSP1Inputs, fDSP1->getNumInputs()); + deleteChannels(fDSP1Outputs, fDSP1->getNumOutputs()); + delete [] fDSP2Inputs; } + virtual int getNumInputs() { return fDSP1->getNumInputs(); } + virtual int getNumOutputs() { return fDSP2->getNumOutputs(); } + + virtual void buildUserInterface(UI* ui_interface) + { + buildUserInterfaceAux(ui_interface, "Merge"); + } + + virtual dsp* clone() + { + return new dsp_merger(fDSP1->clone(), fDSP2->clone()); + } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - fDSP1->compute(count, inputs, outputs); + fDSP1->compute(count, fDSP1Inputs, fDSP1Outputs); - // Shift inputs/outputs channels for fDSP2 - FAUSTFLOAT** inputs_dsp2 = (FAUSTFLOAT**)alloca(fDSP2->getNumInputs() * sizeof(FAUSTFLOAT*)); - for (int chan = 0; chan < fDSP2->getNumInputs(); chan++) { - inputs_dsp2[chan] = inputs[fDSP1->getNumInputs() + chan]; - } + memset(fDSP2Inputs, 0, sizeof(FAUSTFLOAT*) * fDSP2->getNumInputs()); - FAUSTFLOAT** outputs_dsp2 = (FAUSTFLOAT**)alloca(fDSP2->getNumOutputs() * sizeof(FAUSTFLOAT*)); - for (int chan = 0; chan < fDSP2->getNumOutputs(); chan++) { - outputs_dsp2[chan] = inputs[fDSP1->getNumOutputs() + chan]; + for (int chan = 0; chan < fDSP1->getNumOutputs(); chan++) { + int mchan = chan % fDSP2->getNumInputs(); + if (fDSP2Inputs[mchan]) { + mix(count, fDSP2Inputs[mchan], fDSP1Outputs[chan]); + } else { + fDSP2Inputs[mchan] = fDSP1Outputs[chan]; + } } - fDSP2->compute(count, inputs_dsp2, outputs_dsp2); + fDSP2->compute(count, fDSP2Inputs, outputs); } +}; + +// Combine two 'compatible' DSP in a recursive way + +class dsp_recursiver : public dsp_binary_combiner { + + private: + + FAUSTFLOAT** fDSP1Inputs; + FAUSTFLOAT** fDSP1Outputs; + + FAUSTFLOAT** fDSP2Inputs; + FAUSTFLOAT** fDSP2Outputs; + + public: + + dsp_recursiver(dsp* dsp1, dsp* dsp2):dsp_binary_combiner(dsp1, dsp2) + { + fDSP1Inputs = allocateChannels(fDSP1->getNumInputs(), 1); + fDSP1Outputs = allocateChannels(fDSP1->getNumOutputs(), 1); + fDSP2Inputs = allocateChannels(fDSP2->getNumInputs(), 1); + fDSP2Outputs = allocateChannels(fDSP2->getNumOutputs(), 1); + } + + virtual ~dsp_recursiver() + { + deleteChannels(fDSP1Inputs, fDSP1->getNumInputs()); + deleteChannels(fDSP1Outputs, fDSP1->getNumOutputs()); + deleteChannels(fDSP2Inputs, fDSP2->getNumInputs()); + deleteChannels(fDSP2Outputs, fDSP2->getNumOutputs()); + } + + virtual int getNumInputs() { return fDSP1->getNumInputs() - fDSP2->getNumOutputs(); } + virtual int getNumOutputs() { return fDSP1->getNumOutputs(); } + + virtual void buildUserInterface(UI* ui_interface) + { + buildUserInterfaceAux(ui_interface, "Recursiver"); + } + + virtual dsp* clone() + { + return new dsp_recursiver(fDSP1->clone(), fDSP2->clone()); + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + for (int frame = 0; (frame < count); frame++) { + + for (int chan = 0; chan < fDSP2->getNumOutputs(); chan++) { + fDSP1Inputs[chan][0] = fDSP2Outputs[chan][0]; + } + + for (int chan = 0; chan < fDSP1->getNumInputs() - fDSP2->getNumOutputs(); chan++) { + fDSP1Inputs[chan + fDSP2->getNumOutputs()][0] = inputs[chan][frame]; + } + + fDSP1->compute(1, fDSP1Inputs, fDSP1Outputs); + + for (int chan = 0; chan < fDSP1->getNumOutputs(); chan++) { + outputs[chan][frame] = fDSP1Outputs[chan][0]; + } + + for (int chan = 0; chan < fDSP2->getNumInputs(); chan++) { + fDSP2Inputs[chan][0] = fDSP1Outputs[chan][0]; + } + + fDSP2->compute(1, fDSP2Inputs, fDSP2Outputs); + } + } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + }; +// DSP algebra API +/* + Each operation takes two DSP as parameters, returns the combined DSPs, or null if failure with an error message. + */ + +static dsp* createDSPSequencer(dsp* dsp1, dsp* dsp2, std::string& error) +{ + if (dsp1->getNumOutputs() != dsp2->getNumInputs()) { + std::stringstream error_aux; + error_aux << "Connection error int dsp_sequencer : the number of outputs (" + << dsp1->getNumOutputs() << ") of A " + << "must be equal to the number of inputs (" << dsp2->getNumInputs() << ") of B" << std::endl; + error = error_aux.str(); + return nullptr; + } else { + return new dsp_sequencer(dsp1, dsp2); + } +} + +static dsp* createDSPParallelize(dsp* dsp1, dsp* dsp2, std::string& error) +{ + return new dsp_parallelizer(dsp1, dsp2); +} + +static dsp* createDSPSplitter(dsp* dsp1, dsp* dsp2, std::string& error) +{ + if (dsp1->getNumOutputs() == 0) { + error = "Connection error in dsp_splitter : the first expression has no outputs\n"; + return nullptr; + } else if (dsp2->getNumInputs() == 0) { + error = "Connection error in dsp_splitter : the second expression has no inputs\n"; + return nullptr; + } else if (dsp2->getNumInputs() % dsp1->getNumOutputs() != 0) { + std::stringstream error_aux; + error_aux << "Connection error in dsp_splitter : the number of outputs (" << dsp1->getNumOutputs() + << ") of the first expression should be a divisor of the number of inputs (" + << dsp2->getNumInputs() + << ") of the second expression" << std::endl; + error = error_aux.str(); + return nullptr; + } else if (dsp2->getNumInputs() == dsp1->getNumOutputs()) { + return new dsp_sequencer(dsp1, dsp2); + } else { + return new dsp_splitter(dsp1, dsp2); + } +} + +static dsp* createDSPMerger(dsp* dsp1, dsp* dsp2, std::string& error) +{ + if (dsp1->getNumOutputs() == 0) { + error = "Connection error in dsp_merger : the first expression has no outputs\n"; + return nullptr; + } else if (dsp2->getNumInputs() == 0) { + error = "Connection error in dsp_merger : the second expression has no inputs\n"; + return nullptr; + } else if (dsp1->getNumOutputs() % dsp2->getNumInputs() != 0) { + std::stringstream error_aux; + error_aux << "Connection error in dsp_merger : the number of outputs (" << dsp1->getNumOutputs() + << ") of the first expression should be a multiple of the number of inputs (" + << dsp2->getNumInputs() + << ") of the second expression" << std::endl; + error = error_aux.str(); + return nullptr; + } else if (dsp2->getNumInputs() == dsp1->getNumOutputs()) { + return new dsp_sequencer(dsp1, dsp2); + } else { + return new dsp_merger(dsp1, dsp2); + } +} + +static dsp* createDSPRecursiver(dsp* dsp1, dsp* dsp2, std::string& error) +{ + if ((dsp2->getNumInputs() > dsp1->getNumOutputs()) || (dsp2->getNumOutputs() > dsp1->getNumInputs())) { + std::stringstream error_aux; + error_aux << "Connection error in : dsp_recursiver" << std::endl; + if (dsp2->getNumInputs() > dsp1->getNumOutputs()) { + error_aux << "The number of outputs " << dsp1->getNumOutputs() + << " of the first expression should be greater or equal to the number of inputs (" + << dsp2->getNumInputs() + << ") of the second expression" << std::endl; + } + if (dsp2->getNumOutputs() > dsp1->getNumInputs()) { + error_aux << "The number of inputs " << dsp1->getNumInputs() + << " of the first expression should be greater or equal to the number of outputs (" + << dsp2->getNumOutputs() + << ") of the second expression" << std::endl; + } + error = error_aux.str(); + return nullptr; + } else { + return new dsp_recursiver(dsp1, dsp2); + } +} + #endif diff --git a/source/DEINDUGens/include/faust/dsp/dsp-optimizer.h b/source/DEINDUGens/include/faust/dsp/dsp-optimizer.h new file mode 100644 index 0000000000..03f393d401 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/dsp-optimizer.h @@ -0,0 +1,426 @@ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + +************************************************************************/ + +#ifndef __dsp_optimizer__ +#define __dsp_optimizer__ + +#include +#include +#include +#include +#include +#include + +#include "faust/dsp/llvm-dsp.h" +#include "faust/dsp/dsp-bench.h" + +/* + A class to find optimal Faust compiler parameters for a given DSP. +*/ +template +class dsp_optimizer { + + private: + + int fBufferSize; // size of a vector in samples + + int fArgc; + const char** fArgv; + + int fOptLevel; + llvm_dsp_factory* fFactory; + llvm_dsp* fDSP; + + int fRun; + int fCount; + bool fTrace; + bool fNeedExp10; + + std::string fFilename; + std::string fInput; + std::string fTarget; + std::string fError; + + std::vector > fOptionsTable; + + double bench(int run) + { + // First call with fCount = -1 will be used to estimate fCount by giving the wanted measure duration + if (fCount == -1) { + measure_dsp mes(fDSP, fBufferSize, 5., fTrace); + mes.measure(); + // fCount is kept from the first duration measure + fCount = mes.getCount(); + return mes.getStats(); + } else { + measure_dsp mes(fDSP, fBufferSize, fCount, fTrace); + for (int i = 0; i < run; i++) { + mes.measure(); + if (fTrace) std::cout << mes.getStats() << " " << "(DSP CPU % : " << (mes.getCPULoad() * 100) << ")" << std::endl; + FAUSTBENCH_LOG(mes.getStats()); + } + return mes.getStats(); + } + } + + void init() + { + // Scalar mode + std::vector t0; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t0.push_back("-double"); } + t0.push_back("-scal"); + fOptionsTable.push_back(t0); + + // Scalar mode with exp10 + std::vector t0_exp10; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t0_exp10.push_back("-double"); } + t0_exp10.push_back("-scal"); + t0_exp10.push_back("-exp10"); + fOptionsTable.push_back(t0_exp10); + + SAMPLE_TYPE var; + + // vec -lv 0 + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t1.push_back("-double"); } + t1.push_back("-vec"); + t1.push_back("-lv"); + t1.push_back("0"); + t1.push_back("-vs"); + t1.push_back(num.str()); + fOptionsTable.push_back(t1); + } + + // vec -lv 0 + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t1.push_back("-double"); } + t1.push_back("-vec"); + t1.push_back("-fun"); + t1.push_back("-lv"); + t1.push_back("0"); + t1.push_back("-vs"); + t1.push_back(num.str()); + fOptionsTable.push_back(t1); + } + + // vec -lv 0 -g + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t1.push_back("-double"); } + t1.push_back("-vec"); + t1.push_back("-lv"); + t1.push_back("0"); + t1.push_back("-vs"); + t1.push_back(num.str()); + t1.push_back("-g"); + fOptionsTable.push_back(t1); + } + + // vec -lv 0 -dfs + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t1.push_back("-double"); } + t1.push_back("-vec"); + t1.push_back("-lv"); + t1.push_back("0"); + t1.push_back("-vs"); + t1.push_back(num.str()); + t1.push_back("-dfs"); + fOptionsTable.push_back(t1); + } + + // vec -lv 1 + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t1.push_back("-double"); } + t1.push_back("-vec"); + t1.push_back("-lv"); + t1.push_back("1"); + t1.push_back("-vs"); + t1.push_back(num.str()); + fOptionsTable.push_back(t1); + } + + // vec -lv 1 -g + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t1.push_back("-double"); } + t1.push_back("-vec"); + t1.push_back("-lv"); + t1.push_back("1"); + t1.push_back("-vs"); + t1.push_back(num.str()); + t1.push_back("-g"); + fOptionsTable.push_back(t1); + } + + // vec -lv 1 -dfs + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + if (typeid(SAMPLE_TYPE).name() == typeid(double).name()) { t1.push_back("-double"); } + t1.push_back("-vec"); + t1.push_back("-lv"); + t1.push_back("1"); + t1.push_back("-vs"); + t1.push_back(num.str()); + t1.push_back("-dfs"); + fOptionsTable.push_back(t1); + } + + /* + // sch + for (int size = 4; size <= fBufferSize; size *= 2) { + std::stringstream num; + num << size; + std::vector t1; + t1.push_back("-sch"); + t1.push_back("-vs"); + t1.push_back(num.str()); + fOptionsTable.push_back(t1); + } + */ + } + + void printItem(const std::vector & item) + { + for (int i = 0; i < item.size(); i++) { + std::cout << " " << item[i]; + } + std::cout << " : "; + } + + std::vector addArgvItems(const std::vector & item, int argc, const char* argv[]) + { + std::vector res_item = item; + for (int i = 0; i < argc ; i++) { + res_item.push_back(argv[i]); + } + return res_item; + } + + bool computeOne(const std::vector& item, int run, double& res) + { + if (fTrace) printItem(item); + + int argc = 0; + const char* argv[64]; + for (int i = 0; i < item.size(); i++) { + argv[argc++] = item[i].c_str(); + } + argv[argc] = 0; // NULL terminated argv + + if (fInput == "") { + fFactory = createDSPFactoryFromFile(fFilename.c_str(), argc, argv, fTarget, fError, fOptLevel); + } else { + fFactory = createDSPFactoryFromString("FaustDSP", fInput, argc, argv, fTarget, fError, fOptLevel); + } + + if (!fFactory) { + std::cerr << "Cannot create factory : " << fError << std::endl; + return false; + } + + fDSP = fFactory->createDSPInstance(); + if (!fDSP) { + std::cerr << "Cannot create instance..." << std::endl; + return false; + } + res = bench(run); + // fDSP is deallocated by bench calling measure_dsp + + deleteDSPFactory(fFactory); + fFactory = 0; + fDSP = 0; + + return true; + } + + std::pair > findOptimizedParametersAux(const std::vector >& options) + { + std::vector > table_res; + double res = 0.; + + for (int i = 0; i < options.size(); i++) { + if (computeOne(addArgvItems(options[i], fArgc, fArgv), fRun, res)) { + table_res.push_back(std::make_pair(i, res)); + } else { + std::cerr << "computeOne error..." << std::endl; + } + } + + sort(table_res.begin(), table_res.end(), compareFun); + return std::make_pair(table_res[0].second, options[table_res[0].first]); + } + + static bool compareFun(std::pair i, std::pair j) { return (i.second > j.second); } + + bool init(const std::string& filename, const std::string input, + int argc, const char* argv[], + const std::string& target, + int buffer_size, int run, + int opt_level_max, + bool trace) + { + fFilename = filename; + fInput = input; + fTarget = target; + fOptLevel = opt_level_max; + fRun = run; + fBufferSize = buffer_size; // size of a vector in samples + fArgc = argc; + fArgv = argv; + fCount = -1; + fTrace = trace; + fNeedExp10 = false; + + init(); + + if (fTrace) std::cout << "Estimate timing parameters" << std::endl; + double res1 = 0.; + if (!computeOne(addArgvItems(fOptionsTable[0], fArgc, fArgv), 1, res1)) { + std::cerr << "computeOne error..." << std::endl; + return false; + } + if (fTrace) std::cout << "Testing -exp10 need" << std::endl; + double res2 = 0.; + if (!computeOne(addArgvItems(fOptionsTable[1], fArgc, fArgv), 1, res2)) { + std::cerr << "computeOne error..." << std::endl; + return false; + } + fNeedExp10 = (res2 > (res1 * 1.05)); // If more than 5% faster + return true; + } + + public: + + /** + * Constructor. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param target - the LLVM machine target (using empty string will take current machine settings) + * @param buffer_size - the buffer size in samples + * @param run - the number of time each test must be run + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + */ + dsp_optimizer(const char* filename, + int argc, + const char* argv[], + const std::string& target, + int buffer_size, + int run = 1, + int opt_level = -1, + bool trace = true) + { + if (!init(filename, "", argc, argv, target, buffer_size, run, opt_level, trace)) { + throw std::bad_alloc(); + } + } + + /** + * Constructor. + * + * @param input - the Faust program as a string + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param target - the LLVM machine target (using empty string will take current machine settings) + * @param buffer_size - the buffer size in sampels + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + */ + dsp_optimizer(const std::string& input, + int argc, + const char* argv[], + const std::string& target, + int buffer_size, + int opt_level = -1) + { + if (!init("", input, argc, argv, target, buffer_size, opt_level)) { + throw std::bad_alloc(); + } + } + + virtual ~dsp_optimizer() + {} + + /** + * Returns the best compilations parameters. + * + * @return the best result (in Megabytes/seconds), and compilation parameters in a vector. + */ + std::pair > findOptimizedParameters() + { + if (fTrace) std::cout << "Discover best parameters option" << std::endl; + std::pair > best1 = findOptimizedParametersAux(fOptionsTable); + + if (fTrace) std::cout << "Refined with -mcd" << std::endl; + std::vector > options_table; + for (int size = 2; size <= 256; size *= 2) { + std::vector best2 = best1.second; + std::stringstream num; + num << size; + best2.push_back("-mcd"); + best2.push_back(num.str()); + options_table.push_back(best2); + } + + if (fNeedExp10) { + if (fTrace) std::cout << "Use -exp10" << std::endl; + std::vector t0_exp10; + t0_exp10.push_back("-exp10"); + options_table.push_back(t0_exp10); + } + + return findOptimizedParametersAux(options_table); + } + + /** + * Returns the error (in case on compilation error). + * + * @return the compilation error as a string. + */ + const char* getError() { return fError.c_str(); } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/dsp-tools.h b/source/DEINDUGens/include/faust/dsp/dsp-tools.h index f3a1da9f1b..6fc76d1d10 100644 --- a/source/DEINDUGens/include/faust/dsp/dsp-tools.h +++ b/source/DEINDUGens/include/faust/dsp/dsp-tools.h @@ -1,26 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __dsp_tools__ @@ -48,7 +46,7 @@ class Deinterleaver { fNumFrames = numFrames; fNumInputs = numInputs; - fNumOutputs = max(numInputs, numOutputs); + fNumOutputs = std::max(numInputs, numOutputs); // allocate interleaved input channel fInput = new FAUSTFLOAT[fNumFrames * fNumInputs]; @@ -136,4 +134,91 @@ class Interleaver } }; +//============================================================================= +// An AudioChannels is a group of non-interleaved buffers that knows how to read +// from or write to an interleaved buffer. The interleaved buffer may have a +// different number of channels than the AudioChannels internal channels. +//============================================================================= + +class AudioChannels +{ + + protected: + + const unsigned int fNumFrames; + const unsigned int fNumChannels; + FAUSTFLOAT** fChannels; + + public: + + AudioChannels(int nframes, int nchannels) : fNumFrames(nframes), fNumChannels(nchannels) + { + fChannels = new FAUSTFLOAT*[nchannels]; + + // allocate audio channels + for (unsigned int i = 0; i < fNumChannels; i++) { + fChannels[i] = new FAUSTFLOAT[fNumFrames]; + for (unsigned int j = 0; j < fNumFrames; j++) { + fChannels[i][j] = 0; + } + } + } + + virtual ~AudioChannels() + { + // free separate input channels + for (int i = 0; i < fNumChannels; i++) { + delete[] fChannels[i]; + } + delete[] fChannels; + } + + //--------------------------------------------------------------------------------------- + // interleavedRead: read, from the interleaved buffer , frames on + // channels. The samples are written to the internal + // . + void interleavedRead(float* inbuffer, unsigned int length, unsigned int inchannels) + { + assert(length <= fNumFrames); + unsigned int C = std::min(inchannels, fNumChannels); + unsigned int F = std::min(length, fNumFrames); + + for (unsigned int f = 0; f < F; f++) { + unsigned int p = f * inchannels; + for (unsigned int c = 0; c < C; c++) { + fChannels[c][f] = inbuffer[p++]; + } + for (unsigned int c = C; c < fNumChannels; c++) { + fChannels[c][f] = 0; + } + } + } + + //---------------------------------------------------------------------------------------- + // interleavedWrite: write to the interleaved buffer , frames on + // channels. The samples are read from internal + // . + void interleavedWrite(float* outbuffer, unsigned int length, unsigned int outchannels) + { + assert(length <= fNumFrames); + unsigned int C = std::min(outchannels, fNumChannels); + unsigned int F = std::min(length, fNumFrames); + + for (unsigned int f = 0; f < F; f++) { + unsigned int p = f * outchannels; + for (unsigned int c = 0; c < C; c++) { + outbuffer[p++] = fChannels[c][f]; + } + for (unsigned int c = C; c < outchannels; c++) { + outbuffer[p++] = 0; + } + } + } + + //---------------------------------------------------------------------------------------- + // buffers: the internal buffers ready to use in the compute() method of a Faust dsp + + FAUSTFLOAT** buffers() { return fChannels; } +}; + #endif diff --git a/source/DEINDUGens/include/faust/dsp/dsp.h b/source/DEINDUGens/include/faust/dsp/dsp.h index f1e9ab04d5..5ba553a6d9 100644 --- a/source/DEINDUGens/include/faust/dsp/dsp.h +++ b/source/DEINDUGens/include/faust/dsp/dsp.h @@ -1,48 +1,32 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ +#include +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -50,6 +34,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -68,31 +65,34 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -103,8 +103,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -112,16 +112,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -132,12 +132,12 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; @@ -166,11 +166,38 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual std::string getCompileOptions() = 0; + virtual std::vector getLibraryList() = 0; + virtual std::vector getIncludePathnames() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** diff --git a/source/DEINDUGens/include/faust/dsp/fastmath.cpp b/source/DEINDUGens/include/faust/dsp/fastmath.cpp new file mode 100644 index 0000000000..45b099efc3 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/fastmath.cpp @@ -0,0 +1,297 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + Code taken and adapted from the OWL project: https://hoxtonowl.com + ************************************************************************/ + +#include + +#ifdef __cplusplus +#include +#else +#include +#endif + +#ifdef _WIN32 +#define EXPORT __declspec(dllexport) __attribute__((always_inline)) +#else +#define EXPORT __attribute__ ((visibility("default"))) __attribute__((always_inline)) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + // float version + EXPORT float fast_acosf(float x) { return acosf(x); } + EXPORT float fast_asinf(float x) { return asinf(x); } + EXPORT float fast_atanf(float x) { return atanf(x); } + EXPORT float fast_atan2f(float x, float y) { return atan2f(x, y); } + EXPORT float fast_ceilf(float x) { return ceilf(x); } + EXPORT float fast_cosf(float x) { return cosf(x); } + EXPORT float fast_expf(float x); + EXPORT float fast_exp2f(float x); + EXPORT float fast_exp10f(float x); + EXPORT float fast_floorf(float x) { return floorf(x); } + EXPORT float fast_fmodf(float x, float y) { return fmodf(x, y); } + EXPORT float fast_logf(float x); + EXPORT float fast_log2f(float x); + EXPORT float fast_log10f(float x); + EXPORT float fast_powf(float x, float y); + EXPORT float fast_remainderf(float x, float y) { return remainderf(x, y); } + EXPORT float fast_roundf(float x) { return roundf(x); } + EXPORT float fast_sinf(float x) { return sinf(x); } + EXPORT float fast_sqrtf(float x) { return sqrtf(x); } + EXPORT float fast_tanf(float x) { return tanf(x); } + + // double version + EXPORT double fast_acos(double x) { return acos(x); } + EXPORT double fast_asin(double x) { return asin(x); } + EXPORT double fast_atan(double x) { return atan(x); } + EXPORT double fast_atan2(double x, double y) { return atan2(x, y); } + EXPORT double fast_ceil(double x) { return ceil(x); } + EXPORT double fast_cos(double x) { return cos(x); } + EXPORT double fast_exp(double x); + EXPORT double fast_exp2(double x); + EXPORT double fast_exp10(double x); + EXPORT double fast_floor(double x) { return floor(x); } + EXPORT double fast_fmod(double x, double y) { return fmod(x, y); } + EXPORT double fast_log(double x); + EXPORT double fast_log2(double x); + EXPORT double fast_log10(double x); + EXPORT double fast_pow(double x, double y); + EXPORT double fast_remainder(double x, double y) { return remainder(x, y); } + EXPORT double fast_round(double x) { return round(x); } + EXPORT double fast_sin(double x) { return sin(x); } + EXPORT double fast_sqrt(double x) { return sqrt(x); } + EXPORT double fast_tan(double x) { return tan(x); } + +#ifdef __cplusplus +} +#endif + +/* fast log lookup table, precision 16, size 65536 */ +const uint32_t fast_log_precision = 16; +const uint32_t fast_log_table_size = 65536; +const float fast_log_table[65536] = { + 1.100685e-05, 3.302029e-05, 5.503340e-05, 7.704617e-05, 9.905860e-05, 1.210707e-04, 1.430825e-04, 1.650939e-04, 1.871050e-04, 2.091158e-04, 2.311262e-04, 2.531362e-04, 2.751460e-04, 2.971554e-04, 3.191645e-04, 3.411732e-04, 3.631816e-04, 3.851897e-04, 4.071974e-04, 4.292048e-04, 4.512119e-04, 4.732186e-04, 4.952250e-04, 5.172311e-04, 5.392368e-04, 5.612422e-04, 5.832472e-04, 6.052519e-04, 6.272563e-04, 6.492604e-04, 6.712641e-04, 6.932674e-04, 7.152705e-04, 7.372731e-04, 7.592755e-04, 7.812775e-04, 8.032792e-04, 8.252807e-04, 8.472817e-04, 8.692823e-04, 8.912827e-04, 9.132827e-04, 9.352824e-04, 9.572817e-04, 9.792807e-04, 1.001279e-03, 1.023278e-03, 1.045276e-03, 1.067273e-03, 1.089271e-03, 1.111268e-03, 1.133264e-03, 1.155261e-03, 1.177257e-03, 1.199252e-03, 1.221248e-03, 1.243243e-03, 1.265237e-03, 1.287232e-03, 1.309226e-03, 1.331219e-03, 1.353213e-03, 1.375205e-03, 1.397198e-03, 1.419190e-03, 1.441183e-03, 1.463174e-03, 1.485165e-03, 1.507156e-03, 1.529147e-03, 1.551137e-03, 1.573127e-03, 1.595117e-03, 1.617106e-03, 1.639095e-03, 1.661084e-03, 1.683072e-03, 1.705060e-03, 1.727048e-03, 1.749035e-03, 1.771022e-03, 1.793008e-03, 1.814994e-03, 1.836981e-03, 1.858966e-03, 1.880951e-03, 1.902936e-03, 1.924921e-03, 1.946905e-03, 1.968889e-03, 1.990873e-03, 2.012856e-03, 2.034839e-03, 2.056821e-03, 2.078804e-03, 2.100786e-03, 2.122767e-03, 2.144748e-03, 2.166729e-03, 2.188710e-03, 2.210690e-03, 2.232670e-03, 2.254650e-03, 2.276629e-03, 2.298608e-03, 2.320586e-03, 2.342565e-03, 2.364542e-03, 2.386520e-03, 2.408497e-03, 2.430474e-03, 2.452451e-03, 2.474427e-03, 2.496403e-03, 2.518378e-03, 2.540353e-03, 2.562328e-03, 2.584303e-03, 2.606277e-03, 2.628251e-03, 2.650225e-03, 2.672198e-03, 2.694171e-03, 2.716143e-03, 2.738115e-03, 2.760087e-03, 2.782059e-03, 2.804030e-03, 2.826001e-03, 2.847972e-03, 2.869942e-03, 2.891911e-03, 2.913881e-03, 2.935850e-03, 2.957819e-03, 2.979788e-03, 3.001756e-03, 3.023724e-03, 3.045691e-03, 3.067659e-03, 3.089625e-03, 3.111592e-03, 3.133558e-03, 3.155524e-03, 3.177489e-03, 3.199455e-03, 3.221419e-03, 3.243384e-03, 3.265348e-03, 3.287312e-03, 3.309275e-03, 3.331239e-03, 3.353202e-03, 3.375164e-03, 3.397126e-03, 3.419088e-03, 3.441049e-03, 3.463011e-03, 3.484971e-03, 3.506932e-03, 3.528892e-03, 3.550852e-03, 3.572812e-03, 3.594771e-03, 3.616729e-03, 3.638688e-03, 3.660646e-03, 3.682604e-03, 3.704561e-03, 3.726519e-03, 3.748475e-03, 3.770432e-03, 3.792388e-03, 3.814344e-03, 3.836300e-03, 3.858255e-03, 3.880210e-03, 3.902164e-03, 3.924118e-03, 3.946071e-03, 3.968026e-03, 3.989978e-03, 4.011931e-03, 4.033884e-03, 4.055836e-03, 4.077788e-03, 4.099739e-03, 4.121690e-03, 4.143641e-03, 4.165591e-03, 4.187542e-03, 4.209492e-03, 4.231441e-03, 4.253390e-03, 4.275339e-03, 4.297288e-03, 4.319235e-03, 4.341183e-03, 4.363131e-03, 4.385078e-03, 4.407025e-03, 4.428971e-03, 4.450917e-03, 4.472863e-03, 4.494809e-03, 4.516754e-03, 4.538699e-03, 4.560643e-03, 4.582587e-03, 4.604531e-03, 4.626474e-03, 4.648418e-03, 4.670361e-03, 4.692303e-03, 4.714245e-03, 4.736187e-03, 4.758128e-03, 4.780069e-03, 4.802010e-03, 4.823951e-03, 4.845891e-03, 4.867830e-03, 4.889770e-03, 4.911709e-03, 4.933648e-03, 4.955587e-03, 4.977525e-03, 4.999463e-03, 5.021400e-03, 5.043337e-03, 5.065273e-03, 5.087210e-03, 5.109146e-03, 5.131082e-03, 5.153018e-03, 5.174953e-03, 5.196888e-03, 5.218822e-03, 5.240756e-03, 5.262690e-03, 5.284623e-03, 5.306556e-03, 5.328489e-03, 5.350422e-03, 5.372354e-03, 5.394286e-03, 5.416217e-03, 5.438148e-03, 5.460079e-03, 5.482010e-03, 5.503939e-03, 5.525869e-03, 5.547799e-03, 5.569728e-03, 5.591657e-03, 5.613585e-03, 5.635513e-03, 5.657441e-03, 5.679369e-03, 5.701296e-03, 5.723223e-03, 5.745149e-03, 5.767075e-03, 5.789001e-03, 5.810926e-03, 5.832851e-03, 5.854776e-03, 5.876700e-03, 5.898625e-03, 5.920548e-03, 5.942472e-03, 5.964395e-03, 5.986318e-03, 6.008240e-03, 6.030162e-03, 6.052084e-03, 6.074006e-03, 6.095927e-03, 6.117847e-03, 6.139768e-03, 6.161688e-03, 6.183608e-03, 6.205528e-03, 6.227447e-03, 6.249365e-03, 6.271284e-03, 6.293202e-03, 6.315120e-03, 6.337037e-03, 6.358955e-03, 6.380871e-03, 6.402788e-03, 6.424704e-03, 6.446620e-03, 6.468535e-03, 6.490450e-03, 6.512365e-03, 6.534279e-03, 6.556194e-03, 6.578107e-03, 6.600021e-03, 6.621934e-03, 6.643847e-03, 6.665759e-03, 6.687671e-03, 6.709583e-03, 6.731494e-03, 6.753406e-03, 6.775316e-03, 6.797227e-03, 6.819137e-03, 6.841047e-03, 6.862956e-03, 6.884866e-03, 6.906774e-03, 6.928683e-03, 6.950591e-03, 6.972499e-03, 6.994406e-03, 7.016314e-03, 7.038220e-03, 7.060127e-03, 7.082033e-03, 7.103939e-03, 7.125845e-03, 7.147749e-03, 7.169655e-03, 7.191559e-03, 7.213463e-03, 7.235366e-03, 7.257270e-03, 7.279173e-03, 7.301076e-03, 7.322978e-03, 7.344881e-03, 7.366783e-03, 7.388684e-03, 7.410585e-03, 7.432486e-03, 7.454386e-03, 7.476286e-03, 7.498186e-03, 7.520086e-03, 7.541985e-03, 7.563884e-03, 7.585783e-03, 7.607681e-03, 7.629578e-03, 7.651476e-03, 7.673373e-03, 7.695270e-03, 7.717167e-03, 7.739063e-03, 7.760958e-03, 7.782854e-03, 7.804750e-03, 7.826644e-03, 7.848538e-03, 7.870433e-03, 7.892326e-03, 7.914220e-03, 7.936114e-03, 7.958006e-03, 7.979899e-03, 8.001791e-03, 8.023683e-03, 8.045574e-03, 8.067465e-03, 8.089356e-03, 8.111247e-03, 8.133137e-03, 8.155027e-03, 8.176916e-03, 8.198805e-03, 8.220694e-03, 8.242583e-03, 8.264471e-03, 8.286359e-03, 8.308247e-03, 8.330134e-03, 8.352021e-03, 8.373907e-03, 8.395793e-03, 8.417679e-03, 8.439565e-03, 8.461449e-03, 8.483335e-03, 8.505220e-03, 8.527104e-03, 8.548987e-03, 8.570871e-03, 8.592755e-03, 8.614637e-03, 8.636520e-03, 8.658402e-03, 8.680284e-03, 8.702165e-03, 8.724046e-03, 8.745927e-03, 8.767808e-03, 8.789688e-03, 8.811568e-03, 8.833448e-03, 8.855327e-03, 8.877206e-03, 8.899084e-03, 8.920962e-03, 8.942841e-03, 8.964718e-03, 8.986595e-03, 9.008473e-03, 9.030349e-03, 9.052225e-03, 9.074101e-03, 9.095977e-03, 9.117852e-03, 9.139727e-03, 9.161602e-03, 9.183476e-03, 9.205350e-03, 9.227224e-03, 9.249097e-03, 9.270969e-03, 9.292842e-03, 9.314715e-03, 9.336586e-03, 9.358458e-03, 9.380329e-03, 9.402201e-03, 9.424071e-03, 9.445941e-03, 9.467810e-03, 9.489681e-03, 9.511550e-03, 9.533419e-03, 9.555288e-03, 9.577155e-03, 9.599023e-03, 9.620892e-03, 9.642758e-03, 9.664626e-03, 9.686492e-03, 9.708359e-03, 9.730224e-03, 9.752090e-03, 9.773956e-03, 9.795820e-03, 9.817685e-03, 9.839550e-03, 9.861413e-03, 9.883277e-03, 9.905141e-03, 9.927003e-03, 9.948866e-03, 9.970728e-03, 9.992590e-03, 1.001445e-02, 1.003631e-02, 1.005817e-02, 1.008003e-02, 1.010190e-02, 1.012376e-02, 1.014561e-02, 1.016747e-02, 1.018933e-02, 1.021119e-02, 1.023305e-02, 1.025491e-02, 1.027677e-02, 1.029862e-02, 1.032048e-02, 1.034234e-02, 1.036419e-02, 1.038605e-02, 1.040791e-02, 1.042976e-02, 1.045162e-02, 1.047347e-02, 1.049533e-02, 1.051718e-02, 1.053903e-02, 1.056089e-02, 1.058274e-02, 1.060459e-02, 1.062644e-02, 1.064830e-02, 1.067015e-02, 1.069200e-02, 1.071385e-02, 1.073570e-02, 1.075755e-02, 1.077940e-02, 1.080125e-02, 1.082310e-02, 1.084495e-02, 1.086680e-02, 1.088865e-02, 1.091050e-02, 1.093234e-02, 1.095419e-02, 1.097604e-02, 1.099788e-02, 1.101973e-02, 1.104158e-02, 1.106342e-02, 1.108527e-02, 1.110711e-02, 1.112896e-02, 1.115080e-02, 1.117265e-02, 1.119449e-02, 1.121633e-02, 1.123818e-02, 1.126002e-02, 1.128186e-02, 1.130371e-02, 1.132555e-02, 1.134739e-02, 1.136923e-02, 1.139107e-02, 1.141291e-02, 1.143475e-02, 1.145659e-02, 1.147843e-02, 1.150027e-02, 1.152211e-02, 1.154395e-02, 1.156578e-02, 1.158762e-02, 1.160946e-02, 1.163130e-02, 1.165313e-02, 1.167497e-02, 1.169681e-02, 1.171864e-02, 1.174048e-02, 1.176231e-02, 1.178415e-02, 1.180598e-02, 1.182782e-02, 1.184965e-02, 1.187148e-02, 1.189332e-02, 1.191515e-02, 1.193698e-02, 1.195882e-02, 1.198065e-02, 1.200248e-02, 1.202431e-02, 1.204614e-02, 1.206797e-02, 1.208980e-02, 1.211163e-02, 1.213346e-02, 1.215529e-02, 1.217712e-02, 1.219895e-02, 1.222078e-02, 1.224260e-02, 1.226443e-02, 1.228626e-02, 1.230808e-02, 1.232991e-02, 1.235174e-02, 1.237356e-02, 1.239539e-02, 1.241721e-02, 1.243904e-02, 1.246086e-02, 1.248269e-02, 1.250451e-02, 1.252634e-02, 1.254816e-02, 1.256998e-02, 1.259181e-02, 1.261363e-02, 1.263545e-02, 1.265727e-02, 1.267909e-02, 1.270091e-02, 1.272274e-02, 1.274456e-02, 1.276637e-02, 1.278819e-02, 1.281001e-02, 1.283183e-02, 1.285365e-02, 1.287547e-02, 1.289729e-02, 1.291911e-02, 1.294092e-02, 1.296274e-02, 1.298456e-02, 1.300637e-02, 1.302819e-02, 1.305000e-02, 1.307182e-02, 1.309364e-02, 1.311545e-02, 1.313726e-02, 1.315908e-02, 1.318089e-02, 1.320271e-02, 1.322452e-02, 1.324633e-02, 1.326814e-02, 1.328996e-02, 1.331177e-02, 1.333358e-02, 1.335539e-02, 1.337720e-02, 1.339901e-02, 1.342082e-02, 1.344263e-02, 1.346444e-02, 1.348625e-02, 1.350806e-02, 1.352987e-02, 1.355168e-02, 1.357348e-02, 1.359529e-02, 1.361710e-02, 1.363890e-02, 1.366071e-02, 1.368252e-02, 1.370432e-02, 1.372613e-02, 1.374793e-02, 1.376974e-02, 1.379154e-02, 1.381335e-02, 1.383515e-02, 1.385695e-02, 1.387876e-02, 1.390056e-02, 1.392236e-02, 1.394416e-02, 1.396597e-02, 1.398777e-02, 1.400957e-02, 1.403137e-02, 1.405317e-02, 1.407497e-02, 1.409677e-02, 1.411857e-02, 1.414037e-02, 1.416217e-02, 1.418397e-02, 1.420577e-02, 1.422756e-02, 1.424936e-02, 1.427116e-02, 1.429296e-02, 1.431475e-02, 1.433655e-02, 1.435834e-02, 1.438014e-02, 1.440194e-02, 1.442373e-02, 1.444552e-02, 1.446732e-02, 1.448911e-02, 1.451091e-02, 1.453270e-02, 1.455449e-02, 1.457629e-02, 1.459808e-02, 1.461987e-02, 1.464166e-02, 1.466345e-02, 1.468524e-02, 1.470703e-02, 1.472883e-02, 1.475061e-02, 1.477240e-02, 1.479419e-02, 1.481598e-02, 1.483777e-02, 1.485956e-02, 1.488135e-02, 1.490314e-02, 1.492492e-02, 1.494671e-02, 1.496850e-02, 1.499028e-02, 1.501207e-02, 1.503386e-02, 1.505564e-02, 1.507743e-02, 1.509921e-02, 1.512100e-02, 1.514278e-02, 1.516456e-02, 1.518635e-02, 1.520813e-02, 1.522991e-02, 1.525169e-02, 1.527348e-02, 1.529526e-02, 1.531704e-02, 1.533882e-02, 1.536060e-02, 1.538238e-02, 1.540416e-02, 1.542594e-02, 1.544772e-02, 1.546950e-02, 1.549128e-02, 1.551306e-02, 1.553484e-02, 1.555661e-02, 1.557839e-02, 1.560017e-02, 1.562195e-02, 1.564372e-02, 1.566550e-02, 1.568727e-02, 1.570905e-02, 1.573083e-02, 1.575260e-02, 1.577437e-02, 1.579615e-02, 1.581792e-02, 1.583970e-02, 1.586147e-02, 1.588324e-02, 1.590502e-02, 1.592679e-02, 1.594856e-02, 1.597033e-02, 1.599210e-02, 1.601387e-02, 1.603564e-02, 1.605741e-02, 1.607918e-02, 1.610095e-02, 1.612272e-02, 1.614449e-02, 1.616626e-02, 1.618803e-02, 1.620980e-02, 1.623156e-02, 1.625333e-02, 1.627510e-02, 1.629687e-02, 1.631863e-02, 1.634040e-02, 1.636216e-02, 1.638393e-02, 1.640569e-02, 1.642746e-02, 1.644922e-02, 1.647099e-02, 1.649275e-02, 1.651451e-02, 1.653628e-02, 1.655804e-02, 1.657980e-02, 1.660156e-02, 1.662333e-02, 1.664509e-02, 1.666685e-02, 1.668861e-02, 1.671037e-02, 1.673213e-02, 1.675389e-02, 1.677565e-02, 1.679741e-02, 1.681917e-02, 1.684093e-02, 1.686268e-02, 1.688444e-02, 1.690620e-02, 1.692796e-02, 1.694971e-02, 1.697147e-02, 1.699322e-02, 1.701498e-02, 1.703674e-02, 1.705849e-02, 1.708025e-02, 1.710200e-02, 1.712376e-02, 1.714551e-02, 1.716726e-02, 1.718902e-02, 1.721077e-02, 1.723252e-02, 1.725427e-02, 1.727603e-02, 1.729778e-02, 1.731953e-02, 1.734128e-02, 1.736303e-02, 1.738478e-02, 1.740653e-02, 1.742828e-02, 1.745003e-02, 1.747178e-02, 1.749353e-02, 1.751528e-02, 1.753702e-02, 1.755877e-02, 1.758052e-02, 1.760226e-02, 1.762401e-02, 1.764576e-02, 1.766750e-02, 1.768925e-02, 1.771099e-02, 1.773274e-02, 1.775449e-02, 1.777623e-02, 1.779797e-02, 1.781972e-02, 1.784146e-02, 1.786320e-02, 1.788495e-02, 1.790669e-02, 1.792843e-02, 1.795017e-02, 1.797191e-02, 1.799366e-02, 1.801540e-02, 1.803714e-02, 1.805888e-02, 1.808061e-02, 1.810236e-02, 1.812409e-02, 1.814583e-02, 1.816757e-02, 1.818931e-02, 1.821105e-02, 1.823279e-02, 1.825452e-02, 1.827626e-02, 1.829800e-02, 1.831973e-02, 1.834147e-02, 1.836320e-02, 1.838494e-02, 1.840667e-02, 1.842841e-02, 1.845014e-02, 1.847188e-02, 1.849361e-02, 1.851534e-02, 1.853708e-02, 1.855881e-02, 1.858054e-02, 1.860227e-02, 1.862400e-02, 1.864574e-02, 1.866747e-02, 1.868920e-02, 1.871093e-02, 1.873266e-02, 1.875439e-02, 1.877612e-02, 1.879784e-02, 1.881957e-02, 1.884130e-02, 1.886303e-02, 1.888476e-02, 1.890648e-02, 1.892821e-02, 1.894994e-02, 1.897166e-02, 1.899339e-02, 1.901512e-02, 1.903684e-02, 1.905857e-02, 1.908029e-02, 1.910202e-02, 1.912374e-02, 1.914546e-02, 1.916719e-02, 1.918891e-02, 1.921063e-02, 1.923236e-02, 1.925408e-02, 1.927580e-02, 1.929752e-02, 1.931924e-02, 1.934096e-02, 1.936268e-02, 1.938440e-02, 1.940612e-02, 1.942784e-02, 1.944956e-02, 1.947128e-02, 1.949300e-02, 1.951472e-02, 1.953644e-02, 1.955815e-02, 1.957987e-02, 1.960159e-02, 1.962330e-02, 1.964502e-02, 1.966674e-02, 1.968845e-02, 1.971017e-02, 1.973188e-02, 1.975360e-02, 1.977531e-02, 1.979702e-02, 1.981874e-02, 1.984045e-02, 1.986216e-02, 1.988388e-02, 1.990559e-02, 1.992730e-02, 1.994901e-02, 1.997072e-02, 1.999244e-02, 2.001414e-02, 2.003586e-02, 2.005756e-02, 2.007928e-02, 2.010098e-02, 2.012269e-02, 2.014440e-02, 2.016611e-02, 2.018782e-02, 2.020953e-02, 2.023123e-02, 2.025294e-02, 2.027465e-02, 2.029635e-02, 2.031806e-02, 2.033977e-02, 2.036147e-02, 2.038318e-02, 2.040488e-02, 2.042658e-02, 2.044829e-02, 2.046999e-02, 2.049170e-02, 2.051340e-02, 2.053510e-02, 2.055681e-02, 2.057851e-02, 2.060021e-02, 2.062191e-02, 2.064361e-02, 2.066531e-02, 2.068701e-02, 2.070871e-02, 2.073041e-02, 2.075211e-02, 2.077381e-02, 2.079551e-02, 2.081721e-02, 2.083891e-02, 2.086061e-02, 2.088230e-02, 2.090400e-02, 2.092570e-02, 2.094739e-02, 2.096909e-02, 2.099079e-02, 2.101248e-02, 2.103418e-02, 2.105587e-02, 2.107757e-02, 2.109926e-02, 2.112096e-02, 2.114265e-02, 2.116434e-02, 2.118604e-02, 2.120773e-02, 2.122942e-02, 2.125111e-02, 2.127280e-02, 2.129450e-02, 2.131619e-02, 2.133788e-02, 2.135957e-02, 2.138126e-02, 2.140295e-02, 2.142464e-02, 2.144633e-02, 2.146802e-02, 2.148970e-02, 2.151139e-02, 2.153308e-02, 2.155477e-02, 2.157645e-02, 2.159814e-02, 2.161983e-02, 2.164152e-02, 2.166320e-02, 2.168489e-02, 2.170657e-02, 2.172826e-02, 2.174994e-02, 2.177162e-02, 2.179331e-02, 2.181499e-02, 2.183667e-02, 2.185836e-02, 2.188004e-02, 2.190172e-02, 2.192340e-02, 2.194509e-02, 2.196677e-02, 2.198845e-02, 2.201013e-02, 2.203181e-02, 2.205349e-02, 2.207517e-02, 2.209685e-02, 2.211853e-02, 2.214021e-02, 2.216188e-02, 2.218356e-02, 2.220524e-02, 2.222692e-02, 2.224859e-02, 2.227027e-02, 2.229195e-02, 2.231362e-02, 2.233530e-02, 2.235698e-02, 2.237865e-02, 2.240033e-02, 2.242200e-02, 2.244367e-02, 2.246535e-02, 2.248702e-02, 2.250869e-02, 2.253037e-02, 2.255204e-02, 2.257371e-02, 2.259539e-02, 2.261705e-02, 2.263873e-02, 2.266040e-02, 2.268207e-02, 2.270374e-02, 2.272541e-02, 2.274708e-02, 2.276875e-02, 2.279042e-02, 2.281209e-02, 2.283375e-02, 2.285542e-02, 2.287709e-02, 2.289876e-02, 2.292042e-02, 2.294209e-02, 2.296375e-02, 2.298542e-02, 2.300709e-02, 2.302875e-02, 2.305042e-02, 2.307208e-02, 2.309375e-02, 2.311541e-02, 2.313707e-02, 2.315874e-02, 2.318040e-02, 2.320206e-02, 2.322373e-02, 2.324539e-02, 2.326705e-02, 2.328871e-02, 2.331037e-02, 2.333203e-02, 2.335369e-02, 2.337535e-02, 2.339701e-02, 2.341867e-02, 2.344033e-02, 2.346199e-02, 2.348365e-02, 2.350531e-02, 2.352697e-02, 2.354862e-02, 2.357028e-02, 2.359194e-02, 2.361359e-02, 2.363525e-02, 2.365691e-02, 2.367856e-02, 2.370022e-02, 2.372187e-02, 2.374353e-02, 2.376518e-02, 2.378683e-02, 2.380849e-02, 2.383014e-02, 2.385180e-02, 2.387345e-02, 2.389510e-02, 2.391675e-02, 2.393840e-02, 2.396005e-02, 2.398170e-02, 2.400335e-02, 2.402501e-02, 2.404666e-02, 2.406831e-02, 2.408996e-02, 2.411160e-02, 2.413325e-02, 2.415490e-02, 2.417655e-02, 2.419820e-02, 2.421985e-02, 2.424149e-02, 2.426314e-02, 2.428479e-02, 2.430643e-02, 2.432808e-02, 2.434972e-02, 2.437137e-02, 2.439301e-02, 2.441466e-02, 2.443630e-02, 2.445795e-02, 2.447959e-02, 2.450123e-02, 2.452287e-02, 2.454452e-02, 2.456616e-02, 2.458780e-02, 2.460944e-02, 2.463109e-02, 2.465273e-02, 2.467437e-02, 2.469601e-02, 2.471765e-02, 2.473929e-02, 2.476093e-02, 2.478257e-02, 2.480420e-02, 2.482584e-02, 2.484748e-02, 2.486912e-02, 2.489076e-02, 2.491239e-02, 2.493403e-02, 2.495567e-02, 2.497730e-02, 2.499894e-02, 2.502057e-02, 2.504221e-02, 2.506384e-02, 2.508548e-02, 2.510711e-02, 2.512874e-02, 2.515038e-02, 2.517201e-02, 2.519364e-02, 2.521528e-02, 2.523691e-02, 2.525854e-02, 2.528017e-02, 2.530180e-02, 2.532344e-02, 2.534507e-02, 2.536670e-02, 2.538833e-02, 2.540996e-02, 2.543158e-02, 2.545322e-02, 2.547484e-02, 2.549647e-02, 2.551810e-02, 2.553973e-02, 2.556135e-02, 2.558298e-02, 2.560461e-02, 2.562623e-02, 2.564786e-02, 2.566949e-02, 2.569111e-02, 2.571274e-02, 2.573436e-02, 2.575598e-02, 2.577761e-02, 2.579923e-02, 2.582086e-02, 2.584248e-02, 2.586410e-02, 2.588572e-02, 2.590735e-02, 2.592897e-02, 2.595059e-02, 2.597221e-02, 2.599383e-02, 2.601545e-02, 2.603707e-02, 2.605869e-02, 2.608031e-02, 2.610193e-02, 2.612355e-02, 2.614517e-02, 2.616679e-02, 2.618841e-02, 2.621002e-02, 2.623164e-02, 2.625326e-02, 2.627487e-02, 2.629649e-02, 2.631811e-02, 2.633972e-02, 2.636134e-02, 2.638295e-02, 2.640457e-02, 2.642618e-02, 2.644780e-02, 2.646941e-02, 2.649102e-02, 2.651264e-02, 2.653425e-02, 2.655586e-02, 2.657747e-02, 2.659908e-02, 2.662070e-02, 2.664231e-02, 2.666392e-02, 2.668553e-02, 2.670714e-02, 2.672875e-02, 2.675036e-02, 2.677197e-02, 2.679358e-02, 2.681519e-02, 2.683679e-02, 2.685840e-02, 2.688001e-02, 2.690162e-02, 2.692322e-02, 2.694483e-02, 2.696644e-02, 2.698804e-02, 2.700965e-02, 2.703125e-02, 2.705286e-02, 2.707446e-02, 2.709607e-02, 2.711767e-02, 2.713927e-02, 2.716088e-02, 2.718248e-02, 2.720408e-02, 2.722569e-02, 2.724729e-02, 2.726889e-02, 2.729049e-02, 2.731209e-02, 2.733369e-02, 2.735529e-02, 2.737689e-02, 2.739850e-02, 2.742009e-02, 2.744169e-02, 2.746329e-02, 2.748489e-02, 2.750649e-02, 2.752809e-02, 2.754968e-02, 2.757128e-02, 2.759288e-02, 2.761447e-02, 2.763607e-02, 2.765767e-02, 2.767926e-02, 2.770086e-02, 2.772245e-02, 2.774405e-02, 2.776564e-02, 2.778723e-02, 2.780883e-02, 2.783042e-02, 2.785202e-02, 2.787361e-02, 2.789520e-02, 2.791679e-02, 2.793838e-02, 2.795997e-02, 2.798157e-02, 2.800316e-02, 2.802475e-02, 2.804634e-02, 2.806793e-02, 2.808952e-02, 2.811111e-02, 2.813270e-02, 2.815428e-02, 2.817587e-02, 2.819746e-02, 2.821905e-02, 2.824063e-02, 2.826222e-02, 2.828381e-02, 2.830539e-02, 2.832698e-02, 2.834857e-02, 2.837015e-02, 2.839174e-02, 2.841332e-02, 2.843490e-02, 2.845649e-02, 2.847807e-02, 2.849966e-02, 2.852124e-02, 2.854282e-02, 2.856440e-02, 2.858599e-02, 2.860757e-02, 2.862915e-02, 2.865073e-02, 2.867231e-02, 2.869389e-02, 2.871547e-02, 2.873705e-02, 2.875863e-02, 2.878021e-02, 2.880179e-02, 2.882337e-02, 2.884495e-02, 2.886652e-02, 2.888810e-02, 2.890968e-02, 2.893125e-02, 2.895283e-02, 2.897441e-02, 2.899599e-02, 2.901756e-02, 2.903913e-02, 2.906071e-02, 2.908229e-02, 2.910386e-02, 2.912543e-02, 2.914701e-02, 2.916858e-02, 2.919015e-02, 2.921173e-02, 2.923330e-02, 2.925487e-02, 2.927644e-02, 2.929801e-02, 2.931958e-02, 2.934115e-02, 2.936273e-02, 2.938429e-02, 2.940587e-02, 2.942744e-02, 2.944900e-02, 2.947057e-02, 2.949214e-02, 2.951371e-02, 2.953528e-02, 2.955684e-02, 2.957841e-02, 2.959998e-02, 2.962155e-02, 2.964311e-02, 2.966468e-02, 2.968624e-02, 2.970781e-02, 2.972937e-02, 2.975094e-02, 2.977250e-02, 2.979407e-02, 2.981563e-02, 2.983719e-02, 2.985875e-02, 2.988032e-02, 2.990188e-02, 2.992344e-02, 2.994500e-02, 2.996657e-02, 2.998812e-02, 3.000969e-02, 3.003125e-02, 3.005281e-02, 3.007437e-02, 3.009593e-02, 3.011749e-02, 3.013905e-02, 3.016060e-02, 3.018216e-02, 3.020372e-02, 3.022528e-02, 3.024684e-02, 3.026839e-02, 3.028995e-02, 3.031150e-02, 3.033306e-02, 3.035462e-02, 3.037617e-02, 3.039773e-02, 3.041928e-02, 3.044084e-02, 3.046239e-02, 3.048394e-02, 3.050550e-02, 3.052705e-02, 3.054860e-02, 3.057016e-02, 3.059171e-02, 3.061326e-02, 3.063481e-02, 3.065636e-02, 3.067791e-02, 3.069946e-02, 3.072101e-02, 3.074256e-02, 3.076411e-02, 3.078566e-02, 3.080721e-02, 3.082876e-02, 3.085031e-02, 3.087185e-02, 3.089340e-02, 3.091495e-02, 3.093649e-02, 3.095804e-02, 3.097959e-02, 3.100114e-02, 3.102268e-02, 3.104423e-02, 3.106577e-02, 3.108731e-02, 3.110886e-02, 3.113040e-02, 3.115195e-02, 3.117349e-02, 3.119503e-02, 3.121658e-02, 3.123812e-02, 3.125966e-02, 3.128120e-02, 3.130275e-02, 3.132429e-02, 3.134583e-02, 3.136737e-02, 3.138890e-02, 3.141044e-02, 3.143199e-02, 3.145352e-02, 3.147506e-02, 3.149660e-02, 3.151814e-02, 3.153968e-02, 3.156121e-02, 3.158275e-02, 3.160429e-02, 3.162583e-02, 3.164736e-02, 3.166890e-02, 3.169043e-02, 3.171197e-02, 3.173351e-02, 3.175504e-02, 3.177657e-02, 3.179811e-02, 3.181964e-02, 3.184117e-02, 3.186271e-02, 3.188424e-02, 3.190577e-02, 3.192731e-02, 3.194884e-02, 3.197037e-02, 3.199190e-02, 3.201343e-02, 3.203496e-02, 3.205649e-02, 3.207802e-02, 3.209955e-02, 3.212108e-02, 3.214261e-02, 3.216414e-02, 3.218567e-02, 3.220719e-02, 3.222872e-02, 3.225025e-02, 3.227178e-02, 3.229330e-02, 3.231483e-02, 3.233635e-02, 3.235788e-02, 3.237941e-02, 3.240093e-02, 3.242246e-02, 3.244398e-02, 3.246550e-02, 3.248703e-02, 3.250855e-02, 3.253007e-02, 3.255160e-02, 3.257312e-02, 3.259464e-02, 3.261616e-02, 3.263769e-02, 3.265921e-02, 3.268073e-02, 3.270225e-02, 3.272377e-02, 3.274529e-02, 3.276681e-02, 3.278833e-02, 3.280985e-02, 3.283136e-02, 3.285288e-02, 3.287440e-02, 3.289592e-02, 3.291744e-02, 3.293895e-02, 3.296047e-02, 3.298199e-02, 3.300350e-02, 3.302502e-02, 3.304653e-02, 3.306805e-02, 3.308956e-02, 3.311108e-02, 3.313259e-02, 3.315411e-02, 3.317562e-02, 3.319713e-02, 3.321864e-02, 3.324016e-02, 3.326167e-02, 3.328318e-02, 3.330469e-02, 3.332620e-02, 3.334771e-02, 3.336923e-02, 3.339074e-02, 3.341225e-02, 3.343375e-02, 3.345527e-02, 3.347677e-02, 3.349828e-02, 3.351979e-02, 3.354130e-02, 3.356281e-02, 3.358432e-02, 3.360582e-02, 3.362733e-02, 3.364884e-02, 3.367034e-02, 3.369185e-02, 3.371335e-02, 3.373486e-02, 3.375636e-02, 3.377787e-02, 3.379937e-02, 3.382087e-02, 3.384238e-02, 3.386388e-02, 3.388539e-02, 3.390689e-02, 3.392839e-02, 3.394989e-02, 3.397140e-02, 3.399289e-02, 3.401440e-02, 3.403590e-02, 3.405740e-02, 3.407890e-02, 3.410040e-02, 3.412190e-02, 3.414340e-02, 3.416489e-02, 3.418639e-02, 3.420789e-02, 3.422939e-02, 3.425089e-02, 3.427238e-02, 3.429388e-02, 3.431538e-02, 3.433687e-02, 3.435837e-02, 3.437986e-02, 3.440136e-02, 3.442286e-02, 3.444435e-02, 3.446584e-02, 3.448734e-02, 3.450883e-02, 3.453032e-02, 3.455182e-02, 3.457331e-02, 3.459480e-02, 3.461630e-02, 3.463778e-02, 3.465928e-02, 3.468077e-02, 3.470226e-02, 3.472375e-02, 3.474524e-02, 3.476673e-02, 3.478822e-02, 3.480971e-02, 3.483120e-02, 3.485268e-02, 3.487417e-02, 3.489566e-02, 3.491715e-02, 3.493864e-02, 3.496012e-02, 3.498161e-02, 3.500310e-02, 3.502458e-02, 3.504607e-02, 3.506755e-02, 3.508904e-02, 3.511052e-02, 3.513201e-02, 3.515349e-02, 3.517497e-02, 3.519646e-02, 3.521794e-02, 3.523942e-02, 3.526090e-02, 3.528238e-02, 3.530387e-02, 3.532535e-02, 3.534683e-02, 3.536831e-02, 3.538979e-02, 3.541127e-02, 3.543275e-02, 3.545423e-02, 3.547571e-02, 3.549719e-02, 3.551867e-02, 3.554015e-02, 3.556162e-02, 3.558310e-02, 3.560458e-02, 3.562606e-02, 3.564753e-02, 3.566901e-02, 3.569049e-02, 3.571196e-02, 3.573344e-02, 3.575492e-02, 3.577639e-02, 3.579786e-02, 3.581933e-02, 3.584081e-02, 3.586228e-02, 3.588375e-02, 3.590523e-02, 3.592670e-02, 3.594817e-02, 3.596964e-02, 3.599112e-02, 3.601259e-02, 3.603406e-02, 3.605553e-02, 3.607700e-02, 3.609847e-02, 3.611994e-02, 3.614141e-02, 3.616288e-02, 3.618434e-02, 3.620581e-02, 3.622728e-02, 3.624875e-02, 3.627022e-02, 3.629168e-02, 3.631315e-02, 3.633462e-02, 3.635608e-02, 3.637755e-02, 3.639901e-02, 3.642048e-02, 3.644195e-02, 3.646341e-02, 3.648487e-02, 3.650634e-02, 3.652780e-02, 3.654927e-02, 3.657073e-02, 3.659219e-02, 3.661365e-02, 3.663512e-02, 3.665658e-02, 3.667804e-02, 3.669950e-02, 3.672096e-02, 3.674242e-02, 3.676388e-02, 3.678534e-02, 3.680680e-02, 3.682826e-02, 3.684972e-02, 3.687118e-02, 3.689263e-02, 3.691409e-02, 3.693555e-02, 3.695701e-02, 3.697846e-02, 3.699992e-02, 3.702138e-02, 3.704283e-02, 3.706429e-02, 3.708574e-02, 3.710720e-02, 3.712865e-02, 3.715011e-02, 3.717156e-02, 3.719302e-02, 3.721447e-02, 3.723592e-02, 3.725737e-02, 3.727882e-02, 3.730028e-02, 3.732173e-02, 3.734318e-02, 3.736463e-02, 3.738608e-02, 3.740753e-02, 3.742899e-02, 3.745043e-02, 3.747188e-02, 3.749333e-02, 3.751478e-02, 3.753623e-02, 3.755768e-02, 3.757913e-02, 3.760057e-02, 3.762202e-02, 3.764347e-02, 3.766492e-02, 3.768636e-02, 3.770781e-02, 3.772925e-02, 3.775070e-02, 3.777215e-02, 3.779359e-02, 3.781503e-02, 3.783648e-02, 3.785792e-02, 3.787936e-02, 3.790081e-02, 3.792225e-02, 3.794369e-02, 3.796513e-02, 3.798658e-02, 3.800802e-02, 3.802946e-02, 3.805090e-02, 3.807234e-02, 3.809378e-02, 3.811522e-02, 3.813666e-02, 3.815810e-02, 3.817954e-02, 3.820098e-02, 3.822242e-02, 3.824386e-02, 3.826529e-02, 3.828673e-02, 3.830817e-02, 3.832960e-02, 3.835104e-02, 3.837248e-02, 3.839391e-02, 3.841535e-02, 3.843678e-02, 3.845822e-02, 3.847965e-02, 3.850108e-02, 3.852252e-02, 3.854395e-02, 3.856539e-02, 3.858682e-02, 3.860825e-02, 3.862968e-02, 3.865112e-02, 3.867255e-02, 3.869398e-02, 3.871541e-02, 3.873684e-02, 3.875827e-02, 3.877970e-02, 3.880113e-02, 3.882256e-02, 3.884399e-02, 3.886542e-02, 3.888685e-02, 3.890827e-02, 3.892970e-02, 3.895113e-02, 3.897256e-02, 3.899398e-02, 3.901541e-02, 3.903684e-02, 3.905826e-02, 3.907969e-02, 3.910112e-02, 3.912254e-02, 3.914396e-02, 3.916539e-02, 3.918681e-02, 3.920824e-02, 3.922966e-02, 3.925108e-02, 3.927251e-02, 3.929393e-02, 3.931535e-02, 3.933677e-02, 3.935819e-02, 3.937962e-02, 3.940104e-02, 3.942246e-02, 3.944388e-02, 3.946530e-02, 3.948672e-02, 3.950813e-02, 3.952955e-02, 3.955097e-02, 3.957239e-02, 3.959381e-02, 3.961523e-02, 3.963665e-02, 3.965806e-02, 3.967948e-02, 3.970090e-02, 3.972231e-02, 3.974373e-02, 3.976514e-02, 3.978656e-02, 3.980797e-02, 3.982939e-02, 3.985080e-02, 3.987221e-02, 3.989363e-02, 3.991504e-02, 3.993645e-02, 3.995787e-02, 3.997928e-02, 4.000069e-02, 4.002210e-02, 4.004351e-02, 4.006492e-02, 4.008633e-02, 4.010775e-02, 4.012915e-02, 4.015056e-02, 4.017197e-02, 4.019338e-02, 4.021479e-02, 4.023620e-02, 4.025761e-02, 4.027902e-02, 4.030043e-02, 4.032183e-02, 4.034324e-02, 4.036465e-02, 4.038605e-02, 4.040746e-02, 4.042886e-02, 4.045027e-02, 4.047167e-02, 4.049308e-02, 4.051448e-02, 4.053589e-02, 4.055729e-02, 4.057869e-02, 4.060010e-02, 4.062150e-02, 4.064290e-02, 4.066430e-02, 4.068571e-02, 4.070711e-02, 4.072851e-02, 4.074991e-02, 4.077131e-02, 4.079271e-02, 4.081411e-02, 4.083551e-02, 4.085691e-02, 4.087831e-02, 4.089971e-02, 4.092110e-02, 4.094250e-02, 4.096390e-02, 4.098530e-02, 4.100670e-02, 4.102809e-02, 4.104949e-02, 4.107088e-02, 4.109228e-02, 4.111367e-02, 4.113507e-02, 4.115646e-02, 4.117786e-02, 4.119925e-02, 4.122065e-02, 4.124204e-02, 4.126344e-02, 4.128483e-02, 4.130622e-02, 4.132761e-02, 4.134900e-02, 4.137040e-02, 4.139179e-02, 4.141318e-02, 4.143457e-02, 4.145596e-02, 4.147735e-02, 4.149874e-02, 4.152013e-02, 4.154152e-02, 4.156290e-02, 4.158429e-02, 4.160568e-02, 4.162707e-02, 4.164846e-02, 4.166985e-02, 4.169123e-02, 4.171262e-02, 4.173401e-02, 4.175539e-02, 4.177678e-02, 4.179816e-02, 4.181955e-02, 4.184093e-02, 4.186232e-02, 4.188370e-02, 4.190508e-02, 4.192647e-02, 4.194785e-02, 4.196923e-02, 4.199062e-02, 4.201200e-02, 4.203338e-02, 4.205476e-02, 4.207614e-02, 4.209752e-02, 4.211890e-02, 4.214028e-02, 4.216166e-02, 4.218304e-02, 4.220442e-02, 4.222580e-02, 4.224718e-02, 4.226856e-02, 4.228994e-02, 4.231131e-02, 4.233269e-02, 4.235407e-02, 4.237545e-02, 4.239682e-02, 4.241820e-02, 4.243957e-02, 4.246095e-02, 4.248232e-02, 4.250370e-02, 4.252507e-02, 4.254645e-02, 4.256782e-02, 4.258920e-02, 4.261057e-02, 4.263194e-02, 4.265331e-02, 4.267469e-02, 4.269606e-02, 4.271743e-02, 4.273880e-02, 4.276017e-02, 4.278154e-02, 4.280291e-02, 4.282428e-02, 4.284566e-02, 4.286702e-02, 4.288839e-02, 4.290976e-02, 4.293113e-02, 4.295250e-02, 4.297386e-02, 4.299523e-02, 4.301660e-02, 4.303797e-02, 4.305933e-02, 4.308070e-02, 4.310207e-02, 4.312343e-02, 4.314480e-02, 4.316616e-02, 4.318753e-02, 4.320889e-02, 4.323025e-02, 4.325162e-02, 4.327298e-02, 4.329434e-02, 4.331571e-02, 4.333707e-02, 4.335843e-02, 4.337979e-02, 4.340116e-02, 4.342252e-02, 4.344388e-02, 4.346524e-02, 4.348660e-02, 4.350796e-02, 4.352932e-02, 4.355068e-02, 4.357204e-02, 4.359340e-02, 4.361476e-02, 4.363611e-02, 4.365747e-02, 4.367883e-02, 4.370018e-02, 4.372154e-02, 4.374290e-02, 4.376425e-02, 4.378561e-02, 4.380697e-02, 4.382832e-02, 4.384967e-02, 4.387103e-02, 4.389239e-02, 4.391374e-02, 4.393509e-02, 4.395645e-02, 4.397780e-02, 4.399915e-02, 4.402050e-02, 4.404185e-02, 4.406321e-02, 4.408456e-02, 4.410591e-02, 4.412726e-02, 4.414861e-02, 4.416996e-02, 4.419131e-02, 4.421266e-02, 4.423401e-02, 4.425536e-02, 4.427671e-02, 4.429806e-02, 4.431941e-02, 4.434075e-02, 4.436210e-02, 4.438345e-02, 4.440479e-02, 4.442614e-02, 4.444749e-02, 4.446883e-02, 4.449018e-02, 4.451152e-02, 4.453287e-02, 4.455421e-02, 4.457555e-02, 4.459690e-02, 4.461824e-02, 4.463959e-02, 4.466093e-02, 4.468227e-02, 4.470361e-02, 4.472496e-02, 4.474629e-02, 4.476764e-02, 4.478898e-02, 4.481032e-02, 4.483166e-02, 4.485300e-02, 4.487434e-02, 4.489568e-02, 4.491702e-02, 4.493836e-02, 4.495970e-02, 4.498103e-02, 4.500237e-02, 4.502371e-02, 4.504504e-02, 4.506639e-02, 4.508772e-02, 4.510906e-02, 4.513039e-02, 4.515173e-02, 4.517306e-02, 4.519439e-02, 4.521573e-02, 4.523707e-02, 4.525840e-02, 4.527974e-02, 4.530107e-02, 4.532240e-02, 4.534374e-02, 4.536507e-02, 4.538640e-02, 4.540773e-02, 4.542906e-02, 4.545039e-02, 4.547172e-02, 4.549306e-02, 4.551439e-02, 4.553572e-02, 4.555704e-02, 4.557838e-02, 4.559971e-02, 4.562103e-02, 4.564236e-02, 4.566369e-02, 4.568502e-02, 4.570635e-02, 4.572767e-02, 4.574900e-02, 4.577032e-02, 4.579165e-02, 4.581298e-02, 4.583430e-02, 4.585563e-02, 4.587695e-02, 4.589828e-02, 4.591960e-02, 4.594092e-02, 4.596225e-02, 4.598357e-02, 4.600490e-02, 4.602622e-02, 4.604754e-02, 4.606886e-02, 4.609019e-02, 4.611151e-02, 4.613283e-02, 4.615415e-02, 4.617546e-02, 4.619678e-02, 4.621811e-02, 4.623943e-02, 4.626075e-02, 4.628207e-02, 4.630338e-02, 4.632470e-02, 4.634602e-02, 4.636734e-02, 4.638866e-02, 4.640998e-02, 4.643129e-02, 4.645260e-02, 4.647392e-02, 4.649524e-02, 4.651656e-02, 4.653787e-02, 4.655918e-02, 4.658050e-02, 4.660181e-02, 4.662313e-02, 4.664444e-02, 4.666575e-02, 4.668707e-02, 4.670838e-02, 4.672969e-02, 4.675100e-02, 4.677232e-02, 4.679362e-02, 4.681493e-02, 4.683625e-02, 4.685756e-02, 4.687887e-02, 4.690018e-02, 4.692149e-02, 4.694280e-02, 4.696410e-02, 4.698541e-02, 4.700672e-02, 4.702803e-02, 4.704934e-02, 4.707064e-02, 4.709195e-02, 4.711326e-02, 4.713456e-02, 4.715587e-02, 4.717718e-02, 4.719848e-02, 4.721979e-02, 4.724109e-02, 4.726240e-02, 4.728370e-02, 4.730501e-02, 4.732631e-02, 4.734761e-02, 4.736891e-02, 4.739022e-02, 4.741152e-02, 4.743282e-02, 4.745413e-02, 4.747542e-02, 4.749672e-02, 4.751803e-02, 4.753933e-02, 4.756062e-02, 4.758192e-02, 4.760322e-02, 4.762452e-02, 4.764582e-02, 4.766712e-02, 4.768842e-02, 4.770972e-02, 4.773102e-02, 4.775231e-02, 4.777361e-02, 4.779491e-02, 4.781620e-02, 4.783750e-02, 4.785879e-02, 4.788009e-02, 4.790138e-02, 4.792268e-02, 4.794398e-02, 4.796527e-02, 4.798656e-02, 4.800785e-02, 4.802915e-02, 4.805044e-02, 4.807173e-02, 4.809302e-02, 4.811432e-02, 4.813560e-02, 4.815690e-02, 4.817819e-02, 4.819948e-02, 4.822077e-02, 4.824206e-02, 4.826335e-02, 4.828464e-02, 4.830593e-02, 4.832722e-02, 4.834851e-02, 4.836979e-02, 4.839108e-02, 4.841237e-02, 4.843366e-02, 4.845494e-02, 4.847623e-02, 4.849752e-02, 4.851880e-02, 4.854009e-02, 4.856138e-02, 4.858266e-02, 4.860394e-02, 4.862523e-02, 4.864651e-02, 4.866780e-02, 4.868908e-02, 4.871036e-02, 4.873164e-02, 4.875293e-02, 4.877421e-02, 4.879549e-02, 4.881677e-02, 4.883805e-02, 4.885934e-02, 4.888061e-02, 4.890190e-02, 4.892317e-02, 4.894445e-02, 4.896573e-02, 4.898701e-02, 4.900829e-02, 4.902957e-02, 4.905085e-02, 4.907213e-02, 4.909340e-02, 4.911468e-02, 4.913596e-02, 4.915724e-02, 4.917851e-02, 4.919979e-02, 4.922106e-02, 4.924234e-02, 4.926361e-02, 4.928489e-02, 4.930616e-02, 4.932744e-02, 4.934871e-02, 4.936998e-02, 4.939126e-02, 4.941253e-02, 4.943380e-02, 4.945507e-02, 4.947634e-02, 4.949762e-02, 4.951888e-02, 4.954015e-02, 4.956143e-02, 4.958270e-02, 4.960397e-02, 4.962524e-02, 4.964650e-02, 4.966778e-02, 4.968904e-02, 4.971031e-02, 4.973158e-02, 4.975285e-02, 4.977412e-02, 4.979539e-02, 4.981665e-02, 4.983792e-02, 4.985918e-02, 4.988045e-02, 4.990171e-02, 4.992298e-02, 4.994424e-02, 4.996551e-02, 4.998677e-02, 5.000804e-02, 5.002930e-02, 5.005056e-02, 5.007182e-02, 5.009309e-02, 5.011435e-02, 5.013561e-02, 5.015688e-02, 5.017814e-02, 5.019940e-02, 5.022066e-02, 5.024192e-02, 5.026318e-02, 5.028444e-02, 5.030570e-02, 5.032696e-02, 5.034821e-02, 5.036948e-02, 5.039074e-02, 5.041199e-02, 5.043325e-02, 5.045451e-02, 5.047576e-02, 5.049702e-02, 5.051827e-02, 5.053953e-02, 5.056079e-02, 5.058204e-02, 5.060330e-02, 5.062456e-02, 5.064581e-02, 5.066706e-02, 5.068832e-02, 5.070957e-02, 5.073082e-02, 5.075207e-02, 5.077333e-02, 5.079458e-02, 5.081583e-02, 5.083709e-02, 5.085834e-02, 5.087959e-02, 5.090084e-02, 5.092209e-02, 5.094334e-02, 5.096459e-02, 5.098584e-02, 5.100709e-02, 5.102834e-02, 5.104959e-02, 5.107084e-02, 5.109208e-02, 5.111333e-02, 5.113458e-02, 5.115582e-02, 5.117707e-02, 5.119831e-02, 5.121956e-02, 5.124081e-02, 5.126206e-02, 5.128330e-02, 5.130455e-02, 5.132579e-02, 5.134703e-02, 5.136828e-02, 5.138952e-02, 5.141076e-02, 5.143201e-02, 5.145325e-02, 5.147449e-02, 5.149573e-02, 5.151698e-02, 5.153822e-02, 5.155946e-02, 5.158070e-02, 5.160194e-02, 5.162318e-02, 5.164442e-02, 5.166566e-02, 5.168690e-02, 5.170814e-02, 5.172938e-02, 5.175062e-02, 5.177185e-02, 5.179309e-02, 5.181433e-02, 5.183557e-02, 5.185680e-02, 5.187804e-02, 5.189927e-02, 5.192051e-02, 5.194174e-02, 5.196298e-02, 5.198422e-02, 5.200545e-02, 5.202668e-02, 5.204792e-02, 5.206915e-02, 5.209038e-02, 5.211162e-02, 5.213285e-02, 5.215408e-02, 5.217532e-02, 5.219655e-02, 5.221777e-02, 5.223901e-02, 5.226024e-02, 5.228147e-02, 5.230270e-02, 5.232393e-02, 5.234516e-02, 5.236639e-02, 5.238762e-02, 5.240885e-02, 5.243007e-02, 5.245130e-02, 5.247253e-02, 5.249376e-02, 5.251498e-02, 5.253621e-02, 5.255743e-02, 5.257867e-02, 5.259989e-02, 5.262111e-02, 5.264234e-02, 5.266356e-02, 5.268479e-02, 5.270601e-02, 5.272724e-02, 5.274846e-02, 5.276968e-02, 5.279091e-02, 5.281213e-02, 5.283336e-02, 5.285458e-02, 5.287580e-02, 5.289701e-02, 5.291824e-02, 5.293946e-02, 5.296068e-02, 5.298190e-02, 5.300312e-02, 5.302434e-02, 5.304556e-02, 5.306678e-02, 5.308800e-02, 5.310921e-02, 5.313043e-02, 5.315165e-02, 5.317286e-02, 5.319408e-02, 5.321530e-02, 5.323652e-02, 5.325773e-02, 5.327895e-02, 5.330016e-02, 5.332138e-02, 5.334260e-02, 5.336381e-02, 5.338502e-02, 5.340624e-02, 5.342745e-02, 5.344867e-02, 5.346988e-02, 5.349109e-02, 5.351231e-02, 5.353351e-02, 5.355472e-02, 5.357594e-02, 5.359715e-02, 5.361836e-02, 5.363957e-02, 5.366078e-02, 5.368199e-02, 5.370320e-02, 5.372441e-02, 5.374562e-02, 5.376683e-02, 5.378804e-02, 5.380924e-02, 5.383045e-02, 5.385166e-02, 5.387286e-02, 5.389407e-02, 5.391528e-02, 5.393649e-02, 5.395769e-02, 5.397889e-02, 5.400010e-02, 5.402130e-02, 5.404251e-02, 5.406372e-02, 5.408492e-02, 5.410612e-02, 5.412732e-02, 5.414853e-02, 5.416973e-02, 5.419093e-02, 5.421213e-02, 5.423333e-02, 5.425454e-02, 5.427574e-02, 5.429694e-02, 5.431814e-02, 5.433934e-02, 5.436054e-02, 5.438174e-02, 5.440294e-02, 5.442414e-02, 5.444534e-02, 5.446653e-02, 5.448774e-02, 5.450893e-02, 5.453013e-02, 5.455133e-02, 5.457252e-02, 5.459372e-02, 5.461492e-02, 5.463611e-02, 5.465731e-02, 5.467850e-02, 5.469970e-02, 5.472089e-02, 5.474209e-02, 5.476328e-02, 5.478447e-02, 5.480567e-02, 5.482686e-02, 5.484805e-02, 5.486925e-02, 5.489044e-02, 5.491163e-02, 5.493282e-02, 5.495401e-02, 5.497520e-02, 5.499639e-02, 5.501758e-02, 5.503878e-02, 5.505996e-02, 5.508115e-02, 5.510234e-02, 5.512353e-02, 5.514472e-02, 5.516591e-02, 5.518709e-02, 5.520828e-02, 5.522947e-02, 5.525066e-02, 5.527184e-02, 5.529303e-02, 5.531422e-02, 5.533540e-02, 5.535659e-02, 5.537777e-02, 5.539896e-02, 5.542014e-02, 5.544132e-02, 5.546251e-02, 5.548369e-02, 5.550487e-02, 5.552606e-02, 5.554724e-02, 5.556842e-02, 5.558960e-02, 5.561078e-02, 5.563197e-02, 5.565314e-02, 5.567433e-02, 5.569551e-02, 5.571669e-02, 5.573787e-02, 5.575905e-02, 5.578022e-02, 5.580141e-02, 5.582258e-02, 5.584376e-02, 5.586494e-02, 5.588612e-02, 5.590729e-02, 5.592847e-02, 5.594965e-02, 5.597083e-02, 5.599200e-02, 5.601317e-02, 5.603435e-02, 5.605552e-02, 5.607670e-02, 5.609788e-02, 5.611905e-02, 5.614022e-02, 5.616140e-02, 5.618257e-02, 5.620374e-02, 5.622491e-02, 5.624609e-02, 5.626726e-02, 5.628843e-02, 5.630960e-02, 5.633077e-02, 5.635194e-02, 5.637311e-02, 5.639428e-02, 5.641545e-02, 5.643662e-02, 5.645779e-02, 5.647896e-02, 5.650013e-02, 5.652130e-02, 5.654246e-02, 5.656363e-02, 5.658480e-02, 5.660596e-02, 5.662713e-02, 5.664830e-02, 5.666947e-02, 5.669063e-02, 5.671180e-02, 5.673296e-02, 5.675412e-02, 5.677529e-02, 5.679645e-02, 5.681762e-02, 5.683878e-02, 5.685994e-02, 5.688111e-02, 5.690227e-02, 5.692343e-02, 5.694459e-02, 5.696575e-02, 5.698692e-02, 5.700808e-02, 5.702924e-02, 5.705040e-02, 5.707156e-02, 5.709272e-02, 5.711388e-02, 5.713504e-02, 5.715620e-02, 5.717736e-02, 5.719851e-02, 5.721967e-02, 5.724083e-02, 5.726198e-02, 5.728314e-02, 5.730430e-02, 5.732546e-02, 5.734661e-02, 5.736777e-02, 5.738892e-02, 5.741008e-02, 5.743123e-02, 5.745239e-02, 5.747354e-02, 5.749470e-02, 5.751585e-02, 5.753700e-02, 5.755815e-02, 5.757931e-02, 5.760046e-02, 5.762161e-02, 5.764277e-02, 5.766392e-02, 5.768507e-02, 5.770621e-02, 5.772737e-02, 5.774852e-02, 5.776967e-02, 5.779082e-02, 5.781197e-02, 5.783312e-02, 5.785426e-02, 5.787541e-02, 5.789656e-02, 5.791771e-02, 5.793886e-02, 5.796000e-02, 5.798115e-02, 5.800229e-02, 5.802344e-02, 5.804459e-02, 5.806573e-02, 5.808688e-02, 5.810802e-02, 5.812917e-02, 5.815031e-02, 5.817145e-02, 5.819260e-02, 5.821374e-02, 5.823489e-02, 5.825603e-02, 5.827717e-02, 5.829831e-02, 5.831946e-02, 5.834059e-02, 5.836174e-02, 5.838288e-02, 5.840402e-02, 5.842516e-02, 5.844630e-02, 5.846744e-02, 5.848858e-02, 5.850972e-02, 5.853086e-02, 5.855199e-02, 5.857313e-02, 5.859427e-02, 5.861541e-02, 5.863654e-02, 5.865768e-02, 5.867882e-02, 5.869995e-02, 5.872109e-02, 5.874223e-02, 5.876336e-02, 5.878450e-02, 5.880563e-02, 5.882677e-02, 5.884790e-02, 5.886903e-02, 5.889016e-02, 5.891130e-02, 5.893243e-02, 5.895357e-02, 5.897470e-02, 5.899583e-02, 5.901696e-02, 5.903809e-02, 5.905923e-02, 5.908035e-02, 5.910148e-02, 5.912261e-02, 5.914374e-02, 5.916487e-02, 5.918600e-02, 5.920713e-02, 5.922826e-02, 5.924939e-02, 5.927052e-02, 5.929164e-02, 5.931277e-02, 5.933389e-02, 5.935502e-02, 5.937615e-02, 5.939728e-02, 5.941840e-02, 5.943953e-02, 5.946065e-02, 5.948178e-02, 5.950290e-02, 5.952403e-02, 5.954515e-02, 5.956627e-02, 5.958740e-02, 5.960852e-02, 5.962964e-02, 5.965076e-02, 5.967189e-02, 5.969300e-02, 5.971413e-02, 5.973525e-02, 5.975637e-02, 5.977749e-02, 5.979861e-02, 5.981973e-02, 5.984085e-02, 5.986197e-02, 5.988309e-02, 5.990421e-02, 5.992533e-02, 5.994644e-02, 5.996756e-02, 5.998868e-02, 6.000979e-02, 6.003091e-02, 6.005203e-02, 6.007315e-02, 6.009426e-02, 6.011537e-02, 6.013649e-02, 6.015761e-02, 6.017872e-02, 6.019983e-02, 6.022095e-02, 6.024206e-02, 6.026318e-02, 6.028429e-02, 6.030541e-02, 6.032652e-02, 6.034763e-02, 6.036874e-02, 6.038985e-02, 6.041096e-02, 6.043207e-02, 6.045318e-02, 6.047429e-02, 6.049540e-02, 6.051651e-02, 6.053762e-02, 6.055873e-02, 6.057984e-02, 6.060095e-02, 6.062206e-02, 6.064316e-02, 6.066427e-02, 6.068538e-02, 6.070649e-02, 6.072759e-02, 6.074870e-02, 6.076981e-02, 6.079091e-02, 6.081202e-02, 6.083312e-02, 6.085422e-02, 6.087533e-02, 6.089643e-02, 6.091753e-02, 6.093864e-02, 6.095975e-02, 6.098085e-02, 6.100195e-02, 6.102305e-02, 6.104415e-02, 6.106526e-02, 6.108636e-02, 6.110746e-02, 6.112856e-02, 6.114966e-02, 6.117076e-02, 6.119186e-02, 6.121296e-02, 6.123406e-02, 6.125515e-02, 6.127625e-02, 6.129735e-02, 6.131845e-02, 6.133955e-02, 6.136064e-02, 6.138174e-02, 6.140283e-02, 6.142393e-02, 6.144503e-02, 6.146613e-02, 6.148722e-02, 6.150832e-02, 6.152941e-02, 6.155051e-02, 6.157160e-02, 6.159269e-02, 6.161379e-02, 6.163488e-02, 6.165597e-02, 6.167707e-02, 6.169816e-02, 6.171925e-02, 6.174034e-02, 6.176143e-02, 6.178253e-02, 6.180362e-02, 6.182471e-02, 6.184579e-02, 6.186688e-02, 6.188798e-02, 6.190906e-02, 6.193015e-02, 6.195124e-02, 6.197233e-02, 6.199342e-02, 6.201451e-02, 6.203559e-02, 6.205668e-02, 6.207777e-02, 6.209886e-02, 6.211994e-02, 6.214102e-02, 6.216211e-02, 6.218320e-02, 6.220428e-02, 6.222536e-02, 6.224645e-02, 6.226753e-02, 6.228862e-02, 6.230970e-02, 6.233079e-02, 6.235187e-02, 6.237295e-02, 6.239403e-02, 6.241512e-02, 6.243619e-02, 6.245728e-02, 6.247836e-02, 6.249944e-02, 6.252052e-02, 6.254160e-02, 6.256267e-02, 6.258376e-02, 6.260484e-02, 6.262591e-02, 6.264700e-02, 6.266808e-02, 6.268915e-02, 6.271023e-02, 6.273130e-02, 6.275238e-02, 6.277346e-02, 6.279454e-02, 6.281561e-02, 6.283669e-02, 6.285776e-02, 6.287884e-02, 6.289991e-02, 6.292099e-02, 6.294206e-02, 6.296314e-02, 6.298421e-02, 6.300528e-02, 6.302635e-02, 6.304742e-02, 6.306850e-02, 6.308957e-02, 6.311065e-02, 6.313171e-02, 6.315279e-02, 6.317385e-02, 6.319493e-02, 6.321599e-02, 6.323707e-02, 6.325813e-02, 6.327920e-02, 6.330027e-02, 6.332134e-02, 6.334241e-02, 6.336349e-02, 6.338455e-02, 6.340561e-02, 6.342668e-02, 6.344775e-02, 6.346881e-02, 6.348988e-02, 6.351095e-02, 6.353202e-02, 6.355308e-02, 6.357414e-02, 6.359521e-02, 6.361627e-02, 6.363734e-02, 6.365840e-02, 6.367946e-02, 6.370053e-02, 6.372159e-02, 6.374265e-02, 6.376372e-02, 6.378478e-02, 6.380584e-02, 6.382690e-02, 6.384796e-02, 6.386902e-02, 6.389008e-02, 6.391114e-02, 6.393220e-02, 6.395326e-02, 6.397431e-02, 6.399538e-02, 6.401644e-02, 6.403749e-02, 6.405855e-02, 6.407961e-02, 6.410066e-02, 6.412172e-02, 6.414278e-02, 6.416383e-02, 6.418489e-02, 6.420595e-02, 6.422700e-02, 6.424806e-02, 6.426912e-02, 6.429017e-02, 6.431122e-02, 6.433228e-02, 6.435332e-02, 6.437438e-02, 6.439544e-02, 6.441649e-02, 6.443754e-02, 6.445859e-02, 6.447964e-02, 6.450070e-02, 6.452174e-02, 6.454280e-02, 6.456385e-02, 6.458490e-02, 6.460595e-02, 6.462699e-02, 6.464805e-02, 6.466909e-02, 6.469014e-02, 6.471119e-02, 6.473224e-02, 6.475329e-02, 6.477433e-02, 6.479538e-02, 6.481643e-02, 6.483748e-02, 6.485852e-02, 6.487957e-02, 6.490061e-02, 6.492166e-02, 6.494270e-02, 6.496375e-02, 6.498479e-02, 6.500584e-02, 6.502688e-02, 6.504792e-02, 6.506897e-02, 6.509001e-02, 6.511105e-02, 6.513209e-02, 6.515314e-02, 6.517418e-02, 6.519522e-02, 6.521626e-02, 6.523731e-02, 6.525835e-02, 6.527938e-02, 6.530042e-02, 6.532146e-02, 6.534250e-02, 6.536354e-02, 6.538458e-02, 6.540561e-02, 6.542666e-02, 6.544769e-02, 6.546873e-02, 6.548977e-02, 6.551080e-02, 6.553184e-02, 6.555288e-02, 6.557391e-02, 6.559495e-02, 6.561598e-02, 6.563701e-02, 6.565805e-02, 6.567908e-02, 6.570012e-02, 6.572115e-02, 6.574219e-02, 6.576322e-02, 6.578425e-02, 6.580528e-02, 6.582632e-02, 6.584734e-02, 6.586838e-02, 6.588941e-02, 6.591044e-02, 6.593148e-02, 6.595250e-02, 6.597354e-02, 6.599456e-02, 6.601559e-02, 6.603662e-02, 6.605765e-02, 6.607868e-02, 6.609970e-02, 6.612074e-02, 6.614176e-02, 6.616279e-02, 6.618381e-02, 6.620484e-02, 6.622586e-02, 6.624690e-02, 6.626792e-02, 6.628895e-02, 6.630997e-02, 6.633099e-02, 6.635202e-02, 6.637304e-02, 6.639406e-02, 6.641509e-02, 6.643611e-02, 6.645713e-02, 6.647816e-02, 6.649917e-02, 6.652020e-02, 6.654122e-02, 6.656224e-02, 6.658327e-02, 6.660429e-02, 6.662530e-02, 6.664632e-02, 6.666735e-02, 6.668837e-02, 6.670938e-02, 6.673040e-02, 6.675142e-02, 6.677244e-02, 6.679346e-02, 6.681447e-02, 6.683549e-02, 6.685651e-02, 6.687753e-02, 6.689854e-02, 6.691957e-02, 6.694058e-02, 6.696159e-02, 6.698261e-02, 6.700362e-02, 6.702464e-02, 6.704565e-02, 6.706667e-02, 6.708768e-02, 6.710869e-02, 6.712970e-02, 6.715072e-02, 6.717173e-02, 6.719274e-02, 6.721375e-02, 6.723477e-02, 6.725578e-02, 6.727678e-02, 6.729780e-02, 6.731881e-02, 6.733982e-02, 6.736083e-02, 6.738184e-02, 6.740285e-02, 6.742386e-02, 6.744487e-02, 6.746588e-02, 6.748688e-02, 6.750789e-02, 6.752890e-02, 6.754991e-02, 6.757091e-02, 6.759192e-02, 6.761292e-02, 6.763393e-02, 6.765493e-02, 6.767593e-02, 6.769694e-02, 6.771795e-02, 6.773895e-02, 6.775995e-02, 6.778096e-02, 6.780196e-02, 6.782296e-02, 6.784397e-02, 6.786497e-02, 6.788597e-02, 6.790698e-02, 6.792798e-02, 6.794897e-02, 6.796998e-02, 6.799097e-02, 6.801198e-02, 6.803298e-02, 6.805398e-02, 6.807498e-02, 6.809597e-02, 6.811698e-02, 6.813797e-02, 6.815897e-02, 6.817997e-02, 6.820097e-02, 6.822196e-02, 6.824296e-02, 6.826396e-02, 6.828495e-02, 6.830595e-02, 6.832694e-02, 6.834795e-02, 6.836893e-02, 6.838993e-02, 6.841093e-02, 6.843192e-02, 6.845291e-02, 6.847391e-02, 6.849490e-02, 6.851590e-02, 6.853689e-02, 6.855788e-02, 6.857887e-02, 6.859986e-02, 6.862085e-02, 6.864184e-02, 6.866283e-02, 6.868383e-02, 6.870481e-02, 6.872580e-02, 6.874679e-02, 6.876779e-02, 6.878877e-02, 6.880976e-02, 6.883075e-02, 6.885174e-02, 6.887273e-02, 6.889372e-02, 6.891470e-02, 6.893568e-02, 6.895667e-02, 6.897765e-02, 6.899864e-02, 6.901963e-02, 6.904061e-02, 6.906160e-02, 6.908259e-02, 6.910357e-02, 6.912455e-02, 6.914554e-02, 6.916652e-02, 6.918750e-02, 6.920849e-02, 6.922947e-02, 6.925046e-02, 6.927144e-02, 6.929242e-02, 6.931339e-02, 6.933437e-02, 6.935535e-02, 6.937634e-02, 6.939732e-02, 6.941830e-02, 6.943928e-02, 6.946026e-02, 6.948124e-02, 6.950221e-02, 6.952319e-02, 6.954417e-02, 6.956515e-02, 6.958613e-02, 6.960710e-02, 6.962808e-02, 6.964906e-02, 6.967003e-02, 6.969101e-02, 6.971198e-02, 6.973296e-02, 6.975393e-02, 6.977491e-02, 6.979588e-02, 6.981686e-02, 6.983783e-02, 6.985880e-02, 6.987978e-02, 6.990074e-02, 6.992172e-02, 6.994270e-02, 6.996366e-02, 6.998464e-02, 7.000561e-02, 7.002658e-02, 7.004755e-02, 7.006852e-02, 7.008949e-02, 7.011046e-02, 7.013143e-02, 7.015240e-02, 7.017337e-02, 7.019433e-02, 7.021530e-02, 7.023627e-02, 7.025724e-02, 7.027820e-02, 7.029917e-02, 7.032014e-02, 7.034111e-02, 7.036208e-02, 7.038304e-02, 7.040401e-02, 7.042497e-02, 7.044593e-02, 7.046690e-02, 7.048786e-02, 7.050882e-02, 7.052979e-02, 7.055075e-02, 7.057171e-02, 7.059268e-02, 7.061365e-02, 7.063460e-02, 7.065556e-02, 7.067653e-02, 7.069749e-02, 7.071845e-02, 7.073941e-02, 7.076037e-02, 7.078133e-02, 7.080229e-02, 7.082325e-02, 7.084420e-02, 7.086517e-02, 7.088613e-02, 7.090708e-02, 7.092804e-02, 7.094900e-02, 7.096995e-02, 7.099091e-02, 7.101187e-02, 7.103282e-02, 7.105378e-02, 7.107474e-02, 7.109569e-02, 7.111665e-02, 7.113760e-02, 7.115856e-02, 7.117952e-02, 7.120046e-02, 7.122142e-02, 7.124237e-02, 7.126332e-02, 7.128428e-02, 7.130523e-02, 7.132618e-02, 7.134713e-02, 7.136808e-02, 7.138903e-02, 7.140999e-02, 7.143094e-02, 7.145189e-02, 7.147283e-02, 7.149378e-02, 7.151473e-02, 7.153568e-02, 7.155664e-02, 7.157759e-02, 7.159853e-02, 7.161947e-02, 7.164042e-02, 7.166137e-02, 7.168232e-02, 7.170326e-02, 7.172421e-02, 7.174516e-02, 7.176610e-02, 7.178704e-02, 7.180800e-02, 7.182894e-02, 7.184988e-02, 7.187083e-02, 7.189178e-02, 7.191272e-02, 7.193366e-02, 7.195460e-02, 7.197554e-02, 7.199649e-02, 7.201743e-02, 7.203837e-02, 7.205931e-02, 7.208025e-02, 7.210120e-02, 7.212213e-02, 7.214307e-02, 7.216401e-02, 7.218496e-02, 7.220589e-02, 7.222683e-02, 7.224777e-02, 7.226871e-02, 7.228965e-02, 7.231058e-02, 7.233153e-02, 7.235246e-02, 7.237340e-02, 7.239433e-02, 7.241527e-02, 7.243621e-02, 7.245714e-02, 7.247807e-02, 7.249901e-02, 7.251994e-02, 7.254088e-02, 7.256182e-02, 7.258274e-02, 7.260368e-02, 7.262462e-02, 7.264555e-02, 7.266648e-02, 7.268742e-02, 7.270834e-02, 7.272927e-02, 7.275021e-02, 7.277114e-02, 7.279207e-02, 7.281300e-02, 7.283393e-02, 7.285486e-02, 7.287579e-02, 7.289672e-02, 7.291765e-02, 7.293858e-02, 7.295951e-02, 7.298043e-02, 7.300135e-02, 7.302228e-02, 7.304321e-02, 7.306414e-02, 7.308507e-02, 7.310599e-02, 7.312692e-02, 7.314784e-02, 7.316877e-02, 7.318970e-02, 7.321062e-02, 7.323155e-02, 7.325247e-02, 7.327339e-02, 7.329432e-02, 7.331524e-02, 7.333616e-02, 7.335709e-02, 7.337800e-02, 7.339893e-02, 7.341985e-02, 7.344078e-02, 7.346170e-02, 7.348261e-02, 7.350354e-02, 7.352445e-02, 7.354537e-02, 7.356630e-02, 7.358721e-02, 7.360813e-02, 7.362905e-02, 7.364997e-02, 7.367089e-02, 7.369180e-02, 7.371272e-02, 7.373364e-02, 7.375456e-02, 7.377547e-02, 7.379639e-02, 7.381731e-02, 7.383822e-02, 7.385914e-02, 7.388005e-02, 7.390097e-02, 7.392188e-02, 7.394280e-02, 7.396371e-02, 7.398462e-02, 7.400553e-02, 7.402645e-02, 7.404736e-02, 7.406827e-02, 7.408918e-02, 7.411010e-02, 7.413101e-02, 7.415192e-02, 7.417282e-02, 7.419374e-02, 7.421465e-02, 7.423556e-02, 7.425647e-02, 7.427738e-02, 7.429829e-02, 7.431920e-02, 7.434011e-02, 7.436101e-02, 7.438192e-02, 7.440283e-02, 7.442374e-02, 7.444464e-02, 7.446555e-02, 7.448646e-02, 7.450736e-02, 7.452827e-02, 7.454917e-02, 7.457007e-02, 7.459098e-02, 7.461188e-02, 7.463279e-02, 7.465369e-02, 7.467460e-02, 7.469550e-02, 7.471640e-02, 7.473730e-02, 7.475821e-02, 7.477911e-02, 7.480001e-02, 7.482091e-02, 7.484181e-02, 7.486271e-02, 7.488362e-02, 7.490451e-02, 7.492542e-02, 7.494631e-02, 7.496721e-02, 7.498811e-02, 7.500901e-02, 7.502991e-02, 7.505080e-02, 7.507171e-02, 7.509260e-02, 7.511350e-02, 7.513440e-02, 7.515529e-02, 7.517619e-02, 7.519709e-02, 7.521798e-02, 7.523888e-02, 7.525977e-02, 7.528067e-02, 7.530156e-02, 7.532245e-02, 7.534335e-02, 7.536424e-02, 7.538513e-02, 7.540602e-02, 7.542692e-02, 7.544781e-02, 7.546870e-02, 7.548960e-02, 7.551049e-02, 7.553138e-02, 7.555227e-02, 7.557316e-02, 7.559405e-02, 7.561494e-02, 7.563583e-02, 7.565671e-02, 7.567760e-02, 7.569849e-02, 7.571938e-02, 7.574027e-02, 7.576115e-02, 7.578205e-02, 7.580293e-02, 7.582382e-02, 7.584471e-02, 7.586560e-02, 7.588648e-02, 7.590736e-02, 7.592825e-02, 7.594913e-02, 7.597002e-02, 7.599091e-02, 7.601179e-02, 7.603267e-02, 7.605355e-02, 7.607444e-02, 7.609532e-02, 7.611620e-02, 7.613709e-02, 7.615797e-02, 7.617885e-02, 7.619973e-02, 7.622062e-02, 7.624149e-02, 7.626238e-02, 7.628325e-02, 7.630413e-02, 7.632501e-02, 7.634589e-02, 7.636677e-02, 7.638765e-02, 7.640853e-02, 7.642940e-02, 7.645029e-02, 7.647116e-02, 7.649204e-02, 7.651292e-02, 7.653379e-02, 7.655467e-02, 7.657555e-02, 7.659642e-02, 7.661730e-02, 7.663817e-02, 7.665905e-02, 7.667992e-02, 7.670080e-02, 7.672167e-02, 7.674254e-02, 7.676341e-02, 7.678429e-02, 7.680516e-02, 7.682603e-02, 7.684691e-02, 7.686777e-02, 7.688865e-02, 7.690952e-02, 7.693039e-02, 7.695126e-02, 7.697213e-02, 7.699300e-02, 7.701387e-02, 7.703473e-02, 7.705560e-02, 7.707647e-02, 7.709734e-02, 7.711821e-02, 7.713908e-02, 7.715995e-02, 7.718082e-02, 7.720169e-02, 7.722255e-02, 7.724342e-02, 7.726428e-02, 7.728515e-02, 7.730601e-02, 7.732688e-02, 7.734774e-02, 7.736861e-02, 7.738947e-02, 7.741034e-02, 7.743120e-02, 7.745206e-02, 7.747293e-02, 7.749379e-02, 7.751465e-02, 7.753551e-02, 7.755637e-02, 7.757723e-02, 7.759810e-02, 7.761896e-02, 7.763982e-02, 7.766068e-02, 7.768153e-02, 7.770240e-02, 7.772326e-02, 7.774412e-02, 7.776497e-02, 7.778583e-02, 7.780669e-02, 7.782755e-02, 7.784841e-02, 7.786926e-02, 7.789012e-02, 7.791097e-02, 7.793184e-02, 7.795269e-02, 7.797354e-02, 7.799440e-02, 7.801526e-02, 7.803611e-02, 7.805696e-02, 7.807782e-02, 7.809868e-02, 7.811953e-02, 7.814038e-02, 7.816123e-02, 7.818209e-02, 7.820294e-02, 7.822379e-02, 7.824464e-02, 7.826550e-02, 7.828635e-02, 7.830720e-02, 7.832805e-02, 7.834890e-02, 7.836974e-02, 7.839060e-02, 7.841145e-02, 7.843229e-02, 7.845315e-02, 7.847399e-02, 7.849485e-02, 7.851569e-02, 7.853654e-02, 7.855739e-02, 7.857823e-02, 7.859907e-02, 7.861992e-02, 7.864077e-02, 7.866162e-02, 7.868246e-02, 7.870331e-02, 7.872415e-02, 7.874500e-02, 7.876584e-02, 7.878668e-02, 7.880753e-02, 7.882837e-02, 7.884921e-02, 7.887006e-02, 7.889090e-02, 7.891174e-02, 7.893258e-02, 7.895342e-02, 7.897427e-02, 7.899511e-02, 7.901595e-02, 7.903679e-02, 7.905763e-02, 7.907847e-02, 7.909930e-02, 7.912014e-02, 7.914099e-02, 7.916182e-02, 7.918266e-02, 7.920350e-02, 7.922434e-02, 7.924518e-02, 7.926601e-02, 7.928685e-02, 7.930769e-02, 7.932852e-02, 7.934935e-02, 7.937019e-02, 7.939103e-02, 7.941186e-02, 7.943270e-02, 7.945354e-02, 7.947437e-02, 7.949520e-02, 7.951603e-02, 7.953686e-02, 7.955770e-02, 7.957853e-02, 7.959937e-02, 7.962020e-02, 7.964103e-02, 7.966186e-02, 7.968269e-02, 7.970352e-02, 7.972435e-02, 7.974518e-02, 7.976601e-02, 7.978684e-02, 7.980768e-02, 7.982850e-02, 7.984933e-02, 7.987016e-02, 7.989098e-02, 7.991181e-02, 7.993264e-02, 7.995347e-02, 7.997429e-02, 7.999512e-02, 8.001594e-02, 8.003677e-02, 8.005760e-02, 8.007842e-02, 8.009925e-02, 8.012007e-02, 8.014090e-02, 8.016172e-02, 8.018254e-02, 8.020337e-02, 8.022419e-02, 8.024501e-02, 8.026584e-02, 8.028666e-02, 8.030748e-02, 8.032830e-02, 8.034912e-02, 8.036995e-02, 8.039077e-02, 8.041159e-02, 8.043241e-02, 8.045322e-02, 8.047405e-02, 8.049487e-02, 8.051569e-02, 8.053650e-02, 8.055732e-02, 8.057814e-02, 8.059896e-02, 8.061977e-02, 8.064060e-02, 8.066141e-02, 8.068223e-02, 8.070304e-02, 8.072386e-02, 8.074468e-02, 8.076549e-02, 8.078631e-02, 8.080712e-02, 8.082794e-02, 8.084875e-02, 8.086956e-02, 8.089038e-02, 8.091119e-02, 8.093201e-02, 8.095282e-02, 8.097363e-02, 8.099444e-02, 8.101525e-02, 8.103606e-02, 8.105687e-02, 8.107769e-02, 8.109850e-02, 8.111931e-02, 8.114012e-02, 8.116093e-02, 8.118173e-02, 8.120254e-02, 8.122335e-02, 8.124416e-02, 8.126497e-02, 8.128577e-02, 8.130658e-02, 8.132739e-02, 8.134820e-02, 8.136901e-02, 8.138981e-02, 8.141062e-02, 8.143143e-02, 8.145223e-02, 8.147304e-02, 8.149384e-02, 8.151464e-02, 8.153545e-02, 8.155625e-02, 8.157706e-02, 8.159786e-02, 8.161866e-02, 8.163947e-02, 8.166027e-02, 8.168107e-02, 8.170187e-02, 8.172267e-02, 8.174348e-02, 8.176427e-02, 8.178508e-02, 8.180588e-02, 8.182668e-02, 8.184748e-02, 8.186828e-02, 8.188908e-02, 8.190987e-02, 8.193067e-02, 8.195148e-02, 8.197227e-02, 8.199307e-02, 8.201387e-02, 8.203466e-02, 8.205546e-02, 8.207626e-02, 8.209705e-02, 8.211785e-02, 8.213864e-02, 8.215944e-02, 8.218023e-02, 8.220103e-02, 8.222182e-02, 8.224262e-02, 8.226341e-02, 8.228420e-02, 8.230499e-02, 8.232579e-02, 8.234658e-02, 8.236738e-02, 8.238816e-02, 8.240896e-02, 8.242975e-02, 8.245054e-02, 8.247133e-02, 8.249212e-02, 8.251292e-02, 8.253370e-02, 8.255450e-02, 8.257528e-02, 8.259607e-02, 8.261686e-02, 8.263765e-02, 8.265843e-02, 8.267923e-02, 8.270001e-02, 8.272080e-02, 8.274158e-02, 8.276238e-02, 8.278316e-02, 8.280394e-02, 8.282473e-02, 8.284552e-02, 8.286630e-02, 8.288708e-02, 8.290787e-02, 8.292865e-02, 8.294944e-02, 8.297022e-02, 8.299100e-02, 8.301179e-02, 8.303257e-02, 8.305335e-02, 8.307414e-02, 8.309492e-02, 8.311570e-02, 8.313648e-02, 8.315726e-02, 8.317804e-02, 8.319882e-02, 8.321960e-02, 8.324038e-02, 8.326116e-02, 8.328194e-02, 8.330272e-02, 8.332350e-02, 8.334427e-02, 8.336505e-02, 8.338583e-02, 8.340661e-02, 8.342738e-02, 8.344816e-02, 8.346894e-02, 8.348972e-02, 8.351049e-02, 8.353126e-02, 8.355204e-02, 8.357282e-02, 8.359359e-02, 8.361436e-02, 8.363514e-02, 8.365592e-02, 8.367669e-02, 8.369746e-02, 8.371823e-02, 8.373901e-02, 8.375978e-02, 8.378055e-02, 8.380132e-02, 8.382209e-02, 8.384287e-02, 8.386364e-02, 8.388440e-02, 8.390518e-02, 8.392594e-02, 8.394671e-02, 8.396748e-02, 8.398826e-02, 8.400902e-02, 8.402979e-02, 8.405056e-02, 8.407133e-02, 8.409210e-02, 8.411286e-02, 8.413363e-02, 8.415440e-02, 8.417516e-02, 8.419593e-02, 8.421669e-02, 8.423746e-02, 8.425822e-02, 8.427899e-02, 8.429975e-02, 8.432052e-02, 8.434128e-02, 8.436204e-02, 8.438280e-02, 8.440357e-02, 8.442433e-02, 8.444510e-02, 8.446585e-02, 8.448662e-02, 8.450738e-02, 8.452814e-02, 8.454890e-02, 8.456966e-02, 8.459043e-02, 8.461118e-02, 8.463194e-02, 8.465271e-02, 8.467346e-02, 8.469422e-02, 8.471498e-02, 8.473574e-02, 8.475649e-02, 8.477725e-02, 8.479801e-02, 8.481877e-02, 8.483952e-02, 8.486028e-02, 8.488104e-02, 8.490179e-02, 8.492254e-02, 8.494330e-02, 8.496406e-02, 8.498481e-02, 8.500557e-02, 8.502632e-02, 8.504707e-02, 8.506782e-02, 8.508858e-02, 8.510933e-02, 8.513009e-02, 8.515084e-02, 8.517159e-02, 8.519235e-02, 8.521309e-02, 8.523384e-02, 8.525459e-02, 8.527534e-02, 8.529609e-02, 8.531684e-02, 8.533759e-02, 8.535834e-02, 8.537909e-02, 8.539984e-02, 8.542059e-02, 8.544134e-02, 8.546209e-02, 8.548283e-02, 8.550359e-02, 8.552433e-02, 8.554507e-02, 8.556582e-02, 8.558656e-02, 8.560731e-02, 8.562806e-02, 8.564880e-02, 8.566955e-02, 8.569029e-02, 8.571104e-02, 8.573177e-02, 8.575252e-02, 8.577327e-02, 8.579401e-02, 8.581475e-02, 8.583549e-02, 8.585624e-02, 8.587698e-02, 8.589772e-02, 8.591846e-02, 8.593921e-02, 8.595994e-02, 8.598068e-02, 8.600143e-02, 8.602216e-02, 8.604290e-02, 8.606364e-02, 8.608438e-02, 8.610512e-02, 8.612585e-02, 8.614659e-02, 8.616734e-02, 8.618807e-02, 8.620881e-02, 8.622954e-02, 8.625028e-02, 8.627102e-02, 8.629175e-02, 8.631249e-02, 8.633322e-02, 8.635396e-02, 8.637469e-02, 8.639543e-02, 8.641616e-02, 8.643690e-02, 8.645763e-02, 8.647836e-02, 8.649909e-02, 8.651982e-02, 8.654056e-02, 8.656129e-02, 8.658202e-02, 8.660275e-02, 8.662348e-02, 8.664422e-02, 8.666494e-02, 8.668567e-02, 8.670640e-02, 8.672713e-02, 8.674787e-02, 8.676859e-02, 8.678932e-02, 8.681004e-02, 8.683078e-02, 8.685151e-02, 8.687223e-02, 8.689296e-02, 8.691368e-02, 8.693441e-02, 8.695514e-02, 8.697587e-02, 8.699659e-02, 8.701731e-02, 8.703804e-02, 8.705877e-02, 8.707950e-02, 8.710022e-02, 8.712094e-02, 8.714166e-02, 8.716239e-02, 8.718311e-02, 8.720383e-02, 8.722455e-02, 8.724528e-02, 8.726600e-02, 8.728672e-02, 8.730745e-02, 8.732817e-02, 8.734888e-02, 8.736961e-02, 8.739033e-02, 8.741104e-02, 8.743176e-02, 8.745248e-02, 8.747321e-02, 8.749392e-02, 8.751463e-02, 8.753535e-02, 8.755607e-02, 8.757679e-02, 8.759751e-02, 8.761822e-02, 8.763894e-02, 8.765966e-02, 8.768037e-02, 8.770109e-02, 8.772180e-02, 8.774251e-02, 8.776323e-02, 8.778395e-02, 8.780466e-02, 8.782537e-02, 8.784609e-02, 8.786680e-02, 8.788752e-02, 8.790823e-02, 8.792894e-02, 8.794966e-02, 8.797036e-02, 8.799107e-02, 8.801179e-02, 8.803250e-02, 8.805321e-02, 8.807392e-02, 8.809463e-02, 8.811533e-02, 8.813605e-02, 8.815675e-02, 8.817746e-02, 8.819818e-02, 8.821888e-02, 8.823959e-02, 8.826030e-02, 8.828101e-02, 8.830171e-02, 8.832242e-02, 8.834312e-02, 8.836383e-02, 8.838453e-02, 8.840524e-02, 8.842594e-02, 8.844665e-02, 8.846735e-02, 8.848806e-02, 8.850876e-02, 8.852947e-02, 8.855017e-02, 8.857087e-02, 8.859158e-02, 8.861228e-02, 8.863299e-02, 8.865368e-02, 8.867438e-02, 8.869509e-02, 8.871579e-02, 8.873648e-02, 8.875719e-02, 8.877789e-02, 8.879859e-02, 8.881929e-02, 8.883999e-02, 8.886068e-02, 8.888139e-02, 8.890209e-02, 8.892278e-02, 8.894347e-02, 8.896417e-02, 8.898487e-02, 8.900557e-02, 8.902626e-02, 8.904696e-02, 8.906766e-02, 8.908836e-02, 8.910905e-02, 8.912975e-02, 8.915044e-02, 8.917113e-02, 8.919183e-02, 8.921252e-02, 8.923321e-02, 8.925391e-02, 8.927460e-02, 8.929530e-02, 8.931599e-02, 8.933668e-02, 8.935737e-02, 8.937806e-02, 8.939876e-02, 8.941945e-02, 8.944014e-02, 8.946083e-02, 8.948152e-02, 8.950221e-02, 8.952290e-02, 8.954358e-02, 8.956428e-02, 8.958496e-02, 8.960565e-02, 8.962634e-02, 8.964702e-02, 8.966772e-02, 8.968840e-02, 8.970909e-02, 8.972977e-02, 8.975045e-02, 8.977114e-02, 8.979183e-02, 8.981252e-02, 8.983320e-02, 8.985388e-02, 8.987457e-02, 8.989526e-02, 8.991594e-02, 8.993662e-02, 8.995730e-02, 8.997799e-02, 8.999867e-02, 9.001935e-02, 9.004004e-02, 9.006071e-02, 9.008140e-02, 9.010208e-02, 9.012276e-02, 9.014343e-02, 9.016412e-02, 9.018480e-02, 9.020548e-02, 9.022616e-02, 9.024684e-02, 9.026751e-02, 9.028819e-02, 9.030887e-02, 9.032956e-02, 9.035023e-02, 9.037091e-02, 9.039158e-02, 9.041226e-02, 9.043294e-02, 9.045361e-02, 9.047429e-02, 9.049496e-02, 9.051564e-02, 9.053631e-02, 9.055699e-02, 9.057766e-02, 9.059833e-02, 9.061901e-02, 9.063968e-02, 9.066036e-02, 9.068103e-02, 9.070171e-02, 9.072237e-02, 9.074304e-02, 9.076372e-02, 9.078439e-02, 9.080507e-02, 9.082574e-02, 9.084640e-02, 9.086708e-02, 9.088775e-02, 9.090842e-02, 9.092908e-02, 9.094974e-02, 9.097042e-02, 9.099109e-02, 9.101176e-02, 9.103243e-02, 9.105308e-02, 9.107376e-02, 9.109443e-02, 9.111509e-02, 9.113576e-02, 9.115642e-02, 9.117708e-02, 9.119776e-02, 9.121841e-02, 9.123909e-02, 9.125975e-02, 9.128042e-02, 9.130108e-02, 9.132174e-02, 9.134240e-02, 9.136306e-02, 9.138373e-02, 9.140439e-02, 9.142505e-02, 9.144571e-02, 9.146638e-02, 9.148704e-02, 9.150770e-02, 9.152836e-02, 9.154902e-02, 9.156968e-02, 9.159034e-02, 9.161100e-02, 9.163166e-02, 9.165232e-02, 9.167298e-02, 9.169363e-02, 9.171429e-02, 9.173495e-02, 9.175561e-02, 9.177626e-02, 9.179692e-02, 9.181758e-02, 9.183824e-02, 9.185889e-02, 9.187955e-02, 9.190021e-02, 9.192086e-02, 9.194151e-02, 9.196217e-02, 9.198283e-02, 9.200347e-02, 9.202413e-02, 9.204478e-02, 9.206544e-02, 9.208609e-02, 9.210674e-02, 9.212740e-02, 9.214804e-02, 9.216870e-02, 9.218934e-02, 9.221000e-02, 9.223065e-02, 9.225130e-02, 9.227195e-02, 9.229260e-02, 9.231324e-02, 9.233390e-02, 9.235454e-02, 9.237519e-02, 9.239584e-02, 9.241649e-02, 9.243714e-02, 9.245779e-02, 9.247844e-02, 9.249908e-02, 9.251972e-02, 9.254037e-02, 9.256102e-02, 9.258167e-02, 9.260231e-02, 9.262296e-02, 9.264360e-02, 9.266424e-02, 9.268489e-02, 9.270553e-02, 9.272618e-02, 9.274682e-02, 9.276746e-02, 9.278810e-02, 9.280875e-02, 9.282938e-02, 9.285004e-02, 9.287068e-02, 9.289131e-02, 9.291195e-02, 9.293260e-02, 9.295323e-02, 9.297387e-02, 9.299451e-02, 9.301515e-02, 9.303580e-02, 9.305644e-02, 9.307708e-02, 9.309771e-02, 9.311835e-02, 9.313899e-02, 9.315962e-02, 9.318026e-02, 9.320089e-02, 9.322153e-02, 9.324217e-02, 9.326281e-02, 9.328344e-02, 9.330407e-02, 9.332471e-02, 9.334534e-02, 9.336598e-02, 9.338661e-02, 9.340725e-02, 9.342787e-02, 9.344851e-02, 9.346915e-02, 9.348978e-02, 9.351040e-02, 9.353104e-02, 9.355167e-02, 9.357231e-02, 9.359293e-02, 9.361356e-02, 9.363420e-02, 9.365483e-02, 9.367546e-02, 9.369610e-02, 9.371672e-02, 9.373735e-02, 9.375797e-02, 9.377860e-02, 9.379923e-02, 9.381986e-02, 9.384049e-02, 9.386111e-02, 9.388174e-02, 9.390236e-02, 9.392300e-02, 9.394362e-02, 9.396425e-02, 9.398487e-02, 9.400550e-02, 9.402613e-02, 9.404674e-02, 9.406737e-02, 9.408800e-02, 9.410862e-02, 9.412924e-02, 9.414987e-02, 9.417049e-02, 9.419111e-02, 9.421173e-02, 9.423236e-02, 9.425297e-02, 9.427360e-02, 9.429422e-02, 9.431484e-02, 9.433546e-02, 9.435609e-02, 9.437671e-02, 9.439732e-02, 9.441794e-02, 9.443857e-02, 9.445918e-02, 9.447980e-02, 9.450042e-02, 9.452103e-02, 9.454165e-02, 9.456228e-02, 9.458289e-02, 9.460351e-02, 9.462412e-02, 9.464474e-02, 9.466536e-02, 9.468597e-02, 9.470658e-02, 9.472720e-02, 9.474781e-02, 9.476843e-02, 9.478904e-02, 9.480965e-02, 9.483027e-02, 9.485088e-02, 9.487150e-02, 9.489211e-02, 9.491272e-02, 9.493332e-02, 9.495395e-02, 9.497455e-02, 9.499516e-02, 9.501577e-02, 9.503639e-02, 9.505700e-02, 9.507761e-02, 9.509821e-02, 9.511882e-02, 9.513944e-02, 9.516004e-02, 9.518065e-02, 9.520126e-02, 9.522187e-02, 9.524248e-02, 9.526308e-02, 9.528369e-02, 9.530430e-02, 9.532490e-02, 9.534550e-02, 9.536611e-02, 9.538671e-02, 9.540732e-02, 9.542793e-02, 9.544853e-02, 9.546914e-02, 9.548975e-02, 9.551035e-02, 9.553096e-02, 9.555155e-02, 9.557216e-02, 9.559276e-02, 9.561336e-02, 9.563396e-02, 9.565457e-02, 9.567516e-02, 9.569577e-02, 9.571636e-02, 9.573697e-02, 9.575757e-02, 9.577817e-02, 9.579877e-02, 9.581937e-02, 9.583996e-02, 9.586056e-02, 9.588116e-02, 9.590176e-02, 9.592236e-02, 9.594296e-02, 9.596356e-02, 9.598415e-02, 9.600475e-02, 9.602534e-02, 9.604593e-02, 9.606654e-02, 9.608714e-02, 9.610773e-02, 9.612833e-02, 9.614892e-02, 9.616952e-02, 9.619010e-02, 9.621070e-02, 9.623129e-02, 9.625188e-02, 9.627248e-02, 9.629308e-02, 9.631366e-02, 9.633426e-02, 9.635485e-02, 9.637544e-02, 9.639603e-02, 9.641662e-02, 9.643721e-02, 9.645780e-02, 9.647839e-02, 9.649898e-02, 9.651957e-02, 9.654016e-02, 9.656075e-02, 9.658134e-02, 9.660193e-02, 9.662250e-02, 9.664311e-02, 9.666368e-02, 9.668427e-02, 9.670486e-02, 9.672545e-02, 9.674603e-02, 9.676662e-02, 9.678720e-02, 9.680779e-02, 9.682837e-02, 9.684896e-02, 9.686954e-02, 9.689012e-02, 9.691071e-02, 9.693129e-02, 9.695188e-02, 9.697246e-02, 9.699304e-02, 9.701363e-02, 9.703422e-02, 9.705479e-02, 9.707537e-02, 9.709595e-02, 9.711653e-02, 9.713712e-02, 9.715769e-02, 9.717827e-02, 9.719885e-02, 9.721944e-02, 9.724001e-02, 9.726059e-02, 9.728117e-02, 9.730174e-02, 9.732233e-02, 9.734290e-02, 9.736349e-02, 9.738406e-02, 9.740463e-02, 9.742521e-02, 9.744579e-02, 9.746636e-02, 9.748694e-02, 9.750751e-02, 9.752809e-02, 9.754866e-02, 9.756924e-02, 9.758981e-02, 9.761038e-02, 9.763096e-02, 9.765153e-02, 9.767210e-02, 9.769268e-02, 9.771325e-02, 9.773382e-02, 9.775439e-02, 9.777496e-02, 9.779554e-02, 9.781611e-02, 9.783667e-02, 9.785724e-02, 9.787782e-02, 9.789839e-02, 9.791896e-02, 9.793953e-02, 9.796009e-02, 9.798066e-02, 9.800123e-02, 9.802181e-02, 9.804236e-02, 9.806294e-02, 9.808350e-02, 9.810406e-02, 9.812464e-02, 9.814520e-02, 9.816577e-02, 9.818634e-02, 9.820690e-02, 9.822746e-02, 9.824802e-02, 9.826858e-02, 9.828916e-02, 9.830973e-02, 9.833028e-02, 9.835085e-02, 9.837141e-02, 9.839197e-02, 9.841254e-02, 9.843310e-02, 9.845366e-02, 9.847423e-02, 9.849478e-02, 9.851534e-02, 9.853590e-02, 9.855647e-02, 9.857703e-02, 9.859758e-02, 9.861814e-02, 9.863871e-02, 9.865925e-02, 9.867982e-02, 9.870038e-02, 9.872093e-02, 9.874149e-02, 9.876205e-02, 9.878261e-02, 9.880316e-02, 9.882371e-02, 9.884427e-02, 9.886483e-02, 9.888539e-02, 9.890594e-02, 9.892649e-02, 9.894705e-02, 9.896761e-02, 9.898816e-02, 9.900872e-02, 9.902927e-02, 9.904981e-02, 9.907037e-02, 9.909092e-02, 9.911148e-02, 9.913204e-02, 9.915259e-02, 9.917313e-02, 9.919368e-02, 9.921423e-02, 9.923478e-02, 9.925534e-02, 9.927589e-02, 9.929644e-02, 9.931698e-02, 9.933753e-02, 9.935808e-02, 9.937864e-02, 9.939918e-02, 9.941973e-02, 9.944027e-02, 9.946083e-02, 9.948137e-02, 9.950192e-02, 9.952247e-02, 9.954301e-02, 9.956356e-02, 9.958410e-02, 9.960464e-02, 9.962519e-02, 9.964573e-02, 9.966628e-02, 9.968683e-02, 9.970737e-02, 9.972791e-02, 9.974845e-02, 9.976900e-02, 9.978954e-02, 9.981009e-02, 9.983063e-02, 9.985117e-02, 9.987171e-02, 9.989225e-02, 9.991279e-02, 9.993333e-02, 9.995387e-02, 9.997442e-02, 9.999496e-02, 1.000155e-01, 1.000360e-01, 1.000566e-01, 1.000771e-01, 1.000977e-01, 1.001182e-01, 1.001387e-01, 1.001593e-01, 1.001798e-01, 1.002003e-01, 1.002209e-01, 1.002414e-01, 1.002619e-01, 1.002825e-01, 1.003030e-01, 1.003236e-01, 1.003441e-01, 1.003646e-01, 1.003852e-01, 1.004057e-01, 1.004262e-01, 1.004468e-01, 1.004673e-01, 1.004878e-01, 1.005084e-01, 1.005289e-01, 1.005494e-01, 1.005699e-01, 1.005905e-01, 1.006110e-01, 1.006315e-01, 1.006521e-01, 1.006726e-01, 1.006931e-01, 1.007137e-01, 1.007342e-01, 1.007547e-01, 1.007753e-01, 1.007958e-01, 1.008163e-01, 1.008368e-01, 1.008574e-01, 1.008779e-01, 1.008984e-01, 1.009189e-01, 1.009395e-01, 1.009600e-01, 1.009805e-01, 1.010010e-01, 1.010216e-01, 1.010421e-01, 1.010626e-01, 1.010831e-01, 1.011037e-01, 1.011242e-01, 1.011447e-01, 1.011652e-01, 1.011858e-01, 1.012063e-01, 1.012268e-01, 1.012473e-01, 1.012679e-01, 1.012884e-01, 1.013089e-01, 1.013294e-01, 1.013499e-01, 1.013705e-01, 1.013910e-01, 1.014115e-01, 1.014320e-01, 1.014525e-01, 1.014731e-01, 1.014936e-01, 1.015141e-01, 1.015346e-01, 1.015551e-01, 1.015756e-01, 1.015962e-01, 1.016167e-01, 1.016372e-01, 1.016577e-01, 1.016782e-01, 1.016987e-01, 1.017193e-01, 1.017398e-01, 1.017603e-01, 1.017808e-01, 1.018013e-01, 1.018218e-01, 1.018423e-01, 1.018629e-01, 1.018834e-01, 1.019039e-01, 1.019244e-01, 1.019449e-01, 1.019654e-01, 1.019859e-01, 1.020064e-01, 1.020269e-01, 1.020475e-01, 1.020680e-01, 1.020885e-01, 1.021090e-01, 1.021295e-01, 1.021500e-01, 1.021705e-01, 1.021910e-01, 1.022115e-01, 1.022320e-01, 1.022526e-01, 1.022731e-01, 1.022936e-01, 1.023141e-01, 1.023346e-01, 1.023551e-01, 1.023756e-01, 1.023961e-01, 1.024166e-01, 1.024371e-01, 1.024576e-01, 1.024781e-01, 1.024986e-01, 1.025191e-01, 1.025396e-01, 1.025601e-01, 1.025806e-01, 1.026011e-01, 1.026216e-01, 1.026421e-01, 1.026626e-01, 1.026831e-01, 1.027036e-01, 1.027241e-01, 1.027446e-01, 1.027652e-01, 1.027856e-01, 1.028061e-01, 1.028266e-01, 1.028471e-01, 1.028676e-01, 1.028881e-01, 1.029086e-01, 1.029291e-01, 1.029496e-01, 1.029701e-01, 1.029906e-01, 1.030111e-01, 1.030316e-01, 1.030521e-01, 1.030726e-01, 1.030931e-01, 1.031136e-01, 1.031341e-01, 1.031546e-01, 1.031751e-01, 1.031956e-01, 1.032161e-01, 1.032366e-01, 1.032571e-01, 1.032776e-01, 1.032981e-01, 1.033185e-01, 1.033390e-01, 1.033595e-01, 1.033800e-01, 1.034005e-01, 1.034210e-01, 1.034415e-01, 1.034620e-01, 1.034825e-01, 1.035030e-01, 1.035234e-01, 1.035440e-01, 1.035644e-01, 1.035849e-01, 1.036054e-01, 1.036259e-01, 1.036464e-01, 1.036669e-01, 1.036874e-01, 1.037078e-01, 1.037283e-01, 1.037488e-01, 1.037693e-01, 1.037898e-01, 1.038103e-01, 1.038308e-01, 1.038513e-01, 1.038717e-01, 1.038922e-01, 1.039127e-01, 1.039332e-01, 1.039537e-01, 1.039742e-01, 1.039946e-01, 1.040151e-01, 1.040356e-01, 1.040561e-01, 1.040766e-01, 1.040970e-01, 1.041175e-01, 1.041380e-01, 1.041585e-01, 1.041790e-01, 1.041995e-01, 1.042199e-01, 1.042404e-01, 1.042609e-01, 1.042814e-01, 1.043018e-01, 1.043223e-01, 1.043428e-01, 1.043633e-01, 1.043838e-01, 1.044042e-01, 1.044247e-01, 1.044452e-01, 1.044657e-01, 1.044861e-01, 1.045066e-01, 1.045271e-01, 1.045476e-01, 1.045680e-01, 1.045885e-01, 1.046090e-01, 1.046295e-01, 1.046499e-01, 1.046704e-01, 1.046909e-01, 1.047114e-01, 1.047318e-01, 1.047523e-01, 1.047728e-01, 1.047932e-01, 1.048137e-01, 1.048342e-01, 1.048547e-01, 1.048751e-01, 1.048956e-01, 1.049161e-01, 1.049365e-01, 1.049570e-01, 1.049775e-01, 1.049979e-01, 1.050184e-01, 1.050389e-01, 1.050594e-01, 1.050798e-01, 1.051003e-01, 1.051207e-01, 1.051412e-01, 1.051617e-01, 1.051821e-01, 1.052026e-01, 1.052231e-01, 1.052435e-01, 1.052640e-01, 1.052845e-01, 1.053049e-01, 1.053254e-01, 1.053459e-01, 1.053663e-01, 1.053868e-01, 1.054073e-01, 1.054277e-01, 1.054482e-01, 1.054686e-01, 1.054891e-01, 1.055096e-01, 1.055300e-01, 1.055505e-01, 1.055709e-01, 1.055914e-01, 1.056119e-01, 1.056323e-01, 1.056528e-01, 1.056732e-01, 1.056937e-01, 1.057142e-01, 1.057346e-01, 1.057551e-01, 1.057755e-01, 1.057960e-01, 1.058165e-01, 1.058369e-01, 1.058574e-01, 1.058778e-01, 1.058983e-01, 1.059187e-01, 1.059392e-01, 1.059597e-01, 1.059801e-01, 1.060006e-01, 1.060210e-01, 1.060415e-01, 1.060619e-01, 1.060824e-01, 1.061028e-01, 1.061233e-01, 1.061437e-01, 1.061642e-01, 1.061846e-01, 1.062051e-01, 1.062255e-01, 1.062460e-01, 1.062664e-01, 1.062869e-01, 1.063073e-01, 1.063278e-01, 1.063482e-01, 1.063687e-01, 1.063891e-01, 1.064096e-01, 1.064300e-01, 1.064505e-01, 1.064709e-01, 1.064914e-01, 1.065118e-01, 1.065323e-01, 1.065527e-01, 1.065732e-01, 1.065936e-01, 1.066141e-01, 1.066345e-01, 1.066549e-01, 1.066754e-01, 1.066958e-01, 1.067163e-01, 1.067367e-01, 1.067572e-01, 1.067776e-01, 1.067981e-01, 1.068185e-01, 1.068389e-01, 1.068594e-01, 1.068798e-01, 1.069003e-01, 1.069207e-01, 1.069411e-01, 1.069616e-01, 1.069820e-01, 1.070025e-01, 1.070229e-01, 1.070433e-01, 1.070638e-01, 1.070842e-01, 1.071047e-01, 1.071251e-01, 1.071455e-01, 1.071660e-01, 1.071864e-01, 1.072069e-01, 1.072273e-01, 1.072477e-01, 1.072682e-01, 1.072886e-01, 1.073090e-01, 1.073295e-01, 1.073499e-01, 1.073703e-01, 1.073908e-01, 1.074112e-01, 1.074317e-01, 1.074521e-01, 1.074725e-01, 1.074930e-01, 1.075134e-01, 1.075338e-01, 1.075542e-01, 1.075747e-01, 1.075951e-01, 1.076155e-01, 1.076360e-01, 1.076564e-01, 1.076768e-01, 1.076973e-01, 1.077177e-01, 1.077381e-01, 1.077586e-01, 1.077790e-01, 1.077994e-01, 1.078198e-01, 1.078403e-01, 1.078607e-01, 1.078811e-01, 1.079016e-01, 1.079220e-01, 1.079424e-01, 1.079628e-01, 1.079833e-01, 1.080037e-01, 1.080241e-01, 1.080445e-01, 1.080650e-01, 1.080854e-01, 1.081058e-01, 1.081262e-01, 1.081467e-01, 1.081671e-01, 1.081875e-01, 1.082079e-01, 1.082284e-01, 1.082488e-01, 1.082692e-01, 1.082896e-01, 1.083100e-01, 1.083305e-01, 1.083509e-01, 1.083713e-01, 1.083917e-01, 1.084122e-01, 1.084326e-01, 1.084530e-01, 1.084734e-01, 1.084938e-01, 1.085142e-01, 1.085347e-01, 1.085551e-01, 1.085755e-01, 1.085959e-01, 1.086163e-01, 1.086368e-01, 1.086572e-01, 1.086776e-01, 1.086980e-01, 1.087184e-01, 1.087388e-01, 1.087592e-01, 1.087797e-01, 1.088001e-01, 1.088205e-01, 1.088409e-01, 1.088613e-01, 1.088817e-01, 1.089022e-01, 1.089226e-01, 1.089430e-01, 1.089634e-01, 1.089838e-01, 1.090042e-01, 1.090246e-01, 1.090450e-01, 1.090654e-01, 1.090859e-01, 1.091063e-01, 1.091267e-01, 1.091471e-01, 1.091675e-01, 1.091879e-01, 1.092083e-01, 1.092287e-01, 1.092491e-01, 1.092695e-01, 1.092900e-01, 1.093104e-01, 1.093308e-01, 1.093512e-01, 1.093716e-01, 1.093920e-01, 1.094124e-01, 1.094328e-01, 1.094532e-01, 1.094736e-01, 1.094940e-01, 1.095144e-01, 1.095348e-01, 1.095552e-01, 1.095756e-01, 1.095960e-01, 1.096164e-01, 1.096368e-01, 1.096572e-01, 1.096777e-01, 1.096980e-01, 1.097184e-01, 1.097388e-01, 1.097592e-01, 1.097797e-01, 1.098001e-01, 1.098205e-01, 1.098409e-01, 1.098612e-01, 1.098816e-01, 1.099021e-01, 1.099225e-01, 1.099429e-01, 1.099632e-01, 1.099836e-01, 1.100040e-01, 1.100244e-01, 1.100448e-01, 1.100652e-01, 1.100856e-01, 1.101060e-01, 1.101264e-01, 1.101468e-01, 1.101672e-01, 1.101876e-01, 1.102080e-01, 1.102284e-01, 1.102488e-01, 1.102692e-01, 1.102896e-01, 1.103100e-01, 1.103304e-01, 1.103508e-01, 1.103712e-01, 1.103915e-01, 1.104119e-01, 1.104323e-01, 1.104527e-01, 1.104731e-01, 1.104935e-01, 1.105139e-01, 1.105343e-01, 1.105547e-01, 1.105751e-01, 1.105954e-01, 1.106158e-01, 1.106362e-01, 1.106566e-01, 1.106770e-01, 1.106974e-01, 1.107178e-01, 1.107382e-01, 1.107586e-01, 1.107790e-01, 1.107993e-01, 1.108197e-01, 1.108401e-01, 1.108605e-01, 1.108809e-01, 1.109013e-01, 1.109217e-01, 1.109420e-01, 1.109624e-01, 1.109828e-01, 1.110032e-01, 1.110236e-01, 1.110440e-01, 1.110643e-01, 1.110847e-01, 1.111051e-01, 1.111255e-01, 1.111459e-01, 1.111662e-01, 1.111866e-01, 1.112070e-01, 1.112274e-01, 1.112478e-01, 1.112681e-01, 1.112885e-01, 1.113089e-01, 1.113293e-01, 1.113497e-01, 1.113700e-01, 1.113904e-01, 1.114108e-01, 1.114312e-01, 1.114516e-01, 1.114719e-01, 1.114923e-01, 1.115127e-01, 1.115331e-01, 1.115534e-01, 1.115738e-01, 1.115942e-01, 1.116146e-01, 1.116349e-01, 1.116553e-01, 1.116757e-01, 1.116961e-01, 1.117164e-01, 1.117368e-01, 1.117572e-01, 1.117775e-01, 1.117979e-01, 1.118183e-01, 1.118387e-01, 1.118590e-01, 1.118794e-01, 1.118998e-01, 1.119201e-01, 1.119405e-01, 1.119609e-01, 1.119813e-01, 1.120016e-01, 1.120220e-01, 1.120424e-01, 1.120627e-01, 1.120831e-01, 1.121035e-01, 1.121238e-01, 1.121442e-01, 1.121646e-01, 1.121849e-01, 1.122053e-01, 1.122257e-01, 1.122460e-01, 1.122664e-01, 1.122868e-01, 1.123071e-01, 1.123275e-01, 1.123479e-01, 1.123682e-01, 1.123886e-01, 1.124090e-01, 1.124293e-01, 1.124497e-01, 1.124701e-01, 1.124904e-01, 1.125108e-01, 1.125311e-01, 1.125515e-01, 1.125719e-01, 1.125922e-01, 1.126126e-01, 1.126329e-01, 1.126533e-01, 1.126737e-01, 1.126940e-01, 1.127144e-01, 1.127347e-01, 1.127551e-01, 1.127755e-01, 1.127958e-01, 1.128162e-01, 1.128365e-01, 1.128569e-01, 1.128773e-01, 1.128976e-01, 1.129180e-01, 1.129383e-01, 1.129587e-01, 1.129790e-01, 1.129994e-01, 1.130197e-01, 1.130401e-01, 1.130605e-01, 1.130808e-01, 1.131012e-01, 1.131215e-01, 1.131419e-01, 1.131622e-01, 1.131826e-01, 1.132029e-01, 1.132233e-01, 1.132436e-01, 1.132640e-01, 1.132843e-01, 1.133047e-01, 1.133250e-01, 1.133454e-01, 1.133657e-01, 1.133861e-01, 1.134064e-01, 1.134268e-01, 1.134471e-01, 1.134675e-01, 1.134878e-01, 1.135082e-01, 1.135285e-01, 1.135489e-01, 1.135692e-01, 1.135896e-01, 1.136099e-01, 1.136303e-01, 1.136506e-01, 1.136710e-01, 1.136913e-01, 1.137116e-01, 1.137320e-01, 1.137523e-01, 1.137727e-01, 1.137930e-01, 1.138134e-01, 1.138337e-01, 1.138541e-01, 1.138744e-01, 1.138947e-01, 1.139151e-01, 1.139354e-01, 1.139558e-01, 1.139761e-01, 1.139965e-01, 1.140168e-01, 1.140371e-01, 1.140575e-01, 1.140778e-01, 1.140982e-01, 1.141185e-01, 1.141388e-01, 1.141592e-01, 1.141795e-01, 1.141999e-01, 1.142202e-01, 1.142405e-01, 1.142609e-01, 1.142812e-01, 1.143015e-01, 1.143219e-01, 1.143422e-01, 1.143626e-01, 1.143829e-01, 1.144032e-01, 1.144236e-01, 1.144439e-01, 1.144642e-01, 1.144846e-01, 1.145049e-01, 1.145252e-01, 1.145456e-01, 1.145659e-01, 1.145862e-01, 1.146066e-01, 1.146269e-01, 1.146472e-01, 1.146676e-01, 1.146879e-01, 1.147082e-01, 1.147285e-01, 1.147489e-01, 1.147692e-01, 1.147896e-01, 1.148099e-01, 1.148302e-01, 1.148505e-01, 1.148709e-01, 1.148912e-01, 1.149115e-01, 1.149318e-01, 1.149522e-01, 1.149725e-01, 1.149928e-01, 1.150132e-01, 1.150335e-01, 1.150538e-01, 1.150741e-01, 1.150945e-01, 1.151148e-01, 1.151351e-01, 1.151554e-01, 1.151758e-01, 1.151961e-01, 1.152164e-01, 1.152367e-01, 1.152571e-01, 1.152774e-01, 1.152977e-01, 1.153180e-01, 1.153384e-01, 1.153587e-01, 1.153790e-01, 1.153993e-01, 1.154196e-01, 1.154400e-01, 1.154603e-01, 1.154806e-01, 1.155009e-01, 1.155212e-01, 1.155416e-01, 1.155619e-01, 1.155822e-01, 1.156025e-01, 1.156228e-01, 1.156432e-01, 1.156635e-01, 1.156838e-01, 1.157041e-01, 1.157244e-01, 1.157447e-01, 1.157651e-01, 1.157854e-01, 1.158057e-01, 1.158260e-01, 1.158463e-01, 1.158666e-01, 1.158869e-01, 1.159073e-01, 1.159276e-01, 1.159479e-01, 1.159682e-01, 1.159885e-01, 1.160088e-01, 1.160292e-01, 1.160495e-01, 1.160698e-01, 1.160901e-01, 1.161104e-01, 1.161307e-01, 1.161510e-01, 1.161713e-01, 1.161916e-01, 1.162120e-01, 1.162323e-01, 1.162526e-01, 1.162729e-01, 1.162932e-01, 1.163135e-01, 1.163338e-01, 1.163541e-01, 1.163744e-01, 1.163947e-01, 1.164150e-01, 1.164353e-01, 1.164557e-01, 1.164760e-01, 1.164963e-01, 1.165166e-01, 1.165369e-01, 1.165572e-01, 1.165775e-01, 1.165978e-01, 1.166181e-01, 1.166384e-01, 1.166587e-01, 1.166790e-01, 1.166993e-01, 1.167196e-01, 1.167399e-01, 1.167602e-01, 1.167805e-01, 1.168008e-01, 1.168211e-01, 1.168414e-01, 1.168617e-01, 1.168820e-01, 1.169023e-01, 1.169226e-01, 1.169429e-01, 1.169632e-01, 1.169835e-01, 1.170038e-01, 1.170241e-01, 1.170444e-01, 1.170647e-01, 1.170850e-01, 1.171053e-01, 1.171256e-01, 1.171459e-01, 1.171662e-01, 1.171865e-01, 1.172068e-01, 1.172271e-01, 1.172474e-01, 1.172677e-01, 1.172880e-01, 1.173083e-01, 1.173286e-01, 1.173489e-01, 1.173692e-01, 1.173895e-01, 1.174098e-01, 1.174300e-01, 1.174503e-01, 1.174706e-01, 1.174909e-01, 1.175112e-01, 1.175315e-01, 1.175518e-01, 1.175721e-01, 1.175924e-01, 1.176127e-01, 1.176329e-01, 1.176532e-01, 1.176735e-01, 1.176938e-01, 1.177141e-01, 1.177344e-01, 1.177547e-01, 1.177750e-01, 1.177953e-01, 1.178156e-01, 1.178358e-01, 1.178561e-01, 1.178764e-01, 1.178967e-01, 1.179170e-01, 1.179373e-01, 1.179576e-01, 1.179778e-01, 1.179981e-01, 1.180184e-01, 1.180387e-01, 1.180590e-01, 1.180793e-01, 1.180995e-01, 1.181198e-01, 1.181401e-01, 1.181604e-01, 1.181807e-01, 1.182010e-01, 1.182213e-01, 1.182415e-01, 1.182618e-01, 1.182821e-01, 1.183024e-01, 1.183227e-01, 1.183429e-01, 1.183632e-01, 1.183835e-01, 1.184038e-01, 1.184241e-01, 1.184443e-01, 1.184646e-01, 1.184849e-01, 1.185052e-01, 1.185254e-01, 1.185457e-01, 1.185660e-01, 1.185863e-01, 1.186066e-01, 1.186268e-01, 1.186471e-01, 1.186674e-01, 1.186877e-01, 1.187079e-01, 1.187282e-01, 1.187485e-01, 1.187688e-01, 1.187890e-01, 1.188093e-01, 1.188296e-01, 1.188498e-01, 1.188701e-01, 1.188904e-01, 1.189107e-01, 1.189309e-01, 1.189512e-01, 1.189715e-01, 1.189918e-01, 1.190120e-01, 1.190323e-01, 1.190526e-01, 1.190728e-01, 1.190931e-01, 1.191134e-01, 1.191336e-01, 1.191539e-01, 1.191742e-01, 1.191944e-01, 1.192147e-01, 1.192350e-01, 1.192553e-01, 1.192755e-01, 1.192958e-01, 1.193160e-01, 1.193363e-01, 1.193566e-01, 1.193768e-01, 1.193971e-01, 1.194174e-01, 1.194376e-01, 1.194579e-01, 1.194782e-01, 1.194984e-01, 1.195187e-01, 1.195390e-01, 1.195592e-01, 1.195795e-01, 1.195998e-01, 1.196200e-01, 1.196403e-01, 1.196605e-01, 1.196808e-01, 1.197011e-01, 1.197213e-01, 1.197416e-01, 1.197618e-01, 1.197821e-01, 1.198024e-01, 1.198226e-01, 1.198429e-01, 1.198631e-01, 1.198834e-01, 1.199037e-01, 1.199239e-01, 1.199442e-01, 1.199644e-01, 1.199847e-01, 1.200049e-01, 1.200252e-01, 1.200455e-01, 1.200657e-01, 1.200860e-01, 1.201062e-01, 1.201265e-01, 1.201467e-01, 1.201670e-01, 1.201872e-01, 1.202075e-01, 1.202277e-01, 1.202480e-01, 1.202683e-01, 1.202885e-01, 1.203088e-01, 1.203290e-01, 1.203493e-01, 1.203695e-01, 1.203898e-01, 1.204100e-01, 1.204303e-01, 1.204505e-01, 1.204708e-01, 1.204910e-01, 1.205113e-01, 1.205315e-01, 1.205518e-01, 1.205720e-01, 1.205923e-01, 1.206125e-01, 1.206328e-01, 1.206530e-01, 1.206733e-01, 1.206935e-01, 1.207137e-01, 1.207340e-01, 1.207542e-01, 1.207745e-01, 1.207947e-01, 1.208150e-01, 1.208352e-01, 1.208555e-01, 1.208757e-01, 1.208960e-01, 1.209162e-01, 1.209364e-01, 1.209567e-01, 1.209769e-01, 1.209972e-01, 1.210174e-01, 1.210377e-01, 1.210579e-01, 1.210781e-01, 1.210984e-01, 1.211186e-01, 1.211389e-01, 1.211591e-01, 1.211793e-01, 1.211996e-01, 1.212198e-01, 1.212401e-01, 1.212603e-01, 1.212806e-01, 1.213008e-01, 1.213210e-01, 1.213413e-01, 1.213615e-01, 1.213817e-01, 1.214020e-01, 1.214222e-01, 1.214425e-01, 1.214627e-01, 1.214829e-01, 1.215032e-01, 1.215234e-01, 1.215436e-01, 1.215639e-01, 1.215841e-01, 1.216043e-01, 1.216246e-01, 1.216448e-01, 1.216650e-01, 1.216853e-01, 1.217055e-01, 1.217257e-01, 1.217460e-01, 1.217662e-01, 1.217864e-01, 1.218067e-01, 1.218269e-01, 1.218471e-01, 1.218674e-01, 1.218876e-01, 1.219078e-01, 1.219280e-01, 1.219483e-01, 1.219685e-01, 1.219887e-01, 1.220090e-01, 1.220292e-01, 1.220494e-01, 1.220696e-01, 1.220899e-01, 1.221101e-01, 1.221303e-01, 1.221506e-01, 1.221708e-01, 1.221910e-01, 1.222112e-01, 1.222315e-01, 1.222517e-01, 1.222719e-01, 1.222921e-01, 1.223124e-01, 1.223326e-01, 1.223528e-01, 1.223730e-01, 1.223933e-01, 1.224135e-01, 1.224337e-01, 1.224539e-01, 1.224742e-01, 1.224944e-01, 1.225146e-01, 1.225348e-01, 1.225550e-01, 1.225753e-01, 1.225955e-01, 1.226157e-01, 1.226359e-01, 1.226561e-01, 1.226764e-01, 1.226966e-01, 1.227168e-01, 1.227370e-01, 1.227572e-01, 1.227774e-01, 1.227977e-01, 1.228179e-01, 1.228381e-01, 1.228583e-01, 1.228785e-01, 1.228988e-01, 1.229190e-01, 1.229392e-01, 1.229594e-01, 1.229796e-01, 1.229998e-01, 1.230201e-01, 1.230403e-01, 1.230605e-01, 1.230807e-01, 1.231009e-01, 1.231211e-01, 1.231413e-01, 1.231615e-01, 1.231817e-01, 1.232020e-01, 1.232222e-01, 1.232424e-01, 1.232626e-01, 1.232828e-01, 1.233030e-01, 1.233232e-01, 1.233434e-01, 1.233637e-01, 1.233839e-01, 1.234041e-01, 1.234243e-01, 1.234445e-01, 1.234647e-01, 1.234849e-01, 1.235051e-01, 1.235253e-01, 1.235455e-01, 1.235657e-01, 1.235859e-01, 1.236061e-01, 1.236264e-01, 1.236466e-01, 1.236668e-01, 1.236870e-01, 1.237072e-01, 1.237274e-01, 1.237476e-01, 1.237678e-01, 1.237880e-01, 1.238082e-01, 1.238284e-01, 1.238486e-01, 1.238688e-01, 1.238890e-01, 1.239092e-01, 1.239294e-01, 1.239496e-01, 1.239698e-01, 1.239900e-01, 1.240102e-01, 1.240304e-01, 1.240506e-01, 1.240708e-01, 1.240910e-01, 1.241112e-01, 1.241314e-01, 1.241516e-01, 1.241718e-01, 1.241920e-01, 1.242122e-01, 1.242324e-01, 1.242526e-01, 1.242728e-01, 1.242930e-01, 1.243132e-01, 1.243334e-01, 1.243536e-01, 1.243738e-01, 1.243940e-01, 1.244142e-01, 1.244344e-01, 1.244546e-01, 1.244748e-01, 1.244949e-01, 1.245151e-01, 1.245353e-01, 1.245555e-01, 1.245757e-01, 1.245959e-01, 1.246161e-01, 1.246363e-01, 1.246565e-01, 1.246767e-01, 1.246969e-01, 1.247171e-01, 1.247373e-01, 1.247574e-01, 1.247776e-01, 1.247978e-01, 1.248180e-01, 1.248382e-01, 1.248584e-01, 1.248786e-01, 1.248988e-01, 1.249190e-01, 1.249391e-01, 1.249593e-01, 1.249795e-01, 1.249997e-01, 1.250199e-01, 1.250401e-01, 1.250603e-01, 1.250805e-01, 1.251006e-01, 1.251208e-01, 1.251410e-01, 1.251612e-01, 1.251814e-01, 1.252016e-01, 1.252217e-01, 1.252419e-01, 1.252621e-01, 1.252823e-01, 1.253025e-01, 1.253227e-01, 1.253428e-01, 1.253630e-01, 1.253832e-01, 1.254034e-01, 1.254236e-01, 1.254437e-01, 1.254639e-01, 1.254841e-01, 1.255043e-01, 1.255245e-01, 1.255446e-01, 1.255648e-01, 1.255850e-01, 1.256052e-01, 1.256254e-01, 1.256455e-01, 1.256657e-01, 1.256859e-01, 1.257061e-01, 1.257262e-01, 1.257464e-01, 1.257666e-01, 1.257868e-01, 1.258069e-01, 1.258271e-01, 1.258473e-01, 1.258675e-01, 1.258876e-01, 1.259078e-01, 1.259280e-01, 1.259482e-01, 1.259683e-01, 1.259885e-01, 1.260087e-01, 1.260289e-01, 1.260490e-01, 1.260692e-01, 1.260894e-01, 1.261095e-01, 1.261297e-01, 1.261499e-01, 1.261701e-01, 1.261902e-01, 1.262104e-01, 1.262306e-01, 1.262507e-01, 1.262709e-01, 1.262911e-01, 1.263112e-01, 1.263314e-01, 1.263516e-01, 1.263717e-01, 1.263919e-01, 1.264121e-01, 1.264323e-01, 1.264524e-01, 1.264726e-01, 1.264927e-01, 1.265129e-01, 1.265331e-01, 1.265532e-01, 1.265734e-01, 1.265936e-01, 1.266137e-01, 1.266339e-01, 1.266541e-01, 1.266742e-01, 1.266944e-01, 1.267145e-01, 1.267347e-01, 1.267549e-01, 1.267750e-01, 1.267952e-01, 1.268154e-01, 1.268355e-01, 1.268557e-01, 1.268758e-01, 1.268960e-01, 1.269162e-01, 1.269363e-01, 1.269565e-01, 1.269767e-01, 1.269968e-01, 1.270170e-01, 1.270371e-01, 1.270573e-01, 1.270774e-01, 1.270976e-01, 1.271178e-01, 1.271379e-01, 1.271581e-01, 1.271782e-01, 1.271984e-01, 1.272185e-01, 1.272387e-01, 1.272588e-01, 1.272790e-01, 1.272991e-01, 1.273193e-01, 1.273395e-01, 1.273596e-01, 1.273798e-01, 1.273999e-01, 1.274201e-01, 1.274402e-01, 1.274604e-01, 1.274805e-01, 1.275007e-01, 1.275208e-01, 1.275410e-01, 1.275611e-01, 1.275813e-01, 1.276014e-01, 1.276216e-01, 1.276417e-01, 1.276619e-01, 1.276820e-01, 1.277022e-01, 1.277223e-01, 1.277425e-01, 1.277626e-01, 1.277828e-01, 1.278029e-01, 1.278231e-01, 1.278432e-01, 1.278634e-01, 1.278835e-01, 1.279037e-01, 1.279238e-01, 1.279440e-01, 1.279641e-01, 1.279842e-01, 1.280044e-01, 1.280245e-01, 1.280447e-01, 1.280648e-01, 1.280850e-01, 1.281051e-01, 1.281253e-01, 1.281454e-01, 1.281655e-01, 1.281857e-01, 1.282058e-01, 1.282260e-01, 1.282461e-01, 1.282662e-01, 1.282864e-01, 1.283065e-01, 1.283267e-01, 1.283468e-01, 1.283669e-01, 1.283871e-01, 1.284072e-01, 1.284274e-01, 1.284475e-01, 1.284676e-01, 1.284878e-01, 1.285079e-01, 1.285281e-01, 1.285482e-01, 1.285683e-01, 1.285885e-01, 1.286086e-01, 1.286287e-01, 1.286489e-01, 1.286690e-01, 1.286891e-01, 1.287093e-01, 1.287294e-01, 1.287495e-01, 1.287697e-01, 1.287898e-01, 1.288100e-01, 1.288301e-01, 1.288502e-01, 1.288704e-01, 1.288905e-01, 1.289106e-01, 1.289307e-01, 1.289509e-01, 1.289710e-01, 1.289911e-01, 1.290113e-01, 1.290314e-01, 1.290515e-01, 1.290717e-01, 1.290918e-01, 1.291119e-01, 1.291321e-01, 1.291522e-01, 1.291723e-01, 1.291924e-01, 1.292126e-01, 1.292327e-01, 1.292528e-01, 1.292730e-01, 1.292931e-01, 1.293132e-01, 1.293333e-01, 1.293535e-01, 1.293736e-01, 1.293937e-01, 1.294138e-01, 1.294340e-01, 1.294541e-01, 1.294742e-01, 1.294943e-01, 1.295145e-01, 1.295346e-01, 1.295547e-01, 1.295748e-01, 1.295950e-01, 1.296151e-01, 1.296352e-01, 1.296553e-01, 1.296754e-01, 1.296955e-01, 1.297157e-01, 1.297358e-01, 1.297559e-01, 1.297760e-01, 1.297962e-01, 1.298163e-01, 1.298364e-01, 1.298565e-01, 1.298766e-01, 1.298968e-01, 1.299169e-01, 1.299370e-01, 1.299571e-01, 1.299772e-01, 1.299973e-01, 1.300175e-01, 1.300376e-01, 1.300577e-01, 1.300778e-01, 1.300979e-01, 1.301180e-01, 1.301382e-01, 1.301583e-01, 1.301784e-01, 1.301985e-01, 1.302186e-01, 1.302387e-01, 1.302588e-01, 1.302790e-01, 1.302991e-01, 1.303192e-01, 1.303393e-01, 1.303594e-01, 1.303795e-01, 1.303996e-01, 1.304197e-01, 1.304398e-01, 1.304599e-01, 1.304801e-01, 1.305002e-01, 1.305203e-01, 1.305404e-01, 1.305605e-01, 1.305806e-01, 1.306007e-01, 1.306208e-01, 1.306409e-01, 1.306610e-01, 1.306812e-01, 1.307013e-01, 1.307214e-01, 1.307415e-01, 1.307616e-01, 1.307817e-01, 1.308018e-01, 1.308219e-01, 1.308420e-01, 1.308621e-01, 1.308822e-01, 1.309023e-01, 1.309224e-01, 1.309425e-01, 1.309626e-01, 1.309827e-01, 1.310028e-01, 1.310229e-01, 1.310430e-01, 1.310631e-01, 1.310833e-01, 1.311034e-01, 1.311235e-01, 1.311436e-01, 1.311637e-01, 1.311838e-01, 1.312039e-01, 1.312240e-01, 1.312440e-01, 1.312642e-01, 1.312843e-01, 1.313044e-01, 1.313244e-01, 1.313445e-01, 1.313646e-01, 1.313847e-01, 1.314048e-01, 1.314249e-01, 1.314450e-01, 1.314651e-01, 1.314852e-01, 1.315053e-01, 1.315254e-01, 1.315455e-01, 1.315656e-01, 1.315857e-01, 1.316058e-01, 1.316259e-01, 1.316460e-01, 1.316661e-01, 1.316862e-01, 1.317063e-01, 1.317264e-01, 1.317465e-01, 1.317665e-01, 1.317866e-01, 1.318067e-01, 1.318268e-01, 1.318469e-01, 1.318670e-01, 1.318871e-01, 1.319072e-01, 1.319273e-01, 1.319474e-01, 1.319675e-01, 1.319875e-01, 1.320076e-01, 1.320277e-01, 1.320478e-01, 1.320679e-01, 1.320880e-01, 1.321081e-01, 1.321282e-01, 1.321483e-01, 1.321683e-01, 1.321884e-01, 1.322085e-01, 1.322286e-01, 1.322487e-01, 1.322688e-01, 1.322888e-01, 1.323089e-01, 1.323290e-01, 1.323491e-01, 1.323692e-01, 1.323893e-01, 1.324094e-01, 1.324294e-01, 1.324495e-01, 1.324696e-01, 1.324897e-01, 1.325098e-01, 1.325299e-01, 1.325499e-01, 1.325700e-01, 1.325901e-01, 1.326102e-01, 1.326303e-01, 1.326503e-01, 1.326704e-01, 1.326905e-01, 1.327106e-01, 1.327306e-01, 1.327507e-01, 1.327708e-01, 1.327909e-01, 1.328110e-01, 1.328311e-01, 1.328511e-01, 1.328712e-01, 1.328913e-01, 1.329114e-01, 1.329314e-01, 1.329515e-01, 1.329716e-01, 1.329917e-01, 1.330117e-01, 1.330318e-01, 1.330519e-01, 1.330720e-01, 1.330920e-01, 1.331121e-01, 1.331322e-01, 1.331522e-01, 1.331723e-01, 1.331924e-01, 1.332125e-01, 1.332325e-01, 1.332526e-01, 1.332727e-01, 1.332927e-01, 1.333128e-01, 1.333329e-01, 1.333530e-01, 1.333730e-01, 1.333931e-01, 1.334132e-01, 1.334332e-01, 1.334533e-01, 1.334734e-01, 1.334935e-01, 1.335135e-01, 1.335336e-01, 1.335537e-01, 1.335737e-01, 1.335938e-01, 1.336139e-01, 1.336339e-01, 1.336540e-01, 1.336741e-01, 1.336941e-01, 1.337142e-01, 1.337342e-01, 1.337543e-01, 1.337744e-01, 1.337944e-01, 1.338145e-01, 1.338346e-01, 1.338546e-01, 1.338747e-01, 1.338948e-01, 1.339148e-01, 1.339349e-01, 1.339549e-01, 1.339750e-01, 1.339951e-01, 1.340151e-01, 1.340352e-01, 1.340553e-01, 1.340753e-01, 1.340954e-01, 1.341154e-01, 1.341355e-01, 1.341556e-01, 1.341756e-01, 1.341957e-01, 1.342157e-01, 1.342358e-01, 1.342558e-01, 1.342759e-01, 1.342960e-01, 1.343160e-01, 1.343361e-01, 1.343561e-01, 1.343762e-01, 1.343962e-01, 1.344163e-01, 1.344363e-01, 1.344564e-01, 1.344765e-01, 1.344965e-01, 1.345166e-01, 1.345366e-01, 1.345567e-01, 1.345767e-01, 1.345968e-01, 1.346168e-01, 1.346369e-01, 1.346569e-01, 1.346770e-01, 1.346970e-01, 1.347171e-01, 1.347371e-01, 1.347572e-01, 1.347772e-01, 1.347973e-01, 1.348173e-01, 1.348374e-01, 1.348574e-01, 1.348775e-01, 1.348975e-01, 1.349176e-01, 1.349376e-01, 1.349577e-01, 1.349777e-01, 1.349978e-01, 1.350178e-01, 1.350379e-01, 1.350579e-01, 1.350780e-01, 1.350980e-01, 1.351181e-01, 1.351381e-01, 1.351582e-01, 1.351782e-01, 1.351982e-01, 1.352183e-01, 1.352383e-01, 1.352584e-01, 1.352784e-01, 1.352985e-01, 1.353185e-01, 1.353385e-01, 1.353586e-01, 1.353786e-01, 1.353987e-01, 1.354187e-01, 1.354388e-01, 1.354588e-01, 1.354788e-01, 1.354989e-01, 1.355189e-01, 1.355390e-01, 1.355590e-01, 1.355790e-01, 1.355991e-01, 1.356191e-01, 1.356391e-01, 1.356592e-01, 1.356792e-01, 1.356993e-01, 1.357193e-01, 1.357393e-01, 1.357594e-01, 1.357794e-01, 1.357995e-01, 1.358195e-01, 1.358395e-01, 1.358595e-01, 1.358796e-01, 1.358996e-01, 1.359197e-01, 1.359397e-01, 1.359597e-01, 1.359798e-01, 1.359998e-01, 1.360198e-01, 1.360399e-01, 1.360599e-01, 1.360799e-01, 1.361000e-01, 1.361200e-01, 1.361400e-01, 1.361601e-01, 1.361801e-01, 1.362001e-01, 1.362201e-01, 1.362402e-01, 1.362602e-01, 1.362802e-01, 1.363003e-01, 1.363203e-01, 1.363403e-01, 1.363604e-01, 1.363804e-01, 1.364004e-01, 1.364204e-01, 1.364405e-01, 1.364605e-01, 1.364805e-01, 1.365005e-01, 1.365206e-01, 1.365406e-01, 1.365606e-01, 1.365807e-01, 1.366007e-01, 1.366207e-01, 1.366407e-01, 1.366607e-01, 1.366808e-01, 1.367008e-01, 1.367208e-01, 1.367408e-01, 1.367609e-01, 1.367809e-01, 1.368009e-01, 1.368209e-01, 1.368410e-01, 1.368610e-01, 1.368810e-01, 1.369010e-01, 1.369210e-01, 1.369411e-01, 1.369611e-01, 1.369811e-01, 1.370011e-01, 1.370211e-01, 1.370412e-01, 1.370612e-01, 1.370812e-01, 1.371012e-01, 1.371212e-01, 1.371413e-01, 1.371613e-01, 1.371813e-01, 1.372013e-01, 1.372213e-01, 1.372413e-01, 1.372613e-01, 1.372814e-01, 1.373014e-01, 1.373214e-01, 1.373414e-01, 1.373614e-01, 1.373814e-01, 1.374014e-01, 1.374215e-01, 1.374415e-01, 1.374615e-01, 1.374815e-01, 1.375015e-01, 1.375215e-01, 1.375415e-01, 1.375616e-01, 1.375816e-01, 1.376016e-01, 1.376216e-01, 1.376416e-01, 1.376616e-01, 1.376816e-01, 1.377016e-01, 1.377216e-01, 1.377417e-01, 1.377617e-01, 1.377817e-01, 1.378017e-01, 1.378217e-01, 1.378417e-01, 1.378617e-01, 1.378817e-01, 1.379017e-01, 1.379217e-01, 1.379417e-01, 1.379617e-01, 1.379817e-01, 1.380018e-01, 1.380218e-01, 1.380417e-01, 1.380618e-01, 1.380818e-01, 1.381018e-01, 1.381218e-01, 1.381418e-01, 1.381618e-01, 1.381818e-01, 1.382018e-01, 1.382218e-01, 1.382418e-01, 1.382618e-01, 1.382818e-01, 1.383018e-01, 1.383218e-01, 1.383418e-01, 1.383618e-01, 1.383818e-01, 1.384018e-01, 1.384218e-01, 1.384418e-01, 1.384618e-01, 1.384818e-01, 1.385018e-01, 1.385218e-01, 1.385418e-01, 1.385618e-01, 1.385818e-01, 1.386018e-01, 1.386218e-01, 1.386418e-01, 1.386618e-01, 1.386818e-01, 1.387018e-01, 1.387218e-01, 1.387418e-01, 1.387618e-01, 1.387818e-01, 1.388018e-01, 1.388218e-01, 1.388417e-01, 1.388617e-01, 1.388817e-01, 1.389017e-01, 1.389217e-01, 1.389417e-01, 1.389617e-01, 1.389817e-01, 1.390017e-01, 1.390217e-01, 1.390417e-01, 1.390617e-01, 1.390816e-01, 1.391016e-01, 1.391216e-01, 1.391416e-01, 1.391616e-01, 1.391816e-01, 1.392016e-01, 1.392216e-01, 1.392416e-01, 1.392616e-01, 1.392815e-01, 1.393015e-01, 1.393215e-01, 1.393415e-01, 1.393615e-01, 1.393815e-01, 1.394015e-01, 1.394214e-01, 1.394414e-01, 1.394614e-01, 1.394814e-01, 1.395014e-01, 1.395214e-01, 1.395414e-01, 1.395613e-01, 1.395813e-01, 1.396013e-01, 1.396213e-01, 1.396413e-01, 1.396613e-01, 1.396812e-01, 1.397012e-01, 1.397212e-01, 1.397412e-01, 1.397612e-01, 1.397812e-01, 1.398011e-01, 1.398211e-01, 1.398411e-01, 1.398611e-01, 1.398811e-01, 1.399010e-01, 1.399210e-01, 1.399410e-01, 1.399610e-01, 1.399809e-01, 1.400009e-01, 1.400209e-01, 1.400409e-01, 1.400609e-01, 1.400808e-01, 1.401008e-01, 1.401208e-01, 1.401408e-01, 1.401607e-01, 1.401807e-01, 1.402007e-01, 1.402207e-01, 1.402406e-01, 1.402606e-01, 1.402806e-01, 1.403006e-01, 1.403205e-01, 1.403405e-01, 1.403605e-01, 1.403805e-01, 1.404004e-01, 1.404204e-01, 1.404404e-01, 1.404603e-01, 1.404803e-01, 1.405003e-01, 1.405203e-01, 1.405402e-01, 1.405602e-01, 1.405802e-01, 1.406001e-01, 1.406201e-01, 1.406401e-01, 1.406600e-01, 1.406800e-01, 1.407000e-01, 1.407200e-01, 1.407399e-01, 1.407599e-01, 1.407799e-01, 1.407998e-01, 1.408198e-01, 1.408398e-01, 1.408597e-01, 1.408797e-01, 1.408997e-01, 1.409196e-01, 1.409396e-01, 1.409595e-01, 1.409795e-01, 1.409995e-01, 1.410194e-01, 1.410394e-01, 1.410594e-01, 1.410793e-01, 1.410993e-01, 1.411193e-01, 1.411392e-01, 1.411592e-01, 1.411791e-01, 1.411991e-01, 1.412191e-01, 1.412390e-01, 1.412590e-01, 1.412789e-01, 1.412989e-01, 1.413189e-01, 1.413388e-01, 1.413588e-01, 1.413787e-01, 1.413987e-01, 1.414187e-01, 1.414386e-01, 1.414586e-01, 1.414785e-01, 1.414985e-01, 1.415184e-01, 1.415384e-01, 1.415584e-01, 1.415783e-01, 1.415983e-01, 1.416182e-01, 1.416382e-01, 1.416581e-01, 1.416781e-01, 1.416980e-01, 1.417180e-01, 1.417380e-01, 1.417579e-01, 1.417779e-01, 1.417978e-01, 1.418178e-01, 1.418377e-01, 1.418577e-01, 1.418776e-01, 1.418976e-01, 1.419175e-01, 1.419375e-01, 1.419574e-01, 1.419774e-01, 1.419973e-01, 1.420173e-01, 1.420372e-01, 1.420572e-01, 1.420771e-01, 1.420971e-01, 1.421170e-01, 1.421370e-01, 1.421569e-01, 1.421769e-01, 1.421968e-01, 1.422168e-01, 1.422367e-01, 1.422567e-01, 1.422766e-01, 1.422966e-01, 1.423165e-01, 1.423365e-01, 1.423564e-01, 1.423763e-01, 1.423963e-01, 1.424162e-01, 1.424362e-01, 1.424561e-01, 1.424761e-01, 1.424960e-01, 1.425159e-01, 1.425359e-01, 1.425558e-01, 1.425758e-01, 1.425957e-01, 1.426157e-01, 1.426356e-01, 1.426556e-01, 1.426755e-01, 1.426954e-01, 1.427154e-01, 1.427353e-01, 1.427552e-01, 1.427752e-01, 1.427951e-01, 1.428151e-01, 1.428350e-01, 1.428549e-01, 1.428749e-01, 1.428948e-01, 1.429148e-01, 1.429347e-01, 1.429546e-01, 1.429746e-01, 1.429945e-01, 1.430144e-01, 1.430344e-01, 1.430543e-01, 1.430742e-01, 1.430942e-01, 1.431141e-01, 1.431341e-01, 1.431540e-01, 1.431739e-01, 1.431939e-01, 1.432138e-01, 1.432337e-01, 1.432537e-01, 1.432736e-01, 1.432935e-01, 1.433135e-01, 1.433334e-01, 1.433533e-01, 1.433733e-01, 1.433932e-01, 1.434131e-01, 1.434330e-01, 1.434530e-01, 1.434729e-01, 1.434928e-01, 1.435128e-01, 1.435327e-01, 1.435526e-01, 1.435725e-01, 1.435925e-01, 1.436124e-01, 1.436323e-01, 1.436523e-01, 1.436722e-01, 1.436921e-01, 1.437120e-01, 1.437320e-01, 1.437519e-01, 1.437718e-01, 1.437918e-01, 1.438117e-01, 1.438316e-01, 1.438515e-01, 1.438714e-01, 1.438914e-01, 1.439113e-01, 1.439312e-01, 1.439511e-01, 1.439711e-01, 1.439910e-01, 1.440109e-01, 1.440308e-01, 1.440508e-01, 1.440707e-01, 1.440906e-01, 1.441105e-01, 1.441304e-01, 1.441504e-01, 1.441703e-01, 1.441902e-01, 1.442101e-01, 1.442300e-01, 1.442500e-01, 1.442699e-01, 1.442898e-01, 1.443097e-01, 1.443296e-01, 1.443496e-01, 1.443695e-01, 1.443894e-01, 1.444093e-01, 1.444292e-01, 1.444491e-01, 1.444691e-01, 1.444890e-01, 1.445089e-01, 1.445288e-01, 1.445487e-01, 1.445686e-01, 1.445885e-01, 1.446085e-01, 1.446284e-01, 1.446483e-01, 1.446682e-01, 1.446881e-01, 1.447080e-01, 1.447279e-01, 1.447479e-01, 1.447678e-01, 1.447877e-01, 1.448076e-01, 1.448275e-01, 1.448474e-01, 1.448673e-01, 1.448872e-01, 1.449071e-01, 1.449271e-01, 1.449470e-01, 1.449669e-01, 1.449868e-01, 1.450067e-01, 1.450266e-01, 1.450465e-01, 1.450664e-01, 1.450863e-01, 1.451062e-01, 1.451261e-01, 1.451460e-01, 1.451660e-01, 1.451859e-01, 1.452058e-01, 1.452257e-01, 1.452456e-01, 1.452655e-01, 1.452854e-01, 1.453053e-01, 1.453252e-01, 1.453451e-01, 1.453650e-01, 1.453849e-01, 1.454048e-01, 1.454247e-01, 1.454446e-01, 1.454645e-01, 1.454844e-01, 1.455043e-01, 1.455242e-01, 1.455441e-01, 1.455640e-01, 1.455839e-01, 1.456038e-01, 1.456237e-01, 1.456436e-01, 1.456635e-01, 1.456834e-01, 1.457033e-01, 1.457232e-01, 1.457431e-01, 1.457630e-01, 1.457829e-01, 1.458028e-01, 1.458227e-01, 1.458426e-01, 1.458625e-01, 1.458824e-01, 1.459023e-01, 1.459222e-01, 1.459421e-01, 1.459620e-01, 1.459819e-01, 1.460018e-01, 1.460217e-01, 1.460416e-01, 1.460615e-01, 1.460814e-01, 1.461013e-01, 1.461211e-01, 1.461410e-01, 1.461609e-01, 1.461808e-01, 1.462007e-01, 1.462206e-01, 1.462405e-01, 1.462604e-01, 1.462803e-01, 1.463002e-01, 1.463201e-01, 1.463400e-01, 1.463598e-01, 1.463797e-01, 1.463996e-01, 1.464195e-01, 1.464394e-01, 1.464593e-01, 1.464792e-01, 1.464991e-01, 1.465189e-01, 1.465389e-01, 1.465587e-01, 1.465786e-01, 1.465985e-01, 1.466184e-01, 1.466383e-01, 1.466582e-01, 1.466780e-01, 1.466979e-01, 1.467178e-01, 1.467377e-01, 1.467576e-01, 1.467775e-01, 1.467974e-01, 1.468173e-01, 1.468371e-01, 1.468570e-01, 1.468769e-01, 1.468968e-01, 1.469167e-01, 1.469365e-01, 1.469564e-01, 1.469763e-01, 1.469962e-01, 1.470161e-01, 1.470359e-01, 1.470558e-01, 1.470757e-01, 1.470956e-01, 1.471155e-01, 1.471353e-01, 1.471552e-01, 1.471751e-01, 1.471950e-01, 1.472149e-01, 1.472347e-01, 1.472546e-01, 1.472745e-01, 1.472944e-01, 1.473143e-01, 1.473341e-01, 1.473540e-01, 1.473739e-01, 1.473937e-01, 1.474136e-01, 1.474335e-01, 1.474534e-01, 1.474733e-01, 1.474931e-01, 1.475130e-01, 1.475329e-01, 1.475528e-01, 1.475726e-01, 1.475925e-01, 1.476124e-01, 1.476323e-01, 1.476521e-01, 1.476720e-01, 1.476919e-01, 1.477117e-01, 1.477316e-01, 1.477515e-01, 1.477714e-01, 1.477912e-01, 1.478111e-01, 1.478309e-01, 1.478508e-01, 1.478707e-01, 1.478906e-01, 1.479104e-01, 1.479303e-01, 1.479502e-01, 1.479700e-01, 1.479899e-01, 1.480098e-01, 1.480296e-01, 1.480495e-01, 1.480694e-01, 1.480892e-01, 1.481091e-01, 1.481290e-01, 1.481488e-01, 1.481687e-01, 1.481886e-01, 1.482084e-01, 1.482283e-01, 1.482482e-01, 1.482680e-01, 1.482879e-01, 1.483078e-01, 1.483276e-01, 1.483475e-01, 1.483673e-01, 1.483872e-01, 1.484071e-01, 1.484269e-01, 1.484468e-01, 1.484667e-01, 1.484865e-01, 1.485064e-01, 1.485262e-01, 1.485461e-01, 1.485659e-01, 1.485858e-01, 1.486057e-01, 1.486255e-01, 1.486454e-01, 1.486652e-01, 1.486851e-01, 1.487050e-01, 1.487248e-01, 1.487447e-01, 1.487645e-01, 1.487844e-01, 1.488042e-01, 1.488241e-01, 1.488440e-01, 1.488638e-01, 1.488837e-01, 1.489035e-01, 1.489234e-01, 1.489432e-01, 1.489631e-01, 1.489829e-01, 1.490028e-01, 1.490227e-01, 1.490425e-01, 1.490624e-01, 1.490822e-01, 1.491021e-01, 1.491219e-01, 1.491418e-01, 1.491616e-01, 1.491815e-01, 1.492013e-01, 1.492212e-01, 1.492410e-01, 1.492609e-01, 1.492807e-01, 1.493006e-01, 1.493204e-01, 1.493403e-01, 1.493601e-01, 1.493800e-01, 1.493998e-01, 1.494197e-01, 1.494395e-01, 1.494594e-01, 1.494792e-01, 1.494991e-01, 1.495189e-01, 1.495388e-01, 1.495586e-01, 1.495784e-01, 1.495983e-01, 1.496181e-01, 1.496380e-01, 1.496578e-01, 1.496777e-01, 1.496975e-01, 1.497174e-01, 1.497372e-01, 1.497570e-01, 1.497769e-01, 1.497967e-01, 1.498166e-01, 1.498364e-01, 1.498563e-01, 1.498761e-01, 1.498959e-01, 1.499158e-01, 1.499356e-01, 1.499555e-01, 1.499753e-01, 1.499951e-01, 1.500150e-01, 1.500348e-01, 1.500547e-01, 1.500745e-01, 1.500943e-01, 1.501142e-01, 1.501340e-01, 1.501538e-01, 1.501737e-01, 1.501935e-01, 1.502134e-01, 1.502332e-01, 1.502530e-01, 1.502729e-01, 1.502927e-01, 1.503125e-01, 1.503324e-01, 1.503522e-01, 1.503721e-01, 1.503919e-01, 1.504117e-01, 1.504316e-01, 1.504514e-01, 1.504712e-01, 1.504911e-01, 1.505109e-01, 1.505307e-01, 1.505505e-01, 1.505704e-01, 1.505902e-01, 1.506100e-01, 1.506299e-01, 1.506497e-01, 1.506695e-01, 1.506894e-01, 1.507092e-01, 1.507290e-01, 1.507489e-01, 1.507687e-01, 1.507885e-01, 1.508083e-01, 1.508282e-01, 1.508480e-01, 1.508678e-01, 1.508877e-01, 1.509075e-01, 1.509273e-01, 1.509471e-01, 1.509670e-01, 1.509868e-01, 1.510066e-01, 1.510264e-01, 1.510463e-01, 1.510661e-01, 1.510859e-01, 1.511057e-01, 1.511256e-01, 1.511454e-01, 1.511652e-01, 1.511851e-01, 1.512049e-01, 1.512247e-01, 1.512445e-01, 1.512643e-01, 1.512842e-01, 1.513040e-01, 1.513238e-01, 1.513436e-01, 1.513634e-01, 1.513833e-01, 1.514031e-01, 1.514229e-01, 1.514427e-01, 1.514626e-01, 1.514824e-01, 1.515022e-01, 1.515220e-01, 1.515418e-01, 1.515616e-01, 1.515815e-01, 1.516013e-01, 1.516211e-01, 1.516409e-01, 1.516607e-01, 1.516805e-01, 1.517004e-01, 1.517202e-01, 1.517400e-01, 1.517598e-01, 1.517796e-01, 1.517995e-01, 1.518193e-01, 1.518391e-01, 1.518589e-01, 1.518787e-01, 1.518985e-01, 1.519183e-01, 1.519381e-01, 1.519580e-01, 1.519778e-01, 1.519976e-01, 1.520174e-01, 1.520372e-01, 1.520570e-01, 1.520768e-01, 1.520966e-01, 1.521165e-01, 1.521363e-01, 1.521561e-01, 1.521759e-01, 1.521957e-01, 1.522155e-01, 1.522353e-01, 1.522551e-01, 1.522749e-01, 1.522947e-01, 1.523146e-01, 1.523344e-01, 1.523542e-01, 1.523740e-01, 1.523938e-01, 1.524136e-01, 1.524334e-01, 1.524532e-01, 1.524730e-01, 1.524928e-01, 1.525126e-01, 1.525324e-01, 1.525522e-01, 1.525720e-01, 1.525918e-01, 1.526116e-01, 1.526314e-01, 1.526513e-01, 1.526711e-01, 1.526909e-01, 1.527107e-01, 1.527305e-01, 1.527503e-01, 1.527701e-01, 1.527899e-01, 1.528097e-01, 1.528295e-01, 1.528493e-01, 1.528691e-01, 1.528889e-01, 1.529087e-01, 1.529285e-01, 1.529483e-01, 1.529681e-01, 1.529879e-01, 1.530077e-01, 1.530275e-01, 1.530473e-01, 1.530671e-01, 1.530869e-01, 1.531067e-01, 1.531265e-01, 1.531463e-01, 1.531661e-01, 1.531858e-01, 1.532056e-01, 1.532254e-01, 1.532452e-01, 1.532650e-01, 1.532848e-01, 1.533046e-01, 1.533244e-01, 1.533442e-01, 1.533640e-01, 1.533838e-01, 1.534036e-01, 1.534234e-01, 1.534432e-01, 1.534630e-01, 1.534828e-01, 1.535026e-01, 1.535223e-01, 1.535421e-01, 1.535619e-01, 1.535817e-01, 1.536015e-01, 1.536213e-01, 1.536411e-01, 1.536609e-01, 1.536807e-01, 1.537005e-01, 1.537202e-01, 1.537400e-01, 1.537598e-01, 1.537796e-01, 1.537994e-01, 1.538192e-01, 1.538390e-01, 1.538588e-01, 1.538786e-01, 1.538983e-01, 1.539181e-01, 1.539379e-01, 1.539577e-01, 1.539775e-01, 1.539973e-01, 1.540170e-01, 1.540368e-01, 1.540566e-01, 1.540764e-01, 1.540962e-01, 1.541160e-01, 1.541357e-01, 1.541555e-01, 1.541753e-01, 1.541951e-01, 1.542149e-01, 1.542347e-01, 1.542544e-01, 1.542742e-01, 1.542940e-01, 1.543138e-01, 1.543336e-01, 1.543534e-01, 1.543731e-01, 1.543929e-01, 1.544127e-01, 1.544325e-01, 1.544522e-01, 1.544720e-01, 1.544918e-01, 1.545116e-01, 1.545314e-01, 1.545511e-01, 1.545709e-01, 1.545907e-01, 1.546105e-01, 1.546302e-01, 1.546500e-01, 1.546698e-01, 1.546896e-01, 1.547094e-01, 1.547291e-01, 1.547489e-01, 1.547687e-01, 1.547884e-01, 1.548082e-01, 1.548280e-01, 1.548478e-01, 1.548675e-01, 1.548873e-01, 1.549071e-01, 1.549269e-01, 1.549466e-01, 1.549664e-01, 1.549862e-01, 1.550059e-01, 1.550257e-01, 1.550455e-01, 1.550653e-01, 1.550850e-01, 1.551048e-01, 1.551246e-01, 1.551443e-01, 1.551641e-01, 1.551839e-01, 1.552036e-01, 1.552234e-01, 1.552432e-01, 1.552629e-01, 1.552827e-01, 1.553025e-01, 1.553223e-01, 1.553420e-01, 1.553618e-01, 1.553815e-01, 1.554013e-01, 1.554211e-01, 1.554408e-01, 1.554606e-01, 1.554804e-01, 1.555001e-01, 1.555199e-01, 1.555397e-01, 1.555594e-01, 1.555792e-01, 1.555990e-01, 1.556187e-01, 1.556385e-01, 1.556582e-01, 1.556780e-01, 1.556978e-01, 1.557175e-01, 1.557373e-01, 1.557571e-01, 1.557768e-01, 1.557966e-01, 1.558163e-01, 1.558361e-01, 1.558559e-01, 1.558756e-01, 1.558954e-01, 1.559151e-01, 1.559349e-01, 1.559547e-01, 1.559744e-01, 1.559942e-01, 1.560139e-01, 1.560337e-01, 1.560534e-01, 1.560732e-01, 1.560930e-01, 1.561127e-01, 1.561325e-01, 1.561522e-01, 1.561720e-01, 1.561917e-01, 1.562115e-01, 1.562312e-01, 1.562510e-01, 1.562707e-01, 1.562905e-01, 1.563103e-01, 1.563300e-01, 1.563498e-01, 1.563695e-01, 1.563893e-01, 1.564090e-01, 1.564288e-01, 1.564485e-01, 1.564683e-01, 1.564880e-01, 1.565078e-01, 1.565275e-01, 1.565473e-01, 1.565670e-01, 1.565868e-01, 1.566065e-01, 1.566263e-01, 1.566460e-01, 1.566658e-01, 1.566855e-01, 1.567053e-01, 1.567250e-01, 1.567448e-01, 1.567645e-01, 1.567843e-01, 1.568040e-01, 1.568238e-01, 1.568435e-01, 1.568632e-01, 1.568830e-01, 1.569027e-01, 1.569225e-01, 1.569422e-01, 1.569620e-01, 1.569817e-01, 1.570015e-01, 1.570212e-01, 1.570410e-01, 1.570607e-01, 1.570804e-01, 1.571002e-01, 1.571199e-01, 1.571397e-01, 1.571594e-01, 1.571791e-01, 1.571989e-01, 1.572186e-01, 1.572384e-01, 1.572581e-01, 1.572778e-01, 1.572976e-01, 1.573173e-01, 1.573371e-01, 1.573568e-01, 1.573765e-01, 1.573963e-01, 1.574160e-01, 1.574358e-01, 1.574555e-01, 1.574752e-01, 1.574950e-01, 1.575147e-01, 1.575344e-01, 1.575542e-01, 1.575739e-01, 1.575937e-01, 1.576134e-01, 1.576331e-01, 1.576529e-01, 1.576726e-01, 1.576923e-01, 1.577121e-01, 1.577318e-01, 1.577515e-01, 1.577713e-01, 1.577910e-01, 1.578107e-01, 1.578305e-01, 1.578502e-01, 1.578699e-01, 1.578897e-01, 1.579094e-01, 1.579291e-01, 1.579489e-01, 1.579686e-01, 1.579883e-01, 1.580081e-01, 1.580278e-01, 1.580475e-01, 1.580672e-01, 1.580870e-01, 1.581067e-01, 1.581264e-01, 1.581462e-01, 1.581659e-01, 1.581856e-01, 1.582053e-01, 1.582251e-01, 1.582448e-01, 1.582645e-01, 1.582842e-01, 1.583040e-01, 1.583237e-01, 1.583434e-01, 1.583631e-01, 1.583829e-01, 1.584026e-01, 1.584223e-01, 1.584420e-01, 1.584618e-01, 1.584815e-01, 1.585012e-01, 1.585209e-01, 1.585407e-01, 1.585604e-01, 1.585801e-01, 1.585998e-01, 1.586195e-01, 1.586393e-01, 1.586590e-01, 1.586787e-01, 1.586984e-01, 1.587182e-01, 1.587379e-01, 1.587576e-01, 1.587773e-01, 1.587970e-01, 1.588168e-01, 1.588365e-01, 1.588562e-01, 1.588759e-01, 1.588956e-01, 1.589153e-01, 1.589351e-01, 1.589548e-01, 1.589745e-01, 1.589942e-01, 1.590139e-01, 1.590336e-01, 1.590534e-01, 1.590731e-01, 1.590928e-01, 1.591125e-01, 1.591322e-01, 1.591519e-01, 1.591717e-01, 1.591914e-01, 1.592111e-01, 1.592308e-01, 1.592505e-01, 1.592702e-01, 1.592899e-01, 1.593096e-01, 1.593294e-01, 1.593491e-01, 1.593688e-01, 1.593885e-01, 1.594082e-01, 1.594279e-01, 1.594476e-01, 1.594673e-01, 1.594871e-01, 1.595068e-01, 1.595265e-01, 1.595462e-01, 1.595659e-01, 1.595856e-01, 1.596053e-01, 1.596250e-01, 1.596447e-01, 1.596644e-01, 1.596841e-01, 1.597038e-01, 1.597236e-01, 1.597432e-01, 1.597630e-01, 1.597827e-01, 1.598024e-01, 1.598221e-01, 1.598418e-01, 1.598615e-01, 1.598812e-01, 1.599009e-01, 1.599206e-01, 1.599403e-01, 1.599600e-01, 1.599797e-01, 1.599994e-01, 1.600191e-01, 1.600388e-01, 1.600585e-01, 1.600782e-01, 1.600979e-01, 1.601176e-01, 1.601373e-01, 1.601570e-01, 1.601767e-01, 1.601964e-01, 1.602161e-01, 1.602358e-01, 1.602555e-01, 1.602752e-01, 1.602949e-01, 1.603146e-01, 1.603343e-01, 1.603540e-01, 1.603737e-01, 1.603934e-01, 1.604131e-01, 1.604328e-01, 1.604525e-01, 1.604722e-01, 1.604919e-01, 1.605116e-01, 1.605313e-01, 1.605510e-01, 1.605707e-01, 1.605904e-01, 1.606101e-01, 1.606298e-01, 1.606494e-01, 1.606692e-01, 1.606888e-01, 1.607085e-01, 1.607282e-01, 1.607479e-01, 1.607676e-01, 1.607873e-01, 1.608070e-01, 1.608267e-01, 1.608464e-01, 1.608661e-01, 1.608858e-01, 1.609055e-01, 1.609251e-01, 1.609448e-01, 1.609645e-01, 1.609842e-01, 1.610039e-01, 1.610236e-01, 1.610433e-01, 1.610630e-01, 1.610827e-01, 1.611024e-01, 1.611220e-01, 1.611417e-01, 1.611614e-01, 1.611811e-01, 1.612008e-01, 1.612205e-01, 1.612402e-01, 1.612598e-01, 1.612795e-01, 1.612992e-01, 1.613189e-01, 1.613386e-01, 1.613583e-01, 1.613780e-01, 1.613976e-01, 1.614173e-01, 1.614370e-01, 1.614567e-01, 1.614764e-01, 1.614961e-01, 1.615157e-01, 1.615354e-01, 1.615551e-01, 1.615748e-01, 1.615945e-01, 1.616141e-01, 1.616338e-01, 1.616535e-01, 1.616732e-01, 1.616929e-01, 1.617125e-01, 1.617322e-01, 1.617519e-01, 1.617716e-01, 1.617913e-01, 1.618109e-01, 1.618306e-01, 1.618503e-01, 1.618700e-01, 1.618896e-01, 1.619093e-01, 1.619290e-01, 1.619487e-01, 1.619684e-01, 1.619880e-01, 1.620077e-01, 1.620274e-01, 1.620471e-01, 1.620667e-01, 1.620864e-01, 1.621061e-01, 1.621258e-01, 1.621454e-01, 1.621651e-01, 1.621848e-01, 1.622044e-01, 1.622241e-01, 1.622438e-01, 1.622635e-01, 1.622831e-01, 1.623028e-01, 1.623225e-01, 1.623421e-01, 1.623618e-01, 1.623815e-01, 1.624012e-01, 1.624208e-01, 1.624405e-01, 1.624602e-01, 1.624798e-01, 1.624995e-01, 1.625192e-01, 1.625388e-01, 1.625585e-01, 1.625782e-01, 1.625978e-01, 1.626175e-01, 1.626372e-01, 1.626568e-01, 1.626765e-01, 1.626962e-01, 1.627159e-01, 1.627355e-01, 1.627552e-01, 1.627748e-01, 1.627945e-01, 1.628142e-01, 1.628338e-01, 1.628535e-01, 1.628732e-01, 1.628928e-01, 1.629125e-01, 1.629322e-01, 1.629518e-01, 1.629715e-01, 1.629912e-01, 1.630108e-01, 1.630305e-01, 1.630501e-01, 1.630698e-01, 1.630895e-01, 1.631091e-01, 1.631288e-01, 1.631484e-01, 1.631681e-01, 1.631878e-01, 1.632074e-01, 1.632271e-01, 1.632467e-01, 1.632664e-01, 1.632860e-01, 1.633057e-01, 1.633254e-01, 1.633450e-01, 1.633647e-01, 1.633843e-01, 1.634040e-01, 1.634236e-01, 1.634433e-01, 1.634630e-01, 1.634826e-01, 1.635023e-01, 1.635219e-01, 1.635416e-01, 1.635612e-01, 1.635809e-01, 1.636005e-01, 1.636202e-01, 1.636398e-01, 1.636595e-01, 1.636792e-01, 1.636988e-01, 1.637185e-01, 1.637381e-01, 1.637578e-01, 1.637774e-01, 1.637971e-01, 1.638167e-01, 1.638364e-01, 1.638560e-01, 1.638757e-01, 1.638953e-01, 1.639150e-01, 1.639346e-01, 1.639543e-01, 1.639739e-01, 1.639936e-01, 1.640132e-01, 1.640329e-01, 1.640525e-01, 1.640722e-01, 1.640918e-01, 1.641115e-01, 1.641311e-01, 1.641507e-01, 1.641704e-01, 1.641900e-01, 1.642097e-01, 1.642293e-01, 1.642490e-01, 1.642686e-01, 1.642883e-01, 1.643079e-01, 1.643275e-01, 1.643472e-01, 1.643668e-01, 1.643865e-01, 1.644061e-01, 1.644258e-01, 1.644454e-01, 1.644651e-01, 1.644847e-01, 1.645043e-01, 1.645240e-01, 1.645436e-01, 1.645633e-01, 1.645829e-01, 1.646025e-01, 1.646222e-01, 1.646418e-01, 1.646615e-01, 1.646811e-01, 1.647007e-01, 1.647204e-01, 1.647400e-01, 1.647597e-01, 1.647793e-01, 1.647989e-01, 1.648186e-01, 1.648382e-01, 1.648578e-01, 1.648775e-01, 1.648971e-01, 1.649167e-01, 1.649364e-01, 1.649560e-01, 1.649756e-01, 1.649953e-01, 1.650149e-01, 1.650345e-01, 1.650542e-01, 1.650738e-01, 1.650935e-01, 1.651131e-01, 1.651327e-01, 1.651524e-01, 1.651720e-01, 1.651916e-01, 1.652112e-01, 1.652309e-01, 1.652505e-01, 1.652701e-01, 1.652898e-01, 1.653094e-01, 1.653290e-01, 1.653487e-01, 1.653683e-01, 1.653879e-01, 1.654076e-01, 1.654272e-01, 1.654468e-01, 1.654664e-01, 1.654861e-01, 1.655057e-01, 1.655253e-01, 1.655450e-01, 1.655646e-01, 1.655842e-01, 1.656038e-01, 1.656235e-01, 1.656431e-01, 1.656627e-01, 1.656823e-01, 1.657020e-01, 1.657216e-01, 1.657412e-01, 1.657608e-01, 1.657805e-01, 1.658001e-01, 1.658197e-01, 1.658393e-01, 1.658590e-01, 1.658786e-01, 1.658982e-01, 1.659178e-01, 1.659375e-01, 1.659571e-01, 1.659767e-01, 1.659963e-01, 1.660159e-01, 1.660355e-01, 1.660552e-01, 1.660748e-01, 1.660944e-01, 1.661140e-01, 1.661336e-01, 1.661533e-01, 1.661729e-01, 1.661925e-01, 1.662121e-01, 1.662318e-01, 1.662514e-01, 1.662710e-01, 1.662906e-01, 1.663102e-01, 1.663298e-01, 1.663494e-01, 1.663691e-01, 1.663887e-01, 1.664083e-01, 1.664279e-01, 1.664475e-01, 1.664671e-01, 1.664868e-01, 1.665064e-01, 1.665260e-01, 1.665456e-01, 1.665652e-01, 1.665848e-01, 1.666044e-01, 1.666241e-01, 1.666437e-01, 1.666633e-01, 1.666829e-01, 1.667025e-01, 1.667221e-01, 1.667417e-01, 1.667613e-01, 1.667809e-01, 1.668006e-01, 1.668202e-01, 1.668398e-01, 1.668594e-01, 1.668790e-01, 1.668986e-01, 1.669182e-01, 1.669378e-01, 1.669574e-01, 1.669770e-01, 1.669966e-01, 1.670163e-01, 1.670359e-01, 1.670555e-01, 1.670751e-01, 1.670947e-01, 1.671143e-01, 1.671339e-01, 1.671535e-01, 1.671731e-01, 1.671927e-01, 1.672123e-01, 1.672319e-01, 1.672515e-01, 1.672711e-01, 1.672907e-01, 1.673103e-01, 1.673299e-01, 1.673495e-01, 1.673691e-01, 1.673888e-01, 1.674083e-01, 1.674279e-01, 1.674475e-01, 1.674671e-01, 1.674868e-01, 1.675064e-01, 1.675260e-01, 1.675456e-01, 1.675652e-01, 1.675847e-01, 1.676043e-01, 1.676240e-01, 1.676435e-01, 1.676631e-01, 1.676828e-01, 1.677023e-01, 1.677219e-01, 1.677415e-01, 1.677611e-01, 1.677807e-01, 1.678003e-01, 1.678199e-01, 1.678395e-01, 1.678591e-01, 1.678787e-01, 1.678983e-01, 1.679179e-01, 1.679375e-01, 1.679571e-01, 1.679767e-01, 1.679963e-01, 1.680159e-01, 1.680355e-01, 1.680551e-01, 1.680747e-01, 1.680942e-01, 1.681138e-01, 1.681334e-01, 1.681530e-01, 1.681726e-01, 1.681922e-01, 1.682118e-01, 1.682314e-01, 1.682510e-01, 1.682706e-01, 1.682902e-01, 1.683098e-01, 1.683293e-01, 1.683489e-01, 1.683685e-01, 1.683881e-01, 1.684077e-01, 1.684273e-01, 1.684469e-01, 1.684665e-01, 1.684860e-01, 1.685056e-01, 1.685252e-01, 1.685448e-01, 1.685644e-01, 1.685840e-01, 1.686036e-01, 1.686231e-01, 1.686427e-01, 1.686623e-01, 1.686819e-01, 1.687015e-01, 1.687211e-01, 1.687407e-01, 1.687602e-01, 1.687798e-01, 1.687994e-01, 1.688190e-01, 1.688386e-01, 1.688582e-01, 1.688777e-01, 1.688973e-01, 1.689169e-01, 1.689365e-01, 1.689561e-01, 1.689757e-01, 1.689952e-01, 1.690148e-01, 1.690344e-01, 1.690540e-01, 1.690736e-01, 1.690931e-01, 1.691127e-01, 1.691323e-01, 1.691519e-01, 1.691714e-01, 1.691910e-01, 1.692106e-01, 1.692302e-01, 1.692497e-01, 1.692693e-01, 1.692889e-01, 1.693085e-01, 1.693280e-01, 1.693476e-01, 1.693672e-01, 1.693868e-01, 1.694064e-01, 1.694259e-01, 1.694455e-01, 1.694651e-01, 1.694847e-01, 1.695042e-01, 1.695238e-01, 1.695434e-01, 1.695630e-01, 1.695825e-01, 1.696021e-01, 1.696217e-01, 1.696412e-01, 1.696608e-01, 1.696804e-01, 1.697000e-01, 1.697195e-01, 1.697391e-01, 1.697587e-01, 1.697782e-01, 1.697978e-01, 1.698174e-01, 1.698369e-01, 1.698565e-01, 1.698761e-01, 1.698956e-01, 1.699152e-01, 1.699348e-01, 1.699543e-01, 1.699739e-01, 1.699935e-01, 1.700131e-01, 1.700326e-01, 1.700522e-01, 1.700718e-01, 1.700913e-01, 1.701109e-01, 1.701304e-01, 1.701500e-01, 1.701696e-01, 1.701891e-01, 1.702087e-01, 1.702283e-01, 1.702478e-01, 1.702674e-01, 1.702870e-01, 1.703065e-01, 1.703261e-01, 1.703456e-01, 1.703652e-01, 1.703848e-01, 1.704043e-01, 1.704239e-01, 1.704435e-01, 1.704630e-01, 1.704826e-01, 1.705021e-01, 1.705217e-01, 1.705413e-01, 1.705608e-01, 1.705804e-01, 1.705999e-01, 1.706195e-01, 1.706391e-01, 1.706586e-01, 1.706782e-01, 1.706977e-01, 1.707173e-01, 1.707368e-01, 1.707564e-01, 1.707759e-01, 1.707955e-01, 1.708151e-01, 1.708346e-01, 1.708542e-01, 1.708737e-01, 1.708933e-01, 1.709128e-01, 1.709324e-01, 1.709519e-01, 1.709715e-01, 1.709910e-01, 1.710106e-01, 1.710302e-01, 1.710497e-01, 1.710693e-01, 1.710888e-01, 1.711084e-01, 1.711279e-01, 1.711475e-01, 1.711670e-01, 1.711866e-01, 1.712061e-01, 1.712257e-01, 1.712452e-01, 1.712648e-01, 1.712843e-01, 1.713039e-01, 1.713234e-01, 1.713430e-01, 1.713625e-01, 1.713821e-01, 1.714016e-01, 1.714212e-01, 1.714407e-01, 1.714603e-01, 1.714798e-01, 1.714993e-01, 1.715189e-01, 1.715384e-01, 1.715580e-01, 1.715775e-01, 1.715971e-01, 1.716166e-01, 1.716362e-01, 1.716557e-01, 1.716752e-01, 1.716948e-01, 1.717144e-01, 1.717339e-01, 1.717534e-01, 1.717730e-01, 1.717925e-01, 1.718121e-01, 1.718316e-01, 1.718511e-01, 1.718707e-01, 1.718902e-01, 1.719098e-01, 1.719293e-01, 1.719489e-01, 1.719684e-01, 1.719879e-01, 1.720075e-01, 1.720270e-01, 1.720465e-01, 1.720661e-01, 1.720856e-01, 1.721052e-01, 1.721247e-01, 1.721442e-01, 1.721638e-01, 1.721833e-01, 1.722029e-01, 1.722224e-01, 1.722419e-01, 1.722615e-01, 1.722810e-01, 1.723005e-01, 1.723201e-01, 1.723396e-01, 1.723591e-01, 1.723787e-01, 1.723982e-01, 1.724177e-01, 1.724373e-01, 1.724568e-01, 1.724763e-01, 1.724959e-01, 1.725154e-01, 1.725349e-01, 1.725545e-01, 1.725740e-01, 1.725935e-01, 1.726131e-01, 1.726326e-01, 1.726521e-01, 1.726717e-01, 1.726912e-01, 1.727107e-01, 1.727303e-01, 1.727498e-01, 1.727693e-01, 1.727888e-01, 1.728084e-01, 1.728279e-01, 1.728474e-01, 1.728670e-01, 1.728865e-01, 1.729060e-01, 1.729255e-01, 1.729451e-01, 1.729646e-01, 1.729841e-01, 1.730036e-01, 1.730232e-01, 1.730427e-01, 1.730622e-01, 1.730818e-01, 1.731013e-01, 1.731208e-01, 1.731403e-01, 1.731598e-01, 1.731794e-01, 1.731989e-01, 1.732184e-01, 1.732379e-01, 1.732575e-01, 1.732770e-01, 1.732965e-01, 1.733160e-01, 1.733356e-01, 1.733551e-01, 1.733746e-01, 1.733941e-01, 1.734136e-01, 1.734332e-01, 1.734527e-01, 1.734722e-01, 1.734917e-01, 1.735112e-01, 1.735308e-01, 1.735503e-01, 1.735698e-01, 1.735893e-01, 1.736088e-01, 1.736283e-01, 1.736479e-01, 1.736674e-01, 1.736869e-01, 1.737064e-01, 1.737259e-01, 1.737454e-01, 1.737650e-01, 1.737845e-01, 1.738040e-01, 1.738235e-01, 1.738430e-01, 1.738625e-01, 1.738821e-01, 1.739016e-01, 1.739211e-01, 1.739406e-01, 1.739601e-01, 1.739796e-01, 1.739991e-01, 1.740187e-01, 1.740382e-01, 1.740577e-01, 1.740772e-01, 1.740967e-01, 1.741162e-01, 1.741357e-01, 1.741552e-01, 1.741747e-01, 1.741942e-01, 1.742138e-01, 1.742333e-01, 1.742528e-01, 1.742723e-01, 1.742918e-01, 1.743113e-01, 1.743308e-01, 1.743503e-01, 1.743698e-01, 1.743893e-01, 1.744088e-01, 1.744283e-01, 1.744478e-01, 1.744674e-01, 1.744869e-01, 1.745064e-01, 1.745259e-01, 1.745454e-01, 1.745649e-01, 1.745844e-01, 1.746039e-01, 1.746234e-01, 1.746429e-01, 1.746624e-01, 1.746819e-01, 1.747014e-01, 1.747209e-01, 1.747404e-01, 1.747599e-01, 1.747794e-01, 1.747989e-01, 1.748184e-01, 1.748379e-01, 1.748574e-01, 1.748769e-01, 1.748964e-01, 1.749159e-01, 1.749354e-01, 1.749549e-01, 1.749744e-01, 1.749939e-01, 1.750134e-01, 1.750329e-01, 1.750524e-01, 1.750719e-01, 1.750914e-01, 1.751109e-01, 1.751304e-01, 1.751499e-01, 1.751694e-01, 1.751889e-01, 1.752084e-01, 1.752279e-01, 1.752474e-01, 1.752669e-01, 1.752864e-01, 1.753059e-01, 1.753254e-01, 1.753449e-01, 1.753644e-01, 1.753839e-01, 1.754034e-01, 1.754228e-01, 1.754423e-01, 1.754618e-01, 1.754813e-01, 1.755008e-01, 1.755203e-01, 1.755398e-01, 1.755593e-01, 1.755788e-01, 1.755983e-01, 1.756178e-01, 1.756373e-01, 1.756568e-01, 1.756762e-01, 1.756957e-01, 1.757152e-01, 1.757347e-01, 1.757542e-01, 1.757737e-01, 1.757932e-01, 1.758127e-01, 1.758322e-01, 1.758516e-01, 1.758711e-01, 1.758906e-01, 1.759101e-01, 1.759296e-01, 1.759491e-01, 1.759686e-01, 1.759880e-01, 1.760075e-01, 1.760270e-01, 1.760465e-01, 1.760660e-01, 1.760855e-01, 1.761050e-01, 1.761244e-01, 1.761439e-01, 1.761634e-01, 1.761829e-01, 1.762024e-01, 1.762218e-01, 1.762413e-01, 1.762608e-01, 1.762803e-01, 1.762998e-01, 1.763193e-01, 1.763387e-01, 1.763582e-01, 1.763777e-01, 1.763972e-01, 1.764167e-01, 1.764362e-01, 1.764556e-01, 1.764751e-01, 1.764946e-01, 1.765141e-01, 1.765336e-01, 1.765530e-01, 1.765725e-01, 1.765920e-01, 1.766115e-01, 1.766309e-01, 1.766504e-01, 1.766699e-01, 1.766894e-01, 1.767088e-01, 1.767283e-01, 1.767478e-01, 1.767673e-01, 1.767867e-01, 1.768062e-01, 1.768257e-01, 1.768452e-01, 1.768646e-01, 1.768841e-01, 1.769036e-01, 1.769231e-01, 1.769425e-01, 1.769620e-01, 1.769815e-01, 1.770010e-01, 1.770204e-01, 1.770399e-01, 1.770594e-01, 1.770788e-01, 1.770983e-01, 1.771178e-01, 1.771373e-01, 1.771567e-01, 1.771762e-01, 1.771957e-01, 1.772151e-01, 1.772346e-01, 1.772541e-01, 1.772735e-01, 1.772930e-01, 1.773125e-01, 1.773319e-01, 1.773514e-01, 1.773709e-01, 1.773903e-01, 1.774098e-01, 1.774293e-01, 1.774487e-01, 1.774682e-01, 1.774877e-01, 1.775071e-01, 1.775266e-01, 1.775461e-01, 1.775655e-01, 1.775850e-01, 1.776045e-01, 1.776239e-01, 1.776434e-01, 1.776628e-01, 1.776823e-01, 1.777018e-01, 1.777212e-01, 1.777407e-01, 1.777602e-01, 1.777796e-01, 1.777991e-01, 1.778186e-01, 1.778380e-01, 1.778575e-01, 1.778769e-01, 1.778964e-01, 1.779158e-01, 1.779353e-01, 1.779548e-01, 1.779742e-01, 1.779937e-01, 1.780131e-01, 1.780326e-01, 1.780521e-01, 1.780715e-01, 1.780910e-01, 1.781104e-01, 1.781299e-01, 1.781493e-01, 1.781688e-01, 1.781883e-01, 1.782077e-01, 1.782272e-01, 1.782466e-01, 1.782661e-01, 1.782855e-01, 1.783050e-01, 1.783244e-01, 1.783439e-01, 1.783634e-01, 1.783828e-01, 1.784023e-01, 1.784217e-01, 1.784412e-01, 1.784606e-01, 1.784801e-01, 1.784995e-01, 1.785190e-01, 1.785384e-01, 1.785579e-01, 1.785773e-01, 1.785968e-01, 1.786162e-01, 1.786357e-01, 1.786551e-01, 1.786746e-01, 1.786940e-01, 1.787135e-01, 1.787329e-01, 1.787524e-01, 1.787718e-01, 1.787913e-01, 1.788107e-01, 1.788302e-01, 1.788496e-01, 1.788691e-01, 1.788885e-01, 1.789079e-01, 1.789274e-01, 1.789468e-01, 1.789663e-01, 1.789857e-01, 1.790052e-01, 1.790246e-01, 1.790441e-01, 1.790635e-01, 1.790830e-01, 1.791024e-01, 1.791218e-01, 1.791413e-01, 1.791607e-01, 1.791802e-01, 1.791996e-01, 1.792191e-01, 1.792385e-01, 1.792579e-01, 1.792774e-01, 1.792968e-01, 1.793163e-01, 1.793357e-01, 1.793551e-01, 1.793746e-01, 1.793940e-01, 1.794135e-01, 1.794329e-01, 1.794523e-01, 1.794718e-01, 1.794912e-01, 1.795107e-01, 1.795301e-01, 1.795495e-01, 1.795690e-01, 1.795884e-01, 1.796078e-01, 1.796273e-01, 1.796467e-01, 1.796662e-01, 1.796856e-01, 1.797050e-01, 1.797245e-01, 1.797439e-01, 1.797633e-01, 1.797828e-01, 1.798022e-01, 1.798216e-01, 1.798411e-01, 1.798605e-01, 1.798799e-01, 1.798994e-01, 1.799188e-01, 1.799382e-01, 1.799577e-01, 1.799771e-01, 1.799965e-01, 1.800160e-01, 1.800354e-01, 1.800548e-01, 1.800743e-01, 1.800937e-01, 1.801131e-01, 1.801326e-01, 1.801520e-01, 1.801714e-01, 1.801908e-01, 1.802103e-01, 1.802297e-01, 1.802491e-01, 1.802686e-01, 1.802880e-01, 1.803074e-01, 1.803268e-01, 1.803463e-01, 1.803657e-01, 1.803851e-01, 1.804045e-01, 1.804240e-01, 1.804434e-01, 1.804628e-01, 1.804823e-01, 1.805017e-01, 1.805211e-01, 1.805405e-01, 1.805599e-01, 1.805794e-01, 1.805988e-01, 1.806182e-01, 1.806376e-01, 1.806571e-01, 1.806765e-01, 1.806959e-01, 1.807153e-01, 1.807347e-01, 1.807542e-01, 1.807736e-01, 1.807930e-01, 1.808124e-01, 1.808318e-01, 1.808513e-01, 1.808707e-01, 1.808901e-01, 1.809095e-01, 1.809289e-01, 1.809484e-01, 1.809678e-01, 1.809872e-01, 1.810066e-01, 1.810260e-01, 1.810455e-01, 1.810649e-01, 1.810843e-01, 1.811037e-01, 1.811231e-01, 1.811426e-01, 1.811620e-01, 1.811814e-01, 1.812008e-01, 1.812202e-01, 1.812396e-01, 1.812591e-01, 1.812785e-01, 1.812979e-01, 1.813173e-01, 1.813367e-01, 1.813561e-01, 1.813755e-01, 1.813949e-01, 1.814144e-01, 1.814338e-01, 1.814532e-01, 1.814726e-01, 1.814920e-01, 1.815114e-01, 1.815308e-01, 1.815502e-01, 1.815697e-01, 1.815890e-01, 1.816085e-01, 1.816279e-01, 1.816473e-01, 1.816667e-01, 1.816861e-01, 1.817055e-01, 1.817249e-01, 1.817443e-01, 1.817637e-01, 1.817831e-01, 1.818026e-01, 1.818220e-01, 1.818414e-01, 1.818608e-01, 1.818802e-01, 1.818996e-01, 1.819190e-01, 1.819384e-01, 1.819578e-01, 1.819772e-01, 1.819966e-01, 1.820160e-01, 1.820354e-01, 1.820548e-01, 1.820742e-01, 1.820936e-01, 1.821130e-01, 1.821324e-01, 1.821518e-01, 1.821712e-01, 1.821906e-01, 1.822100e-01, 1.822294e-01, 1.822489e-01, 1.822682e-01, 1.822877e-01, 1.823070e-01, 1.823265e-01, 1.823459e-01, 1.823652e-01, 1.823847e-01, 1.824040e-01, 1.824235e-01, 1.824428e-01, 1.824622e-01, 1.824816e-01, 1.825010e-01, 1.825204e-01, 1.825399e-01, 1.825592e-01, 1.825786e-01, 1.825980e-01, 1.826174e-01, 1.826368e-01, 1.826562e-01, 1.826756e-01, 1.826950e-01, 1.827144e-01, 1.827338e-01, 1.827532e-01, 1.827726e-01, 1.827920e-01, 1.828114e-01, 1.828308e-01, 1.828502e-01, 1.828696e-01, 1.828890e-01, 1.829083e-01, 1.829277e-01, 1.829471e-01, 1.829665e-01, 1.829859e-01, 1.830053e-01, 1.830247e-01, 1.830441e-01, 1.830635e-01, 1.830829e-01, 1.831023e-01, 1.831217e-01, 1.831410e-01, 1.831604e-01, 1.831798e-01, 1.831992e-01, 1.832186e-01, 1.832380e-01, 1.832574e-01, 1.832768e-01, 1.832961e-01, 1.833155e-01, 1.833349e-01, 1.833543e-01, 1.833737e-01, 1.833931e-01, 1.834125e-01, 1.834319e-01, 1.834512e-01, 1.834706e-01, 1.834900e-01, 1.835094e-01, 1.835288e-01, 1.835482e-01, 1.835675e-01, 1.835869e-01, 1.836063e-01, 1.836257e-01, 1.836451e-01, 1.836645e-01, 1.836838e-01, 1.837032e-01, 1.837226e-01, 1.837420e-01, 1.837614e-01, 1.837807e-01, 1.838001e-01, 1.838195e-01, 1.838389e-01, 1.838583e-01, 1.838776e-01, 1.838970e-01, 1.839164e-01, 1.839358e-01, 1.839552e-01, 1.839745e-01, 1.839939e-01, 1.840133e-01, 1.840327e-01, 1.840521e-01, 1.840714e-01, 1.840908e-01, 1.841102e-01, 1.841296e-01, 1.841489e-01, 1.841683e-01, 1.841877e-01, 1.842071e-01, 1.842264e-01, 1.842458e-01, 1.842652e-01, 1.842846e-01, 1.843039e-01, 1.843233e-01, 1.843427e-01, 1.843621e-01, 1.843814e-01, 1.844008e-01, 1.844202e-01, 1.844395e-01, 1.844589e-01, 1.844783e-01, 1.844977e-01, 1.845170e-01, 1.845364e-01, 1.845558e-01, 1.845751e-01, 1.845945e-01, 1.846139e-01, 1.846332e-01, 1.846526e-01, 1.846720e-01, 1.846914e-01, 1.847107e-01, 1.847301e-01, 1.847495e-01, 1.847688e-01, 1.847882e-01, 1.848076e-01, 1.848269e-01, 1.848463e-01, 1.848657e-01, 1.848850e-01, 1.849044e-01, 1.849238e-01, 1.849431e-01, 1.849625e-01, 1.849819e-01, 1.850012e-01, 1.850206e-01, 1.850399e-01, 1.850593e-01, 1.850787e-01, 1.850980e-01, 1.851174e-01, 1.851368e-01, 1.851561e-01, 1.851755e-01, 1.851948e-01, 1.852142e-01, 1.852336e-01, 1.852529e-01, 1.852723e-01, 1.852917e-01, 1.853110e-01, 1.853304e-01, 1.853497e-01, 1.853691e-01, 1.853885e-01, 1.854078e-01, 1.854272e-01, 1.854465e-01, 1.854659e-01, 1.854852e-01, 1.855046e-01, 1.855240e-01, 1.855433e-01, 1.855627e-01, 1.855820e-01, 1.856014e-01, 1.856207e-01, 1.856401e-01, 1.856595e-01, 1.856788e-01, 1.856982e-01, 1.857175e-01, 1.857369e-01, 1.857562e-01, 1.857756e-01, 1.857949e-01, 1.858143e-01, 1.858336e-01, 1.858530e-01, 1.858724e-01, 1.858917e-01, 1.859111e-01, 1.859304e-01, 1.859498e-01, 1.859691e-01, 1.859885e-01, 1.860078e-01, 1.860272e-01, 1.860465e-01, 1.860659e-01, 1.860852e-01, 1.861046e-01, 1.861239e-01, 1.861433e-01, 1.861626e-01, 1.861820e-01, 1.862013e-01, 1.862207e-01, 1.862400e-01, 1.862594e-01, 1.862787e-01, 1.862981e-01, 1.863174e-01, 1.863367e-01, 1.863561e-01, 1.863754e-01, 1.863948e-01, 1.864141e-01, 1.864335e-01, 1.864528e-01, 1.864722e-01, 1.864915e-01, 1.865108e-01, 1.865302e-01, 1.865495e-01, 1.865689e-01, 1.865882e-01, 1.866076e-01, 1.866269e-01, 1.866463e-01, 1.866656e-01, 1.866849e-01, 1.867043e-01, 1.867236e-01, 1.867429e-01, 1.867623e-01, 1.867816e-01, 1.868010e-01, 1.868203e-01, 1.868397e-01, 1.868590e-01, 1.868784e-01, 1.868977e-01, 1.869170e-01, 1.869363e-01, 1.869557e-01, 1.869750e-01, 1.869944e-01, 1.870137e-01, 1.870330e-01, 1.870524e-01, 1.870717e-01, 1.870911e-01, 1.871104e-01, 1.871297e-01, 1.871491e-01, 1.871684e-01, 1.871877e-01, 1.872071e-01, 1.872264e-01, 1.872457e-01, 1.872651e-01, 1.872844e-01, 1.873038e-01, 1.873231e-01, 1.873424e-01, 1.873617e-01, 1.873811e-01, 1.874004e-01, 1.874197e-01, 1.874391e-01, 1.874584e-01, 1.874777e-01, 1.874970e-01, 1.875164e-01, 1.875357e-01, 1.875551e-01, 1.875744e-01, 1.875937e-01, 1.876130e-01, 1.876324e-01, 1.876517e-01, 1.876710e-01, 1.876904e-01, 1.877097e-01, 1.877290e-01, 1.877483e-01, 1.877677e-01, 1.877870e-01, 1.878063e-01, 1.878256e-01, 1.878450e-01, 1.878643e-01, 1.878836e-01, 1.879030e-01, 1.879223e-01, 1.879416e-01, 1.879609e-01, 1.879803e-01, 1.879996e-01, 1.880189e-01, 1.880382e-01, 1.880575e-01, 1.880769e-01, 1.880962e-01, 1.881155e-01, 1.881348e-01, 1.881542e-01, 1.881735e-01, 1.881928e-01, 1.882121e-01, 1.882314e-01, 1.882508e-01, 1.882701e-01, 1.882894e-01, 1.883087e-01, 1.883281e-01, 1.883474e-01, 1.883667e-01, 1.883860e-01, 1.884053e-01, 1.884246e-01, 1.884440e-01, 1.884633e-01, 1.884826e-01, 1.885019e-01, 1.885212e-01, 1.885406e-01, 1.885599e-01, 1.885792e-01, 1.885985e-01, 1.886178e-01, 1.886371e-01, 1.886564e-01, 1.886758e-01, 1.886951e-01, 1.887144e-01, 1.887337e-01, 1.887530e-01, 1.887723e-01, 1.887916e-01, 1.888110e-01, 1.888303e-01, 1.888496e-01, 1.888689e-01, 1.888882e-01, 1.889075e-01, 1.889268e-01, 1.889462e-01, 1.889655e-01, 1.889848e-01, 1.890041e-01, 1.890234e-01, 1.890427e-01, 1.890620e-01, 1.890813e-01, 1.891006e-01, 1.891199e-01, 1.891392e-01, 1.891586e-01, 1.891779e-01, 1.891972e-01, 1.892165e-01, 1.892358e-01, 1.892551e-01, 1.892744e-01, 1.892937e-01, 1.893130e-01, 1.893323e-01, 1.893516e-01, 1.893709e-01, 1.893902e-01, 1.894095e-01, 1.894289e-01, 1.894481e-01, 1.894675e-01, 1.894868e-01, 1.895061e-01, 1.895254e-01, 1.895447e-01, 1.895640e-01, 1.895833e-01, 1.896026e-01, 1.896219e-01, 1.896412e-01, 1.896605e-01, 1.896798e-01, 1.896991e-01, 1.897184e-01, 1.897377e-01, 1.897570e-01, 1.897763e-01, 1.897956e-01, 1.898149e-01, 1.898342e-01, 1.898535e-01, 1.898728e-01, 1.898921e-01, 1.899114e-01, 1.899307e-01, 1.899500e-01, 1.899693e-01, 1.899886e-01, 1.900079e-01, 1.900272e-01, 1.900465e-01, 1.900658e-01, 1.900851e-01, 1.901044e-01, 1.901237e-01, 1.901430e-01, 1.901623e-01, 1.901816e-01, 1.902009e-01, 1.902201e-01, 1.902394e-01, 1.902587e-01, 1.902780e-01, 1.902973e-01, 1.903166e-01, 1.903359e-01, 1.903552e-01, 1.903745e-01, 1.903938e-01, 1.904131e-01, 1.904324e-01, 1.904517e-01, 1.904710e-01, 1.904902e-01, 1.905095e-01, 1.905288e-01, 1.905481e-01, 1.905674e-01, 1.905867e-01, 1.906060e-01, 1.906253e-01, 1.906446e-01, 1.906639e-01, 1.906831e-01, 1.907024e-01, 1.907217e-01, 1.907410e-01, 1.907603e-01, 1.907796e-01, 1.907989e-01, 1.908181e-01, 1.908374e-01, 1.908567e-01, 1.908760e-01, 1.908953e-01, 1.909146e-01, 1.909339e-01, 1.909532e-01, 1.909724e-01, 1.909917e-01, 1.910110e-01, 1.910303e-01, 1.910496e-01, 1.910689e-01, 1.910881e-01, 1.911074e-01, 1.911267e-01, 1.911460e-01, 1.911653e-01, 1.911846e-01, 1.912038e-01, 1.912231e-01, 1.912424e-01, 1.912617e-01, 1.912809e-01, 1.913002e-01, 1.913195e-01, 1.913388e-01, 1.913581e-01, 1.913773e-01, 1.913966e-01, 1.914159e-01, 1.914352e-01, 1.914545e-01, 1.914738e-01, 1.914930e-01, 1.915123e-01, 1.915316e-01, 1.915509e-01, 1.915701e-01, 1.915894e-01, 1.916087e-01, 1.916279e-01, 1.916472e-01, 1.916665e-01, 1.916858e-01, 1.917051e-01, 1.917243e-01, 1.917436e-01, 1.917629e-01, 1.917821e-01, 1.918014e-01, 1.918207e-01, 1.918400e-01, 1.918592e-01, 1.918785e-01, 1.918978e-01, 1.919171e-01, 1.919363e-01, 1.919556e-01, 1.919749e-01, 1.919941e-01, 1.920134e-01, 1.920327e-01, 1.920519e-01, 1.920712e-01, 1.920905e-01, 1.921098e-01, 1.921290e-01, 1.921483e-01, 1.921676e-01, 1.921868e-01, 1.922061e-01, 1.922254e-01, 1.922446e-01, 1.922639e-01, 1.922832e-01, 1.923025e-01, 1.923217e-01, 1.923410e-01, 1.923603e-01, 1.923795e-01, 1.923988e-01, 1.924180e-01, 1.924373e-01, 1.924566e-01, 1.924758e-01, 1.924951e-01, 1.925144e-01, 1.925336e-01, 1.925529e-01, 1.925722e-01, 1.925914e-01, 1.926107e-01, 1.926299e-01, 1.926492e-01, 1.926685e-01, 1.926877e-01, 1.927070e-01, 1.927263e-01, 1.927455e-01, 1.927648e-01, 1.927840e-01, 1.928033e-01, 1.928226e-01, 1.928418e-01, 1.928611e-01, 1.928803e-01, 1.928996e-01, 1.929189e-01, 1.929381e-01, 1.929574e-01, 1.929766e-01, 1.929959e-01, 1.930151e-01, 1.930344e-01, 1.930536e-01, 1.930729e-01, 1.930922e-01, 1.931114e-01, 1.931307e-01, 1.931499e-01, 1.931692e-01, 1.931884e-01, 1.932077e-01, 1.932270e-01, 1.932462e-01, 1.932655e-01, 1.932847e-01, 1.933040e-01, 1.933232e-01, 1.933425e-01, 1.933617e-01, 1.933810e-01, 1.934002e-01, 1.934195e-01, 1.934387e-01, 1.934580e-01, 1.934772e-01, 1.934965e-01, 1.935157e-01, 1.935350e-01, 1.935542e-01, 1.935735e-01, 1.935927e-01, 1.936120e-01, 1.936312e-01, 1.936505e-01, 1.936697e-01, 1.936890e-01, 1.937082e-01, 1.937275e-01, 1.937467e-01, 1.937660e-01, 1.937852e-01, 1.938045e-01, 1.938237e-01, 1.938430e-01, 1.938622e-01, 1.938814e-01, 1.939007e-01, 1.939199e-01, 1.939392e-01, 1.939584e-01, 1.939777e-01, 1.939969e-01, 1.940162e-01, 1.940354e-01, 1.940546e-01, 1.940739e-01, 1.940931e-01, 1.941124e-01, 1.941316e-01, 1.941509e-01, 1.941701e-01, 1.941894e-01, 1.942086e-01, 1.942278e-01, 1.942471e-01, 1.942663e-01, 1.942856e-01, 1.943048e-01, 1.943240e-01, 1.943433e-01, 1.943625e-01, 1.943817e-01, 1.944010e-01, 1.944202e-01, 1.944395e-01, 1.944587e-01, 1.944779e-01, 1.944972e-01, 1.945164e-01, 1.945356e-01, 1.945549e-01, 1.945741e-01, 1.945934e-01, 1.946126e-01, 1.946318e-01, 1.946511e-01, 1.946703e-01, 1.946895e-01, 1.947088e-01, 1.947280e-01, 1.947472e-01, 1.947665e-01, 1.947857e-01, 1.948049e-01, 1.948242e-01, 1.948434e-01, 1.948626e-01, 1.948819e-01, 1.949011e-01, 1.949203e-01, 1.949396e-01, 1.949588e-01, 1.949780e-01, 1.949973e-01, 1.950165e-01, 1.950357e-01, 1.950549e-01, 1.950742e-01, 1.950934e-01, 1.951126e-01, 1.951319e-01, 1.951511e-01, 1.951703e-01, 1.951896e-01, 1.952088e-01, 1.952280e-01, 1.952472e-01, 1.952665e-01, 1.952857e-01, 1.953049e-01, 1.953241e-01, 1.953434e-01, 1.953626e-01, 1.953818e-01, 1.954011e-01, 1.954203e-01, 1.954395e-01, 1.954587e-01, 1.954779e-01, 1.954972e-01, 1.955164e-01, 1.955356e-01, 1.955548e-01, 1.955741e-01, 1.955933e-01, 1.956125e-01, 1.956317e-01, 1.956510e-01, 1.956702e-01, 1.956894e-01, 1.957086e-01, 1.957278e-01, 1.957471e-01, 1.957663e-01, 1.957855e-01, 1.958047e-01, 1.958239e-01, 1.958432e-01, 1.958624e-01, 1.958816e-01, 1.959008e-01, 1.959200e-01, 1.959393e-01, 1.959585e-01, 1.959777e-01, 1.959969e-01, 1.960161e-01, 1.960354e-01, 1.960546e-01, 1.960738e-01, 1.960930e-01, 1.961122e-01, 1.961314e-01, 1.961506e-01, 1.961699e-01, 1.961891e-01, 1.962083e-01, 1.962275e-01, 1.962467e-01, 1.962659e-01, 1.962851e-01, 1.963044e-01, 1.963236e-01, 1.963428e-01, 1.963620e-01, 1.963812e-01, 1.964004e-01, 1.964196e-01, 1.964388e-01, 1.964580e-01, 1.964773e-01, 1.964965e-01, 1.965157e-01, 1.965349e-01, 1.965541e-01, 1.965733e-01, 1.965925e-01, 1.966117e-01, 1.966309e-01, 1.966501e-01, 1.966694e-01, 1.966886e-01, 1.967078e-01, 1.967270e-01, 1.967462e-01, 1.967654e-01, 1.967846e-01, 1.968038e-01, 1.968230e-01, 1.968422e-01, 1.968614e-01, 1.968806e-01, 1.968998e-01, 1.969190e-01, 1.969383e-01, 1.969575e-01, 1.969766e-01, 1.969959e-01, 1.970151e-01, 1.970343e-01, 1.970535e-01, 1.970727e-01, 1.970919e-01, 1.971111e-01, 1.971303e-01, 1.971495e-01, 1.971687e-01, 1.971879e-01, 1.972071e-01, 1.972263e-01, 1.972455e-01, 1.972647e-01, 1.972839e-01, 1.973031e-01, 1.973223e-01, 1.973415e-01, 1.973607e-01, 1.973799e-01, 1.973991e-01, 1.974183e-01, 1.974375e-01, 1.974567e-01, 1.974759e-01, 1.974951e-01, 1.975143e-01, 1.975335e-01, 1.975527e-01, 1.975719e-01, 1.975911e-01, 1.976103e-01, 1.976295e-01, 1.976487e-01, 1.976679e-01, 1.976870e-01, 1.977063e-01, 1.977254e-01, 1.977446e-01, 1.977638e-01, 1.977830e-01, 1.978022e-01, 1.978214e-01, 1.978406e-01, 1.978598e-01, 1.978790e-01, 1.978982e-01, 1.979174e-01, 1.979365e-01, 1.979557e-01, 1.979750e-01, 1.979941e-01, 1.980133e-01, 1.980325e-01, 1.980517e-01, 1.980709e-01, 1.980901e-01, 1.981093e-01, 1.981285e-01, 1.981476e-01, 1.981668e-01, 1.981860e-01, 1.982052e-01, 1.982244e-01, 1.982436e-01, 1.982628e-01, 1.982820e-01, 1.983012e-01, 1.983203e-01, 1.983395e-01, 1.983587e-01, 1.983779e-01, 1.983971e-01, 1.984162e-01, 1.984355e-01, 1.984546e-01, 1.984738e-01, 1.984930e-01, 1.985122e-01, 1.985314e-01, 1.985506e-01, 1.985697e-01, 1.985889e-01, 1.986081e-01, 1.986273e-01, 1.986465e-01, 1.986656e-01, 1.986848e-01, 1.987040e-01, 1.987232e-01, 1.987424e-01, 1.987616e-01, 1.987807e-01, 1.987999e-01, 1.988191e-01, 1.988383e-01, 1.988575e-01, 1.988766e-01, 1.988958e-01, 1.989150e-01, 1.989342e-01, 1.989534e-01, 1.989725e-01, 1.989917e-01, 1.990109e-01, 1.990301e-01, 1.990492e-01, 1.990684e-01, 1.990876e-01, 1.991068e-01, 1.991259e-01, 1.991451e-01, 1.991643e-01, 1.991835e-01, 1.992026e-01, 1.992218e-01, 1.992410e-01, 1.992602e-01, 1.992793e-01, 1.992985e-01, 1.993177e-01, 1.993369e-01, 1.993560e-01, 1.993752e-01, 1.993944e-01, 1.994135e-01, 1.994327e-01, 1.994519e-01, 1.994711e-01, 1.994902e-01, 1.995094e-01, 1.995286e-01, 1.995478e-01, 1.995669e-01, 1.995861e-01, 1.996053e-01, 1.996244e-01, 1.996436e-01, 1.996628e-01, 1.996819e-01, 1.997011e-01, 1.997203e-01, 1.997394e-01, 1.997586e-01, 1.997778e-01, 1.997969e-01, 1.998161e-01, 1.998353e-01, 1.998544e-01, 1.998736e-01, 1.998928e-01, 1.999119e-01, 1.999311e-01, 1.999502e-01, 1.999694e-01, 1.999886e-01, 2.000078e-01, 2.000269e-01, 2.000461e-01, 2.000652e-01, 2.000844e-01, 2.001036e-01, 2.001227e-01, 2.001419e-01, 2.001611e-01, 2.001802e-01, 2.001994e-01, 2.002185e-01, 2.002377e-01, 2.002569e-01, 2.002760e-01, 2.002952e-01, 2.003143e-01, 2.003335e-01, 2.003527e-01, 2.003718e-01, 2.003910e-01, 2.004101e-01, 2.004293e-01, 2.004485e-01, 2.004676e-01, 2.004868e-01, 2.005059e-01, 2.005251e-01, 2.005442e-01, 2.005634e-01, 2.005826e-01, 2.006017e-01, 2.006209e-01, 2.006400e-01, 2.006592e-01, 2.006783e-01, 2.006975e-01, 2.007166e-01, 2.007358e-01, 2.007550e-01, 2.007741e-01, 2.007933e-01, 2.008124e-01, 2.008316e-01, 2.008507e-01, 2.008699e-01, 2.008890e-01, 2.009082e-01, 2.009273e-01, 2.009465e-01, 2.009656e-01, 2.009848e-01, 2.010039e-01, 2.010231e-01, 2.010422e-01, 2.010614e-01, 2.010805e-01, 2.010997e-01, 2.011188e-01, 2.011380e-01, 2.011571e-01, 2.011763e-01, 2.011954e-01, 2.012146e-01, 2.012337e-01, 2.012529e-01, 2.012720e-01, 2.012912e-01, 2.013103e-01, 2.013295e-01, 2.013486e-01, 2.013678e-01, 2.013869e-01, 2.014060e-01, 2.014252e-01, 2.014443e-01, 2.014635e-01, 2.014826e-01, 2.015018e-01, 2.015209e-01, 2.015401e-01, 2.015592e-01, 2.015783e-01, 2.015975e-01, 2.016166e-01, 2.016358e-01, 2.016549e-01, 2.016741e-01, 2.016932e-01, 2.017123e-01, 2.017315e-01, 2.017506e-01, 2.017698e-01, 2.017889e-01, 2.018081e-01, 2.018272e-01, 2.018463e-01, 2.018655e-01, 2.018846e-01, 2.019037e-01, 2.019229e-01, 2.019420e-01, 2.019612e-01, 2.019803e-01, 2.019994e-01, 2.020186e-01, 2.020377e-01, 2.020569e-01, 2.020760e-01, 2.020951e-01, 2.021143e-01, 2.021334e-01, 2.021525e-01, 2.021717e-01, 2.021908e-01, 2.022099e-01, 2.022291e-01, 2.022482e-01, 2.022673e-01, 2.022865e-01, 2.023056e-01, 2.023247e-01, 2.023439e-01, 2.023630e-01, 2.023821e-01, 2.024013e-01, 2.024204e-01, 2.024395e-01, 2.024587e-01, 2.024778e-01, 2.024969e-01, 2.025161e-01, 2.025352e-01, 2.025543e-01, 2.025734e-01, 2.025926e-01, 2.026117e-01, 2.026308e-01, 2.026500e-01, 2.026691e-01, 2.026882e-01, 2.027074e-01, 2.027265e-01, 2.027456e-01, 2.027647e-01, 2.027839e-01, 2.028030e-01, 2.028221e-01, 2.028412e-01, 2.028604e-01, 2.028795e-01, 2.028986e-01, 2.029178e-01, 2.029369e-01, 2.029560e-01, 2.029751e-01, 2.029942e-01, 2.030134e-01, 2.030325e-01, 2.030516e-01, 2.030707e-01, 2.030899e-01, 2.031090e-01, 2.031281e-01, 2.031472e-01, 2.031664e-01, 2.031855e-01, 2.032046e-01, 2.032237e-01, 2.032428e-01, 2.032620e-01, 2.032811e-01, 2.033002e-01, 2.033193e-01, 2.033384e-01, 2.033575e-01, 2.033767e-01, 2.033958e-01, 2.034149e-01, 2.034340e-01, 2.034532e-01, 2.034723e-01, 2.034914e-01, 2.035105e-01, 2.035296e-01, 2.035488e-01, 2.035679e-01, 2.035870e-01, 2.036061e-01, 2.036252e-01, 2.036443e-01, 2.036634e-01, 2.036826e-01, 2.037017e-01, 2.037208e-01, 2.037399e-01, 2.037590e-01, 2.037781e-01, 2.037973e-01, 2.038164e-01, 2.038355e-01, 2.038546e-01, 2.038737e-01, 2.038928e-01, 2.039119e-01, 2.039310e-01, 2.039501e-01, 2.039693e-01, 2.039884e-01, 2.040075e-01, 2.040266e-01, 2.040457e-01, 2.040648e-01, 2.040839e-01, 2.041030e-01, 2.041221e-01, 2.041413e-01, 2.041604e-01, 2.041795e-01, 2.041986e-01, 2.042177e-01, 2.042368e-01, 2.042559e-01, 2.042750e-01, 2.042941e-01, 2.043132e-01, 2.043323e-01, 2.043514e-01, 2.043706e-01, 2.043896e-01, 2.044087e-01, 2.044279e-01, 2.044470e-01, 2.044661e-01, 2.044852e-01, 2.045043e-01, 2.045234e-01, 2.045425e-01, 2.045616e-01, 2.045807e-01, 2.045998e-01, 2.046189e-01, 2.046380e-01, 2.046571e-01, 2.046762e-01, 2.046953e-01, 2.047144e-01, 2.047335e-01, 2.047526e-01, 2.047717e-01, 2.047908e-01, 2.048099e-01, 2.048290e-01, 2.048481e-01, 2.048672e-01, 2.048863e-01, 2.049054e-01, 2.049245e-01, 2.049436e-01, 2.049627e-01, 2.049818e-01, 2.050009e-01, 2.050200e-01, 2.050391e-01, 2.050582e-01, 2.050773e-01, 2.050964e-01, 2.051155e-01, 2.051346e-01, 2.051537e-01, 2.051728e-01, 2.051919e-01, 2.052110e-01, 2.052301e-01, 2.052492e-01, 2.052683e-01, 2.052874e-01, 2.053064e-01, 2.053255e-01, 2.053446e-01, 2.053637e-01, 2.053828e-01, 2.054019e-01, 2.054210e-01, 2.054401e-01, 2.054592e-01, 2.054783e-01, 2.054974e-01, 2.055165e-01, 2.055355e-01, 2.055546e-01, 2.055737e-01, 2.055928e-01, 2.056119e-01, 2.056310e-01, 2.056501e-01, 2.056692e-01, 2.056883e-01, 2.057074e-01, 2.057264e-01, 2.057455e-01, 2.057646e-01, 2.057837e-01, 2.058028e-01, 2.058219e-01, 2.058410e-01, 2.058600e-01, 2.058791e-01, 2.058982e-01, 2.059173e-01, 2.059364e-01, 2.059555e-01, 2.059746e-01, 2.059937e-01, 2.060127e-01, 2.060318e-01, 2.060509e-01, 2.060700e-01, 2.060891e-01, 2.061082e-01, 2.061272e-01, 2.061463e-01, 2.061654e-01, 2.061845e-01, 2.062036e-01, 2.062227e-01, 2.062417e-01, 2.062608e-01, 2.062799e-01, 2.062990e-01, 2.063181e-01, 2.063371e-01, 2.063562e-01, 2.063753e-01, 2.063944e-01, 2.064134e-01, 2.064325e-01, 2.064516e-01, 2.064707e-01, 2.064898e-01, 2.065089e-01, 2.065279e-01, 2.065470e-01, 2.065661e-01, 2.065852e-01, 2.066042e-01, 2.066233e-01, 2.066424e-01, 2.066615e-01, 2.066805e-01, 2.066996e-01, 2.067187e-01, 2.067378e-01, 2.067568e-01, 2.067759e-01, 2.067950e-01, 2.068141e-01, 2.068331e-01, 2.068522e-01, 2.068713e-01, 2.068904e-01, 2.069094e-01, 2.069285e-01, 2.069476e-01, 2.069666e-01, 2.069857e-01, 2.070048e-01, 2.070239e-01, 2.070429e-01, 2.070620e-01, 2.070811e-01, 2.071001e-01, 2.071192e-01, 2.071383e-01, 2.071573e-01, 2.071764e-01, 2.071955e-01, 2.072145e-01, 2.072336e-01, 2.072527e-01, 2.072718e-01, 2.072908e-01, 2.073099e-01, 2.073290e-01, 2.073480e-01, 2.073671e-01, 2.073862e-01, 2.074052e-01, 2.074243e-01, 2.074434e-01, 2.074624e-01, 2.074815e-01, 2.075005e-01, 2.075196e-01, 2.075387e-01, 2.075577e-01, 2.075768e-01, 2.075959e-01, 2.076149e-01, 2.076340e-01, 2.076531e-01, 2.076721e-01, 2.076912e-01, 2.077102e-01, 2.077293e-01, 2.077484e-01, 2.077674e-01, 2.077865e-01, 2.078056e-01, 2.078246e-01, 2.078437e-01, 2.078627e-01, 2.078818e-01, 2.079009e-01, 2.079199e-01, 2.079390e-01, 2.079580e-01, 2.079771e-01, 2.079961e-01, 2.080152e-01, 2.080343e-01, 2.080533e-01, 2.080724e-01, 2.080914e-01, 2.081105e-01, 2.081296e-01, 2.081486e-01, 2.081677e-01, 2.081867e-01, 2.082058e-01, 2.082248e-01, 2.082439e-01, 2.082630e-01, 2.082820e-01, 2.083010e-01, 2.083201e-01, 2.083392e-01, 2.083582e-01, 2.083773e-01, 2.083963e-01, 2.084154e-01, 2.084344e-01, 2.084535e-01, 2.084725e-01, 2.084916e-01, 2.085106e-01, 2.085297e-01, 2.085487e-01, 2.085678e-01, 2.085868e-01, 2.086059e-01, 2.086249e-01, 2.086440e-01, 2.086630e-01, 2.086821e-01, 2.087011e-01, 2.087202e-01, 2.087392e-01, 2.087583e-01, 2.087773e-01, 2.087964e-01, 2.088154e-01, 2.088345e-01, 2.088535e-01, 2.088726e-01, 2.088916e-01, 2.089107e-01, 2.089297e-01, 2.089487e-01, 2.089678e-01, 2.089868e-01, 2.090059e-01, 2.090249e-01, 2.090440e-01, 2.090630e-01, 2.090821e-01, 2.091011e-01, 2.091202e-01, 2.091392e-01, 2.091582e-01, 2.091773e-01, 2.091963e-01, 2.092154e-01, 2.092344e-01, 2.092534e-01, 2.092725e-01, 2.092915e-01, 2.093106e-01, 2.093296e-01, 2.093486e-01, 2.093677e-01, 2.093867e-01, 2.094058e-01, 2.094248e-01, 2.094439e-01, 2.094629e-01, 2.094819e-01, 2.095010e-01, 2.095200e-01, 2.095390e-01, 2.095581e-01, 2.095771e-01, 2.095962e-01, 2.096152e-01, 2.096342e-01, 2.096533e-01, 2.096723e-01, 2.096913e-01, 2.097104e-01, 2.097294e-01, 2.097484e-01, 2.097675e-01, 2.097865e-01, 2.098055e-01, 2.098246e-01, 2.098436e-01, 2.098626e-01, 2.098817e-01, 2.099007e-01, 2.099198e-01, 2.099388e-01, 2.099578e-01, 2.099768e-01, 2.099959e-01, 2.100149e-01, 2.100339e-01, 2.100530e-01, 2.100720e-01, 2.100910e-01, 2.101101e-01, 2.101291e-01, 2.101481e-01, 2.101671e-01, 2.101862e-01, 2.102052e-01, 2.102242e-01, 2.102433e-01, 2.102623e-01, 2.102813e-01, 2.103003e-01, 2.103194e-01, 2.103384e-01, 2.103574e-01, 2.103765e-01, 2.103955e-01, 2.104145e-01, 2.104335e-01, 2.104526e-01, 2.104716e-01, 2.104906e-01, 2.105096e-01, 2.105287e-01, 2.105477e-01, 2.105667e-01, 2.105857e-01, 2.106048e-01, 2.106238e-01, 2.106428e-01, 2.106618e-01, 2.106809e-01, 2.106999e-01, 2.107189e-01, 2.107379e-01, 2.107569e-01, 2.107760e-01, 2.107950e-01, 2.108140e-01, 2.108330e-01, 2.108520e-01, 2.108711e-01, 2.108901e-01, 2.109091e-01, 2.109281e-01, 2.109471e-01, 2.109662e-01, 2.109852e-01, 2.110042e-01, 2.110232e-01, 2.110422e-01, 2.110613e-01, 2.110803e-01, 2.110993e-01, 2.111183e-01, 2.111373e-01, 2.111563e-01, 2.111754e-01, 2.111944e-01, 2.112134e-01, 2.112324e-01, 2.112514e-01, 2.112704e-01, 2.112895e-01, 2.113085e-01, 2.113275e-01, 2.113465e-01, 2.113655e-01, 2.113845e-01, 2.114035e-01, 2.114225e-01, 2.114416e-01, 2.114606e-01, 2.114796e-01, 2.114986e-01, 2.115176e-01, 2.115366e-01, 2.115556e-01, 2.115746e-01, 2.115937e-01, 2.116127e-01, 2.116317e-01, 2.116507e-01, 2.116697e-01, 2.116887e-01, 2.117077e-01, 2.117267e-01, 2.117457e-01, 2.117648e-01, 2.117838e-01, 2.118028e-01, 2.118218e-01, 2.118408e-01, 2.118598e-01, 2.118788e-01, 2.118978e-01, 2.119168e-01, 2.119358e-01, 2.119548e-01, 2.119738e-01, 2.119928e-01, 2.120118e-01, 2.120308e-01, 2.120498e-01, 2.120688e-01, 2.120878e-01, 2.121069e-01, 2.121259e-01, 2.121449e-01, 2.121639e-01, 2.121829e-01, 2.122019e-01, 2.122209e-01, 2.122399e-01, 2.122589e-01, 2.122779e-01, 2.122969e-01, 2.123159e-01, 2.123349e-01, 2.123539e-01, 2.123729e-01, 2.123919e-01, 2.124109e-01, 2.124299e-01, 2.124489e-01, 2.124679e-01, 2.124869e-01, 2.125059e-01, 2.125249e-01, 2.125439e-01, 2.125629e-01, 2.125819e-01, 2.126009e-01, 2.126199e-01, 2.126389e-01, 2.126579e-01, 2.126769e-01, 2.126959e-01, 2.127149e-01, 2.127338e-01, 2.127528e-01, 2.127718e-01, 2.127908e-01, 2.128098e-01, 2.128288e-01, 2.128478e-01, 2.128668e-01, 2.128858e-01, 2.129048e-01, 2.129238e-01, 2.129428e-01, 2.129618e-01, 2.129808e-01, 2.129998e-01, 2.130188e-01, 2.130377e-01, 2.130568e-01, 2.130757e-01, 2.130947e-01, 2.131137e-01, 2.131327e-01, 2.131517e-01, 2.131707e-01, 2.131897e-01, 2.132087e-01, 2.132277e-01, 2.132466e-01, 2.132656e-01, 2.132846e-01, 2.133036e-01, 2.133226e-01, 2.133416e-01, 2.133606e-01, 2.133796e-01, 2.133985e-01, 2.134175e-01, 2.134365e-01, 2.134555e-01, 2.134745e-01, 2.134935e-01, 2.135125e-01, 2.135314e-01, 2.135504e-01, 2.135694e-01, 2.135884e-01, 2.136074e-01, 2.136264e-01, 2.136454e-01, 2.136643e-01, 2.136833e-01, 2.137023e-01, 2.137213e-01, 2.137403e-01, 2.137593e-01, 2.137782e-01, 2.137972e-01, 2.138162e-01, 2.138352e-01, 2.138542e-01, 2.138731e-01, 2.138921e-01, 2.139111e-01, 2.139301e-01, 2.139491e-01, 2.139680e-01, 2.139870e-01, 2.140060e-01, 2.140250e-01, 2.140440e-01, 2.140629e-01, 2.140819e-01, 2.141009e-01, 2.141199e-01, 2.141389e-01, 2.141578e-01, 2.141768e-01, 2.141958e-01, 2.142148e-01, 2.142337e-01, 2.142527e-01, 2.142717e-01, 2.142907e-01, 2.143096e-01, 2.143286e-01, 2.143476e-01, 2.143666e-01, 2.143855e-01, 2.144045e-01, 2.144235e-01, 2.144425e-01, 2.144614e-01, 2.144804e-01, 2.144994e-01, 2.145183e-01, 2.145373e-01, 2.145563e-01, 2.145752e-01, 2.145942e-01, 2.146132e-01, 2.146322e-01, 2.146511e-01, 2.146701e-01, 2.146891e-01, 2.147080e-01, 2.147270e-01, 2.147460e-01, 2.147650e-01, 2.147839e-01, 2.148029e-01, 2.148219e-01, 2.148408e-01, 2.148598e-01, 2.148788e-01, 2.148977e-01, 2.149167e-01, 2.149357e-01, 2.149546e-01, 2.149736e-01, 2.149926e-01, 2.150115e-01, 2.150305e-01, 2.150495e-01, 2.150684e-01, 2.150874e-01, 2.151064e-01, 2.151253e-01, 2.151443e-01, 2.151633e-01, 2.151822e-01, 2.152012e-01, 2.152201e-01, 2.152391e-01, 2.152581e-01, 2.152770e-01, 2.152960e-01, 2.153150e-01, 2.153339e-01, 2.153529e-01, 2.153718e-01, 2.153908e-01, 2.154098e-01, 2.154287e-01, 2.154477e-01, 2.154666e-01, 2.154856e-01, 2.155046e-01, 2.155235e-01, 2.155425e-01, 2.155614e-01, 2.155804e-01, 2.155994e-01, 2.156183e-01, 2.156373e-01, 2.156562e-01, 2.156752e-01, 2.156941e-01, 2.157131e-01, 2.157321e-01, 2.157510e-01, 2.157700e-01, 2.157889e-01, 2.158079e-01, 2.158268e-01, 2.158458e-01, 2.158647e-01, 2.158837e-01, 2.159027e-01, 2.159216e-01, 2.159405e-01, 2.159595e-01, 2.159785e-01, 2.159974e-01, 2.160164e-01, 2.160353e-01, 2.160543e-01, 2.160732e-01, 2.160922e-01, 2.161111e-01, 2.161301e-01, 2.161490e-01, 2.161680e-01, 2.161869e-01, 2.162059e-01, 2.162248e-01, 2.162438e-01, 2.162627e-01, 2.162817e-01, 2.163006e-01, 2.163196e-01, 2.163385e-01, 2.163575e-01, 2.163764e-01, 2.163954e-01, 2.164143e-01, 2.164333e-01, 2.164522e-01, 2.164712e-01, 2.164901e-01, 2.165090e-01, 2.165280e-01, 2.165469e-01, 2.165659e-01, 2.165848e-01, 2.166038e-01, 2.166227e-01, 2.166417e-01, 2.166606e-01, 2.166796e-01, 2.166985e-01, 2.167175e-01, 2.167364e-01, 2.167553e-01, 2.167743e-01, 2.167932e-01, 2.168122e-01, 2.168311e-01, 2.168500e-01, 2.168690e-01, 2.168879e-01, 2.169069e-01, 2.169258e-01, 2.169447e-01, 2.169637e-01, 2.169826e-01, 2.170016e-01, 2.170205e-01, 2.170394e-01, 2.170584e-01, 2.170773e-01, 2.170963e-01, 2.171152e-01, 2.171341e-01, 2.171531e-01, 2.171720e-01, 2.171910e-01, 2.172099e-01, 2.172288e-01, 2.172478e-01, 2.172667e-01, 2.172856e-01, 2.173046e-01, 2.173235e-01, 2.173424e-01, 2.173614e-01, 2.173803e-01, 2.173993e-01, 2.174182e-01, 2.174371e-01, 2.174560e-01, 2.174750e-01, 2.174939e-01, 2.175128e-01, 2.175318e-01, 2.175507e-01, 2.175696e-01, 2.175886e-01, 2.176075e-01, 2.176264e-01, 2.176454e-01, 2.176643e-01, 2.176832e-01, 2.177022e-01, 2.177211e-01, 2.177400e-01, 2.177590e-01, 2.177779e-01, 2.177968e-01, 2.178157e-01, 2.178347e-01, 2.178536e-01, 2.178725e-01, 2.178914e-01, 2.179104e-01, 2.179293e-01, 2.179482e-01, 2.179672e-01, 2.179861e-01, 2.180050e-01, 2.180239e-01, 2.180429e-01, 2.180618e-01, 2.180807e-01, 2.180997e-01, 2.181186e-01, 2.181375e-01, 2.181564e-01, 2.181753e-01, 2.181943e-01, 2.182132e-01, 2.182321e-01, 2.182510e-01, 2.182700e-01, 2.182889e-01, 2.183078e-01, 2.183267e-01, 2.183456e-01, 2.183646e-01, 2.183835e-01, 2.184024e-01, 2.184213e-01, 2.184403e-01, 2.184592e-01, 2.184781e-01, 2.184970e-01, 2.185159e-01, 2.185349e-01, 2.185538e-01, 2.185727e-01, 2.185916e-01, 2.186105e-01, 2.186295e-01, 2.186484e-01, 2.186673e-01, 2.186862e-01, 2.187051e-01, 2.187240e-01, 2.187430e-01, 2.187619e-01, 2.187808e-01, 2.187997e-01, 2.188186e-01, 2.188375e-01, 2.188565e-01, 2.188754e-01, 2.188943e-01, 2.189132e-01, 2.189321e-01, 2.189510e-01, 2.189699e-01, 2.189889e-01, 2.190078e-01, 2.190267e-01, 2.190456e-01, 2.190645e-01, 2.190834e-01, 2.191023e-01, 2.191212e-01, 2.191401e-01, 2.191591e-01, 2.191780e-01, 2.191969e-01, 2.192158e-01, 2.192347e-01, 2.192536e-01, 2.192725e-01, 2.192914e-01, 2.193103e-01, 2.193293e-01, 2.193482e-01, 2.193671e-01, 2.193860e-01, 2.194049e-01, 2.194238e-01, 2.194427e-01, 2.194616e-01, 2.194805e-01, 2.194994e-01, 2.195183e-01, 2.195372e-01, 2.195562e-01, 2.195750e-01, 2.195940e-01, 2.196129e-01, 2.196318e-01, 2.196507e-01, 2.196696e-01, 2.196885e-01, 2.197074e-01, 2.197263e-01, 2.197452e-01, 2.197641e-01, 2.197830e-01, 2.198019e-01, 2.198208e-01, 2.198397e-01, 2.198586e-01, 2.198775e-01, 2.198964e-01, 2.199153e-01, 2.199342e-01, 2.199531e-01, 2.199720e-01, 2.199909e-01, 2.200098e-01, 2.200287e-01, 2.200476e-01, 2.200665e-01, 2.200854e-01, 2.201043e-01, 2.201232e-01, 2.201421e-01, 2.201610e-01, 2.201799e-01, 2.201988e-01, 2.202177e-01, 2.202366e-01, 2.202555e-01, 2.202744e-01, 2.202933e-01, 2.203122e-01, 2.203311e-01, 2.203500e-01, 2.203689e-01, 2.203878e-01, 2.204067e-01, 2.204256e-01, 2.204445e-01, 2.204634e-01, 2.204822e-01, 2.205012e-01, 2.205200e-01, 2.205389e-01, 2.205578e-01, 2.205767e-01, 2.205956e-01, 2.206145e-01, 2.206334e-01, 2.206523e-01, 2.206712e-01, 2.206901e-01, 2.207090e-01, 2.207278e-01, 2.207467e-01, 2.207656e-01, 2.207845e-01, 2.208034e-01, 2.208223e-01, 2.208412e-01, 2.208601e-01, 2.208790e-01, 2.208979e-01, 2.209167e-01, 2.209356e-01, 2.209545e-01, 2.209734e-01, 2.209923e-01, 2.210112e-01, 2.210301e-01, 2.210490e-01, 2.210678e-01, 2.210867e-01, 2.211056e-01, 2.211245e-01, 2.211434e-01, 2.211623e-01, 2.211811e-01, 2.212000e-01, 2.212189e-01, 2.212378e-01, 2.212567e-01, 2.212756e-01, 2.212945e-01, 2.213133e-01, 2.213322e-01, 2.213511e-01, 2.213700e-01, 2.213889e-01, 2.214078e-01, 2.214266e-01, 2.214455e-01, 2.214644e-01, 2.214833e-01, 2.215022e-01, 2.215210e-01, 2.215399e-01, 2.215588e-01, 2.215777e-01, 2.215966e-01, 2.216154e-01, 2.216343e-01, 2.216532e-01, 2.216721e-01, 2.216910e-01, 2.217098e-01, 2.217287e-01, 2.217476e-01, 2.217665e-01, 2.217853e-01, 2.218042e-01, 2.218231e-01, 2.218420e-01, 2.218608e-01, 2.218797e-01, 2.218986e-01, 2.219175e-01, 2.219363e-01, 2.219552e-01, 2.219741e-01, 2.219930e-01, 2.220118e-01, 2.220307e-01, 2.220496e-01, 2.220685e-01, 2.220873e-01, 2.221062e-01, 2.221251e-01, 2.221439e-01, 2.221628e-01, 2.221817e-01, 2.222006e-01, 2.222195e-01, 2.222383e-01, 2.222572e-01, 2.222760e-01, 2.222949e-01, 2.223138e-01, 2.223327e-01, 2.223515e-01, 2.223704e-01, 2.223893e-01, 2.224081e-01, 2.224270e-01, 2.224459e-01, 2.224647e-01, 2.224836e-01, 2.225025e-01, 2.225213e-01, 2.225402e-01, 2.225591e-01, 2.225779e-01, 2.225968e-01, 2.226157e-01, 2.226346e-01, 2.226534e-01, 2.226723e-01, 2.226911e-01, 2.227100e-01, 2.227289e-01, 2.227477e-01, 2.227666e-01, 2.227855e-01, 2.228043e-01, 2.228232e-01, 2.228421e-01, 2.228609e-01, 2.228798e-01, 2.228986e-01, 2.229175e-01, 2.229364e-01, 2.229552e-01, 2.229741e-01, 2.229930e-01, 2.230118e-01, 2.230307e-01, 2.230496e-01, 2.230684e-01, 2.230873e-01, 2.231061e-01, 2.231250e-01, 2.231438e-01, 2.231627e-01, 2.231816e-01, 2.232004e-01, 2.232193e-01, 2.232381e-01, 2.232570e-01, 2.232759e-01, 2.232947e-01, 2.233136e-01, 2.233324e-01, 2.233513e-01, 2.233701e-01, 2.233890e-01, 2.234078e-01, 2.234267e-01, 2.234455e-01, 2.234644e-01, 2.234833e-01, 2.235021e-01, 2.235210e-01, 2.235398e-01, 2.235587e-01, 2.235775e-01, 2.235964e-01, 2.236152e-01, 2.236341e-01, 2.236529e-01, 2.236718e-01, 2.236907e-01, 2.237095e-01, 2.237284e-01, 2.237472e-01, 2.237660e-01, 2.237849e-01, 2.238038e-01, 2.238226e-01, 2.238415e-01, 2.238603e-01, 2.238792e-01, 2.238980e-01, 2.239169e-01, 2.239357e-01, 2.239546e-01, 2.239734e-01, 2.239922e-01, 2.240111e-01, 2.240300e-01, 2.240488e-01, 2.240676e-01, 2.240865e-01, 2.241053e-01, 2.241242e-01, 2.241430e-01, 2.241619e-01, 2.241807e-01, 2.241996e-01, 2.242184e-01, 2.242373e-01, 2.242561e-01, 2.242749e-01, 2.242938e-01, 2.243126e-01, 2.243315e-01, 2.243503e-01, 2.243692e-01, 2.243880e-01, 2.244069e-01, 2.244257e-01, 2.244445e-01, 2.244634e-01, 2.244822e-01, 2.245011e-01, 2.245199e-01, 2.245387e-01, 2.245576e-01, 2.245764e-01, 2.245953e-01, 2.246141e-01, 2.246329e-01, 2.246518e-01, 2.246706e-01, 2.246895e-01, 2.247083e-01, 2.247271e-01, 2.247460e-01, 2.247648e-01, 2.247836e-01, 2.248025e-01, 2.248213e-01, 2.248402e-01, 2.248590e-01, 2.248778e-01, 2.248967e-01, 2.249155e-01, 2.249343e-01, 2.249532e-01, 2.249720e-01, 2.249908e-01, 2.250097e-01, 2.250285e-01, 2.250474e-01, 2.250662e-01, 2.250850e-01, 2.251039e-01, 2.251227e-01, 2.251415e-01, 2.251603e-01, 2.251792e-01, 2.251980e-01, 2.252169e-01, 2.252357e-01, 2.252545e-01, 2.252733e-01, 2.252922e-01, 2.253110e-01, 2.253298e-01, 2.253487e-01, 2.253675e-01, 2.253863e-01, 2.254052e-01, 2.254240e-01, 2.254428e-01, 2.254616e-01, 2.254805e-01, 2.254993e-01, 2.255181e-01, 2.255370e-01, 2.255558e-01, 2.255746e-01, 2.255934e-01, 2.256123e-01, 2.256311e-01, 2.256499e-01, 2.256688e-01, 2.256876e-01, 2.257064e-01, 2.257252e-01, 2.257441e-01, 2.257629e-01, 2.257817e-01, 2.258005e-01, 2.258193e-01, 2.258382e-01, 2.258570e-01, 2.258758e-01, 2.258947e-01, 2.259135e-01, 2.259323e-01, 2.259511e-01, 2.259699e-01, 2.259887e-01, 2.260076e-01, 2.260264e-01, 2.260452e-01, 2.260640e-01, 2.260829e-01, 2.261017e-01, 2.261205e-01, 2.261393e-01, 2.261582e-01, 2.261770e-01, 2.261958e-01, 2.262146e-01, 2.262334e-01, 2.262522e-01, 2.262711e-01, 2.262899e-01, 2.263087e-01, 2.263275e-01, 2.263463e-01, 2.263651e-01, 2.263840e-01, 2.264028e-01, 2.264216e-01, 2.264404e-01, 2.264592e-01, 2.264780e-01, 2.264969e-01, 2.265157e-01, 2.265345e-01, 2.265533e-01, 2.265721e-01, 2.265909e-01, 2.266098e-01, 2.266286e-01, 2.266474e-01, 2.266662e-01, 2.266850e-01, 2.267038e-01, 2.267226e-01, 2.267414e-01, 2.267603e-01, 2.267791e-01, 2.267979e-01, 2.268167e-01, 2.268355e-01, 2.268543e-01, 2.268731e-01, 2.268919e-01, 2.269108e-01, 2.269296e-01, 2.269484e-01, 2.269672e-01, 2.269860e-01, 2.270048e-01, 2.270236e-01, 2.270424e-01, 2.270612e-01, 2.270800e-01, 2.270988e-01, 2.271176e-01, 2.271364e-01, 2.271552e-01, 2.271741e-01, 2.271929e-01, 2.272117e-01, 2.272305e-01, 2.272493e-01, 2.272681e-01, 2.272869e-01, 2.273057e-01, 2.273245e-01, 2.273433e-01, 2.273621e-01, 2.273809e-01, 2.273997e-01, 2.274185e-01, 2.274373e-01, 2.274561e-01, 2.274749e-01, 2.274937e-01, 2.275125e-01, 2.275313e-01, 2.275501e-01, 2.275690e-01, 2.275877e-01, 2.276065e-01, 2.276253e-01, 2.276441e-01, 2.276629e-01, 2.276817e-01, 2.277005e-01, 2.277194e-01, 2.277381e-01, 2.277569e-01, 2.277757e-01, 2.277945e-01, 2.278133e-01, 2.278321e-01, 2.278509e-01, 2.278697e-01, 2.278885e-01, 2.279073e-01, 2.279261e-01, 2.279449e-01, 2.279637e-01, 2.279825e-01, 2.280013e-01, 2.280201e-01, 2.280389e-01, 2.280577e-01, 2.280765e-01, 2.280953e-01, 2.281141e-01, 2.281329e-01, 2.281517e-01, 2.281705e-01, 2.281892e-01, 2.282080e-01, 2.282268e-01, 2.282456e-01, 2.282644e-01, 2.282832e-01, 2.283020e-01, 2.283208e-01, 2.283396e-01, 2.283584e-01, 2.283772e-01, 2.283960e-01, 2.284148e-01, 2.284335e-01, 2.284523e-01, 2.284711e-01, 2.284899e-01, 2.285087e-01, 2.285275e-01, 2.285463e-01, 2.285651e-01, 2.285839e-01, 2.286026e-01, 2.286214e-01, 2.286402e-01, 2.286590e-01, 2.286778e-01, 2.286966e-01, 2.287154e-01, 2.287342e-01, 2.287529e-01, 2.287717e-01, 2.287905e-01, 2.288093e-01, 2.288281e-01, 2.288469e-01, 2.288657e-01, 2.288844e-01, 2.289032e-01, 2.289220e-01, 2.289408e-01, 2.289596e-01, 2.289784e-01, 2.289971e-01, 2.290159e-01, 2.290347e-01, 2.290535e-01, 2.290723e-01, 2.290910e-01, 2.291098e-01, 2.291286e-01, 2.291474e-01, 2.291662e-01, 2.291850e-01, 2.292037e-01, 2.292225e-01, 2.292413e-01, 2.292601e-01, 2.292788e-01, 2.292976e-01, 2.293164e-01, 2.293352e-01, 2.293539e-01, 2.293727e-01, 2.293915e-01, 2.294103e-01, 2.294291e-01, 2.294479e-01, 2.294666e-01, 2.294854e-01, 2.295042e-01, 2.295229e-01, 2.295417e-01, 2.295605e-01, 2.295793e-01, 2.295981e-01, 2.296168e-01, 2.296356e-01, 2.296544e-01, 2.296732e-01, 2.296919e-01, 2.297107e-01, 2.297295e-01, 2.297482e-01, 2.297670e-01, 2.297858e-01, 2.298046e-01, 2.298233e-01, 2.298421e-01, 2.298609e-01, 2.298797e-01, 2.298984e-01, 2.299172e-01, 2.299360e-01, 2.299547e-01, 2.299735e-01, 2.299923e-01, 2.300111e-01, 2.300298e-01, 2.300486e-01, 2.300674e-01, 2.300861e-01, 2.301049e-01, 2.301237e-01, 2.301424e-01, 2.301612e-01, 2.301800e-01, 2.301987e-01, 2.302175e-01, 2.302363e-01, 2.302550e-01, 2.302738e-01, 2.302926e-01, 2.303113e-01, 2.303301e-01, 2.303489e-01, 2.303676e-01, 2.303864e-01, 2.304052e-01, 2.304239e-01, 2.304427e-01, 2.304615e-01, 2.304802e-01, 2.304990e-01, 2.305177e-01, 2.305365e-01, 2.305553e-01, 2.305740e-01, 2.305928e-01, 2.306116e-01, 2.306303e-01, 2.306491e-01, 2.306678e-01, 2.306866e-01, 2.307054e-01, 2.307241e-01, 2.307429e-01, 2.307616e-01, 2.307804e-01, 2.307992e-01, 2.308179e-01, 2.308367e-01, 2.308554e-01, 2.308742e-01, 2.308929e-01, 2.309117e-01, 2.309305e-01, 2.309492e-01, 2.309680e-01, 2.309867e-01, 2.310055e-01, 2.310243e-01, 2.310430e-01, 2.310618e-01, 2.310805e-01, 2.310993e-01, 2.311180e-01, 2.311368e-01, 2.311555e-01, 2.311743e-01, 2.311931e-01, 2.312118e-01, 2.312306e-01, 2.312493e-01, 2.312681e-01, 2.312868e-01, 2.313056e-01, 2.313243e-01, 2.313431e-01, 2.313618e-01, 2.313806e-01, 2.313993e-01, 2.314181e-01, 2.314368e-01, 2.314556e-01, 2.314743e-01, 2.314931e-01, 2.315118e-01, 2.315306e-01, 2.315493e-01, 2.315681e-01, 2.315868e-01, 2.316056e-01, 2.316243e-01, 2.316431e-01, 2.316618e-01, 2.316806e-01, 2.316993e-01, 2.317181e-01, 2.317368e-01, 2.317556e-01, 2.317743e-01, 2.317931e-01, 2.318118e-01, 2.318306e-01, 2.318493e-01, 2.318680e-01, 2.318868e-01, 2.319055e-01, 2.319243e-01, 2.319430e-01, 2.319618e-01, 2.319805e-01, 2.319993e-01, 2.320180e-01, 2.320367e-01, 2.320555e-01, 2.320742e-01, 2.320930e-01, 2.321117e-01, 2.321305e-01, 2.321492e-01, 2.321679e-01, 2.321867e-01, 2.322054e-01, 2.322242e-01, 2.322429e-01, 2.322616e-01, 2.322804e-01, 2.322991e-01, 2.323179e-01, 2.323366e-01, 2.323553e-01, 2.323741e-01, 2.323928e-01, 2.324115e-01, 2.324303e-01, 2.324490e-01, 2.324678e-01, 2.324865e-01, 2.325052e-01, 2.325240e-01, 2.325427e-01, 2.325615e-01, 2.325802e-01, 2.325989e-01, 2.326177e-01, 2.326364e-01, 2.326551e-01, 2.326739e-01, 2.326926e-01, 2.327113e-01, 2.327301e-01, 2.327488e-01, 2.327675e-01, 2.327863e-01, 2.328050e-01, 2.328237e-01, 2.328425e-01, 2.328612e-01, 2.328799e-01, 2.328987e-01, 2.329174e-01, 2.329361e-01, 2.329549e-01, 2.329736e-01, 2.329923e-01, 2.330111e-01, 2.330298e-01, 2.330485e-01, 2.330673e-01, 2.330860e-01, 2.331047e-01, 2.331235e-01, 2.331422e-01, 2.331609e-01, 2.331796e-01, 2.331983e-01, 2.332171e-01, 2.332358e-01, 2.332545e-01, 2.332733e-01, 2.332920e-01, 2.333107e-01, 2.333294e-01, 2.333482e-01, 2.333669e-01, 2.333856e-01, 2.334043e-01, 2.334231e-01, 2.334418e-01, 2.334605e-01, 2.334792e-01, 2.334980e-01, 2.335167e-01, 2.335354e-01, 2.335541e-01, 2.335729e-01, 2.335916e-01, 2.336103e-01, 2.336290e-01, 2.336478e-01, 2.336665e-01, 2.336852e-01, 2.337039e-01, 2.337226e-01, 2.337414e-01, 2.337601e-01, 2.337788e-01, 2.337975e-01, 2.338163e-01, 2.338350e-01, 2.338537e-01, 2.338724e-01, 2.338911e-01, 2.339098e-01, 2.339286e-01, 2.339473e-01, 2.339660e-01, 2.339847e-01, 2.340034e-01, 2.340222e-01, 2.340409e-01, 2.340596e-01, 2.340783e-01, 2.340970e-01, 2.341157e-01, 2.341345e-01, 2.341532e-01, 2.341719e-01, 2.341906e-01, 2.342093e-01, 2.342280e-01, 2.342468e-01, 2.342655e-01, 2.342842e-01, 2.343029e-01, 2.343216e-01, 2.343403e-01, 2.343590e-01, 2.343777e-01, 2.343965e-01, 2.344152e-01, 2.344339e-01, 2.344526e-01, 2.344713e-01, 2.344900e-01, 2.345087e-01, 2.345274e-01, 2.345462e-01, 2.345649e-01, 2.345836e-01, 2.346023e-01, 2.346210e-01, 2.346397e-01, 2.346584e-01, 2.346771e-01, 2.346958e-01, 2.347146e-01, 2.347333e-01, 2.347520e-01, 2.347707e-01, 2.347894e-01, 2.348081e-01, 2.348268e-01, 2.348455e-01, 2.348642e-01, 2.348829e-01, 2.349016e-01, 2.349203e-01, 2.349390e-01, 2.349577e-01, 2.349764e-01, 2.349951e-01, 2.350138e-01, 2.350325e-01, 2.350512e-01, 2.350699e-01, 2.350886e-01, 2.351074e-01, 2.351261e-01, 2.351448e-01, 2.351635e-01, 2.351822e-01, 2.352009e-01, 2.352196e-01, 2.352383e-01, 2.352570e-01, 2.352757e-01, 2.352944e-01, 2.353131e-01, 2.353318e-01, 2.353505e-01, 2.353692e-01, 2.353879e-01, 2.354066e-01, 2.354253e-01, 2.354440e-01, 2.354627e-01, 2.354814e-01, 2.355001e-01, 2.355188e-01, 2.355375e-01, 2.355562e-01, 2.355749e-01, 2.355936e-01, 2.356123e-01, 2.356310e-01, 2.356497e-01, 2.356684e-01, 2.356870e-01, 2.357057e-01, 2.357244e-01, 2.357431e-01, 2.357618e-01, 2.357805e-01, 2.357992e-01, 2.358179e-01, 2.358366e-01, 2.358553e-01, 2.358740e-01, 2.358927e-01, 2.359114e-01, 2.359301e-01, 2.359488e-01, 2.359675e-01, 2.359861e-01, 2.360048e-01, 2.360235e-01, 2.360422e-01, 2.360609e-01, 2.360796e-01, 2.360983e-01, 2.361170e-01, 2.361357e-01, 2.361544e-01, 2.361731e-01, 2.361917e-01, 2.362104e-01, 2.362291e-01, 2.362478e-01, 2.362665e-01, 2.362852e-01, 2.363039e-01, 2.363226e-01, 2.363413e-01, 2.363600e-01, 2.363786e-01, 2.363973e-01, 2.364160e-01, 2.364347e-01, 2.364534e-01, 2.364721e-01, 2.364907e-01, 2.365094e-01, 2.365281e-01, 2.365468e-01, 2.365655e-01, 2.365842e-01, 2.366029e-01, 2.366215e-01, 2.366402e-01, 2.366589e-01, 2.366776e-01, 2.366963e-01, 2.367150e-01, 2.367336e-01, 2.367523e-01, 2.367710e-01, 2.367897e-01, 2.368084e-01, 2.368271e-01, 2.368457e-01, 2.368644e-01, 2.368831e-01, 2.369018e-01, 2.369205e-01, 2.369391e-01, 2.369578e-01, 2.369765e-01, 2.369952e-01, 2.370138e-01, 2.370325e-01, 2.370512e-01, 2.370699e-01, 2.370885e-01, 2.371072e-01, 2.371259e-01, 2.371446e-01, 2.371633e-01, 2.371819e-01, 2.372006e-01, 2.372193e-01, 2.372380e-01, 2.372566e-01, 2.372753e-01, 2.372940e-01, 2.373127e-01, 2.373313e-01, 2.373500e-01, 2.373687e-01, 2.373874e-01, 2.374061e-01, 2.374247e-01, 2.374434e-01, 2.374621e-01, 2.374807e-01, 2.374994e-01, 2.375181e-01, 2.375368e-01, 2.375554e-01, 2.375741e-01, 2.375928e-01, 2.376114e-01, 2.376301e-01, 2.376488e-01, 2.376674e-01, 2.376861e-01, 2.377048e-01, 2.377235e-01, 2.377421e-01, 2.377608e-01, 2.377795e-01, 2.377981e-01, 2.378168e-01, 2.378355e-01, 2.378541e-01, 2.378728e-01, 2.378915e-01, 2.379101e-01, 2.379288e-01, 2.379475e-01, 2.379661e-01, 2.379848e-01, 2.380035e-01, 2.380221e-01, 2.380408e-01, 2.380595e-01, 2.380781e-01, 2.380968e-01, 2.381155e-01, 2.381341e-01, 2.381528e-01, 2.381715e-01, 2.381901e-01, 2.382088e-01, 2.382274e-01, 2.382461e-01, 2.382648e-01, 2.382834e-01, 2.383021e-01, 2.383208e-01, 2.383394e-01, 2.383581e-01, 2.383768e-01, 2.383954e-01, 2.384141e-01, 2.384327e-01, 2.384514e-01, 2.384700e-01, 2.384887e-01, 2.385074e-01, 2.385260e-01, 2.385447e-01, 2.385633e-01, 2.385820e-01, 2.386007e-01, 2.386193e-01, 2.386380e-01, 2.386566e-01, 2.386753e-01, 2.386940e-01, 2.387126e-01, 2.387313e-01, 2.387499e-01, 2.387686e-01, 2.387872e-01, 2.388059e-01, 2.388245e-01, 2.388432e-01, 2.388618e-01, 2.388805e-01, 2.388992e-01, 2.389178e-01, 2.389365e-01, 2.389551e-01, 2.389738e-01, 2.389924e-01, 2.390111e-01, 2.390297e-01, 2.390484e-01, 2.390670e-01, 2.390857e-01, 2.391043e-01, 2.391230e-01, 2.391416e-01, 2.391603e-01, 2.391790e-01, 2.391976e-01, 2.392163e-01, 2.392349e-01, 2.392536e-01, 2.392722e-01, 2.392908e-01, 2.393095e-01, 2.393282e-01, 2.393468e-01, 2.393655e-01, 2.393841e-01, 2.394027e-01, 2.394214e-01, 2.394400e-01, 2.394587e-01, 2.394773e-01, 2.394960e-01, 2.395146e-01, 2.395333e-01, 2.395519e-01, 2.395706e-01, 2.395892e-01, 2.396078e-01, 2.396265e-01, 2.396451e-01, 2.396638e-01, 2.396824e-01, 2.397011e-01, 2.397197e-01, 2.397384e-01, 2.397570e-01, 2.397757e-01, 2.397943e-01, 2.398129e-01, 2.398316e-01, 2.398502e-01, 2.398689e-01, 2.398875e-01, 2.399061e-01, 2.399248e-01, 2.399434e-01, 2.399621e-01, 2.399807e-01, 2.399993e-01, 2.400180e-01, 2.400366e-01, 2.400553e-01, 2.400739e-01, 2.400925e-01, 2.401112e-01, 2.401298e-01, 2.401485e-01, 2.401671e-01, 2.401857e-01, 2.402044e-01, 2.402230e-01, 2.402416e-01, 2.402603e-01, 2.402789e-01, 2.402976e-01, 2.403162e-01, 2.403348e-01, 2.403535e-01, 2.403721e-01, 2.403907e-01, 2.404094e-01, 2.404280e-01, 2.404466e-01, 2.404653e-01, 2.404839e-01, 2.405025e-01, 2.405212e-01, 2.405398e-01, 2.405584e-01, 2.405771e-01, 2.405957e-01, 2.406144e-01, 2.406330e-01, 2.406516e-01, 2.406702e-01, 2.406889e-01, 2.407075e-01, 2.407261e-01, 2.407448e-01, 2.407634e-01, 2.407820e-01, 2.408006e-01, 2.408193e-01, 2.408379e-01, 2.408565e-01, 2.408752e-01, 2.408938e-01, 2.409124e-01, 2.409310e-01, 2.409497e-01, 2.409683e-01, 2.409869e-01, 2.410056e-01, 2.410242e-01, 2.410428e-01, 2.410614e-01, 2.410801e-01, 2.410987e-01, 2.411173e-01, 2.411360e-01, 2.411546e-01, 2.411732e-01, 2.411918e-01, 2.412104e-01, 2.412291e-01, 2.412477e-01, 2.412663e-01, 2.412849e-01, 2.413036e-01, 2.413222e-01, 2.413408e-01, 2.413594e-01, 2.413781e-01, 2.413967e-01, 2.414153e-01, 2.414339e-01, 2.414525e-01, 2.414712e-01, 2.414898e-01, 2.415084e-01, 2.415270e-01, 2.415456e-01, 2.415643e-01, 2.415829e-01, 2.416015e-01, 2.416201e-01, 2.416387e-01, 2.416574e-01, 2.416760e-01, 2.416946e-01, 2.417132e-01, 2.417318e-01, 2.417504e-01, 2.417691e-01, 2.417877e-01, 2.418063e-01, 2.418249e-01, 2.418435e-01, 2.418621e-01, 2.418808e-01, 2.418994e-01, 2.419180e-01, 2.419366e-01, 2.419552e-01, 2.419738e-01, 2.419925e-01, 2.420111e-01, 2.420297e-01, 2.420483e-01, 2.420669e-01, 2.420855e-01, 2.421041e-01, 2.421227e-01, 2.421414e-01, 2.421600e-01, 2.421786e-01, 2.421972e-01, 2.422158e-01, 2.422344e-01, 2.422530e-01, 2.422716e-01, 2.422903e-01, 2.423089e-01, 2.423275e-01, 2.423461e-01, 2.423647e-01, 2.423833e-01, 2.424019e-01, 2.424205e-01, 2.424391e-01, 2.424577e-01, 2.424763e-01, 2.424950e-01, 2.425136e-01, 2.425322e-01, 2.425508e-01, 2.425694e-01, 2.425880e-01, 2.426066e-01, 2.426252e-01, 2.426438e-01, 2.426624e-01, 2.426810e-01, 2.426996e-01, 2.427182e-01, 2.427368e-01, 2.427554e-01, 2.427740e-01, 2.427927e-01, 2.428112e-01, 2.428298e-01, 2.428485e-01, 2.428671e-01, 2.428857e-01, 2.429043e-01, 2.429229e-01, 2.429415e-01, 2.429601e-01, 2.429787e-01, 2.429973e-01, 2.430159e-01, 2.430345e-01, 2.430531e-01, 2.430717e-01, 2.430903e-01, 2.431089e-01, 2.431275e-01, 2.431461e-01, 2.431647e-01, 2.431833e-01, 2.432019e-01, 2.432205e-01, 2.432391e-01, 2.432577e-01, 2.432763e-01, 2.432949e-01, 2.433135e-01, 2.433321e-01, 2.433507e-01, 2.433693e-01, 2.433878e-01, 2.434064e-01, 2.434250e-01, 2.434436e-01, 2.434622e-01, 2.434808e-01, 2.434994e-01, 2.435180e-01, 2.435366e-01, 2.435552e-01, 2.435738e-01, 2.435924e-01, 2.436110e-01, 2.436296e-01, 2.436482e-01, 2.436668e-01, 2.436854e-01, 2.437039e-01, 2.437225e-01, 2.437411e-01, 2.437597e-01, 2.437783e-01, 2.437969e-01, 2.438155e-01, 2.438341e-01, 2.438527e-01, 2.438713e-01, 2.438899e-01, 2.439085e-01, 2.439271e-01, 2.439456e-01, 2.439642e-01, 2.439828e-01, 2.440014e-01, 2.440200e-01, 2.440386e-01, 2.440572e-01, 2.440758e-01, 2.440944e-01, 2.441129e-01, 2.441315e-01, 2.441501e-01, 2.441687e-01, 2.441873e-01, 2.442059e-01, 2.442245e-01, 2.442430e-01, 2.442616e-01, 2.442802e-01, 2.442988e-01, 2.443174e-01, 2.443360e-01, 2.443545e-01, 2.443731e-01, 2.443917e-01, 2.444103e-01, 2.444289e-01, 2.444475e-01, 2.444661e-01, 2.444846e-01, 2.445032e-01, 2.445218e-01, 2.445404e-01, 2.445589e-01, 2.445775e-01, 2.445961e-01, 2.446147e-01, 2.446333e-01, 2.446519e-01, 2.446704e-01, 2.446890e-01, 2.447076e-01, 2.447262e-01, 2.447447e-01, 2.447633e-01, 2.447819e-01, 2.448005e-01, 2.448191e-01, 2.448376e-01, 2.448562e-01, 2.448748e-01, 2.448934e-01, 2.449120e-01, 2.449305e-01, 2.449491e-01, 2.449677e-01, 2.449863e-01, 2.450048e-01, 2.450234e-01, 2.450420e-01, 2.450605e-01, 2.450791e-01, 2.450977e-01, 2.451163e-01, 2.451348e-01, 2.451534e-01, 2.451720e-01, 2.451906e-01, 2.452091e-01, 2.452277e-01, 2.452463e-01, 2.452649e-01, 2.452834e-01, 2.453020e-01, 2.453206e-01, 2.453392e-01, 2.453577e-01, 2.453763e-01, 2.453949e-01, 2.454134e-01, 2.454320e-01, 2.454506e-01, 2.454691e-01, 2.454877e-01, 2.455063e-01, 2.455249e-01, 2.455434e-01, 2.455620e-01, 2.455806e-01, 2.455991e-01, 2.456177e-01, 2.456363e-01, 2.456548e-01, 2.456734e-01, 2.456920e-01, 2.457105e-01, 2.457291e-01, 2.457477e-01, 2.457662e-01, 2.457848e-01, 2.458034e-01, 2.458219e-01, 2.458405e-01, 2.458590e-01, 2.458776e-01, 2.458962e-01, 2.459147e-01, 2.459333e-01, 2.459519e-01, 2.459704e-01, 2.459890e-01, 2.460075e-01, 2.460261e-01, 2.460447e-01, 2.460632e-01, 2.460818e-01, 2.461004e-01, 2.461189e-01, 2.461375e-01, 2.461561e-01, 2.461746e-01, 2.461932e-01, 2.462117e-01, 2.462303e-01, 2.462489e-01, 2.462674e-01, 2.462860e-01, 2.463045e-01, 2.463231e-01, 2.463416e-01, 2.463602e-01, 2.463787e-01, 2.463973e-01, 2.464159e-01, 2.464344e-01, 2.464530e-01, 2.464716e-01, 2.464901e-01, 2.465087e-01, 2.465272e-01, 2.465458e-01, 2.465643e-01, 2.465829e-01, 2.466014e-01, 2.466200e-01, 2.466386e-01, 2.466571e-01, 2.466757e-01, 2.466942e-01, 2.467128e-01, 2.467313e-01, 2.467499e-01, 2.467684e-01, 2.467870e-01, 2.468055e-01, 2.468241e-01, 2.468426e-01, 2.468612e-01, 2.468797e-01, 2.468983e-01, 2.469168e-01, 2.469354e-01, 2.469539e-01, 2.469725e-01, 2.469910e-01, 2.470096e-01, 2.470281e-01, 2.470467e-01, 2.470652e-01, 2.470838e-01, 2.471023e-01, 2.471209e-01, 2.471394e-01, 2.471580e-01, 2.471765e-01, 2.471951e-01, 2.472136e-01, 2.472322e-01, 2.472507e-01, 2.472693e-01, 2.472878e-01, 2.473064e-01, 2.473249e-01, 2.473435e-01, 2.473620e-01, 2.473805e-01, 2.473991e-01, 2.474176e-01, 2.474362e-01, 2.474547e-01, 2.474733e-01, 2.474918e-01, 2.475104e-01, 2.475289e-01, 2.475474e-01, 2.475660e-01, 2.475845e-01, 2.476031e-01, 2.476216e-01, 2.476401e-01, 2.476587e-01, 2.476772e-01, 2.476958e-01, 2.477143e-01, 2.477329e-01, 2.477514e-01, 2.477699e-01, 2.477885e-01, 2.478070e-01, 2.478256e-01, 2.478441e-01, 2.478626e-01, 2.478812e-01, 2.478997e-01, 2.479182e-01, 2.479368e-01, 2.479553e-01, 2.479738e-01, 2.479924e-01, 2.480109e-01, 2.480295e-01, 2.480480e-01, 2.480665e-01, 2.480851e-01, 2.481036e-01, 2.481221e-01, 2.481407e-01, 2.481592e-01, 2.481778e-01, 2.481963e-01, 2.482148e-01, 2.482333e-01, 2.482519e-01, 2.482704e-01, 2.482890e-01, 2.483075e-01, 2.483260e-01, 2.483446e-01, 2.483631e-01, 2.483816e-01, 2.484002e-01, 2.484187e-01, 2.484372e-01, 2.484557e-01, 2.484743e-01, 2.484928e-01, 2.485113e-01, 2.485299e-01, 2.485484e-01, 2.485669e-01, 2.485855e-01, 2.486040e-01, 2.486225e-01, 2.486410e-01, 2.486596e-01, 2.486781e-01, 2.486966e-01, 2.487152e-01, 2.487337e-01, 2.487522e-01, 2.487707e-01, 2.487893e-01, 2.488078e-01, 2.488263e-01, 2.488449e-01, 2.488634e-01, 2.488819e-01, 2.489004e-01, 2.489190e-01, 2.489375e-01, 2.489560e-01, 2.489745e-01, 2.489930e-01, 2.490116e-01, 2.490301e-01, 2.490486e-01, 2.490671e-01, 2.490857e-01, 2.491042e-01, 2.491227e-01, 2.491412e-01, 2.491598e-01, 2.491783e-01, 2.491968e-01, 2.492153e-01, 2.492338e-01, 2.492524e-01, 2.492709e-01, 2.492894e-01, 2.493079e-01, 2.493265e-01, 2.493450e-01, 2.493635e-01, 2.493820e-01, 2.494005e-01, 2.494190e-01, 2.494376e-01, 2.494561e-01, 2.494746e-01, 2.494931e-01, 2.495116e-01, 2.495301e-01, 2.495487e-01, 2.495672e-01, 2.495857e-01, 2.496042e-01, 2.496227e-01, 2.496412e-01, 2.496598e-01, 2.496783e-01, 2.496968e-01, 2.497153e-01, 2.497338e-01, 2.497523e-01, 2.497708e-01, 2.497894e-01, 2.498079e-01, 2.498264e-01, 2.498449e-01, 2.498634e-01, 2.498819e-01, 2.499004e-01, 2.499190e-01, 2.499375e-01, 2.499560e-01, 2.499745e-01, 2.499930e-01, 2.500115e-01, 2.500300e-01, 2.500485e-01, 2.500671e-01, 2.500856e-01, 2.501041e-01, 2.501226e-01, 2.501411e-01, 2.501596e-01, 2.501781e-01, 2.501966e-01, 2.502151e-01, 2.502337e-01, 2.502522e-01, 2.502707e-01, 2.502892e-01, 2.503077e-01, 2.503262e-01, 2.503447e-01, 2.503632e-01, 2.503817e-01, 2.504002e-01, 2.504187e-01, 2.504372e-01, 2.504557e-01, 2.504742e-01, 2.504927e-01, 2.505112e-01, 2.505297e-01, 2.505482e-01, 2.505668e-01, 2.505853e-01, 2.506038e-01, 2.506222e-01, 2.506407e-01, 2.506593e-01, 2.506778e-01, 2.506963e-01, 2.507148e-01, 2.507333e-01, 2.507518e-01, 2.507703e-01, 2.507888e-01, 2.508073e-01, 2.508258e-01, 2.508443e-01, 2.508628e-01, 2.508813e-01, 2.508998e-01, 2.509183e-01, 2.509368e-01, 2.509553e-01, 2.509738e-01, 2.509923e-01, 2.510108e-01, 2.510293e-01, 2.510478e-01, 2.510663e-01, 2.510848e-01, 2.511033e-01, 2.511218e-01, 2.511403e-01, 2.511587e-01, 2.511773e-01, 2.511958e-01, 2.512142e-01, 2.512327e-01, 2.512513e-01, 2.512697e-01, 2.512882e-01, 2.513067e-01, 2.513252e-01, 2.513437e-01, 2.513622e-01, 2.513807e-01, 2.513992e-01, 2.514177e-01, 2.514362e-01, 2.514547e-01, 2.514732e-01, 2.514916e-01, 2.515101e-01, 2.515287e-01, 2.515471e-01, 2.515656e-01, 2.515841e-01, 2.516026e-01, 2.516211e-01, 2.516396e-01, 2.516581e-01, 2.516766e-01, 2.516951e-01, 2.517135e-01, 2.517321e-01, 2.517505e-01, 2.517690e-01, 2.517875e-01, 2.518060e-01, 2.518245e-01, 2.518430e-01, 2.518615e-01, 2.518799e-01, 2.518984e-01, 2.519169e-01, 2.519354e-01, 2.519539e-01, 2.519724e-01, 2.519909e-01, 2.520093e-01, 2.520278e-01, 2.520463e-01, 2.520648e-01, 2.520833e-01, 2.521018e-01, 2.521203e-01, 2.521387e-01, 2.521572e-01, 2.521757e-01, 2.521942e-01, 2.522127e-01, 2.522312e-01, 2.522496e-01, 2.522681e-01, 2.522866e-01, 2.523051e-01, 2.523236e-01, 2.523420e-01, 2.523605e-01, 2.523790e-01, 2.523975e-01, 2.524160e-01, 2.524345e-01, 2.524529e-01, 2.524714e-01, 2.524899e-01, 2.525084e-01, 2.525268e-01, 2.525453e-01, 2.525638e-01, 2.525823e-01, 2.526008e-01, 2.526192e-01, 2.526377e-01, 2.526562e-01, 2.526747e-01, 2.526931e-01, 2.527116e-01, 2.527301e-01, 2.527486e-01, 2.527671e-01, 2.527855e-01, 2.528040e-01, 2.528225e-01, 2.528410e-01, 2.528594e-01, 2.528779e-01, 2.528964e-01, 2.529148e-01, 2.529333e-01, 2.529518e-01, 2.529703e-01, 2.529887e-01, 2.530072e-01, 2.530257e-01, 2.530442e-01, 2.530626e-01, 2.530811e-01, 2.530996e-01, 2.531180e-01, 2.531365e-01, 2.531550e-01, 2.531735e-01, 2.531919e-01, 2.532104e-01, 2.532289e-01, 2.532474e-01, 2.532658e-01, 2.532843e-01, 2.533028e-01, 2.533212e-01, 2.533397e-01, 2.533582e-01, 2.533766e-01, 2.533951e-01, 2.534136e-01, 2.534320e-01, 2.534505e-01, 2.534690e-01, 2.534874e-01, 2.535059e-01, 2.535244e-01, 2.535428e-01, 2.535613e-01, 2.535798e-01, 2.535982e-01, 2.536167e-01, 2.536352e-01, 2.536536e-01, 2.536721e-01, 2.536905e-01, 2.537090e-01, 2.537275e-01, 2.537459e-01, 2.537644e-01, 2.537829e-01, 2.538013e-01, 2.538198e-01, 2.538382e-01, 2.538567e-01, 2.538752e-01, 2.538936e-01, 2.539121e-01, 2.539306e-01, 2.539490e-01, 2.539675e-01, 2.539859e-01, 2.540044e-01, 2.540229e-01, 2.540413e-01, 2.540598e-01, 2.540782e-01, 2.540967e-01, 2.541152e-01, 2.541336e-01, 2.541521e-01, 2.541705e-01, 2.541890e-01, 2.542075e-01, 2.542259e-01, 2.542444e-01, 2.542628e-01, 2.542813e-01, 2.542997e-01, 2.543182e-01, 2.543367e-01, 2.543551e-01, 2.543736e-01, 2.543920e-01, 2.544105e-01, 2.544289e-01, 2.544474e-01, 2.544658e-01, 2.544843e-01, 2.545027e-01, 2.545212e-01, 2.545397e-01, 2.545581e-01, 2.545765e-01, 2.545950e-01, 2.546135e-01, 2.546319e-01, 2.546504e-01, 2.546688e-01, 2.546872e-01, 2.547057e-01, 2.547242e-01, 2.547426e-01, 2.547611e-01, 2.547795e-01, 2.547980e-01, 2.548164e-01, 2.548349e-01, 2.548533e-01, 2.548718e-01, 2.548902e-01, 2.549087e-01, 2.549271e-01, 2.549455e-01, 2.549640e-01, 2.549824e-01, 2.550009e-01, 2.550193e-01, 2.550378e-01, 2.550562e-01, 2.550747e-01, 2.550931e-01, 2.551116e-01, 2.551300e-01, 2.551485e-01, 2.551669e-01, 2.551854e-01, 2.552038e-01, 2.552223e-01, 2.552407e-01, 2.552592e-01, 2.552776e-01, 2.552960e-01, 2.553145e-01, 2.553329e-01, 2.553513e-01, 2.553698e-01, 2.553882e-01, 2.554067e-01, 2.554251e-01, 2.554436e-01, 2.554620e-01, 2.554804e-01, 2.554989e-01, 2.555173e-01, 2.555358e-01, 2.555542e-01, 2.555726e-01, 2.555911e-01, 2.556095e-01, 2.556280e-01, 2.556464e-01, 2.556649e-01, 2.556833e-01, 2.557017e-01, 2.557202e-01, 2.557386e-01, 2.557570e-01, 2.557755e-01, 2.557939e-01, 2.558123e-01, 2.558308e-01, 2.558492e-01, 2.558677e-01, 2.558861e-01, 2.559045e-01, 2.559230e-01, 2.559414e-01, 2.559598e-01, 2.559783e-01, 2.559967e-01, 2.560151e-01, 2.560336e-01, 2.560520e-01, 2.560705e-01, 2.560889e-01, 2.561073e-01, 2.561257e-01, 2.561442e-01, 2.561626e-01, 2.561810e-01, 2.561995e-01, 2.562179e-01, 2.562363e-01, 2.562548e-01, 2.562732e-01, 2.562916e-01, 2.563101e-01, 2.563285e-01, 2.563469e-01, 2.563654e-01, 2.563838e-01, 2.564022e-01, 2.564206e-01, 2.564391e-01, 2.564575e-01, 2.564759e-01, 2.564943e-01, 2.565128e-01, 2.565312e-01, 2.565496e-01, 2.565681e-01, 2.565865e-01, 2.566049e-01, 2.566234e-01, 2.566418e-01, 2.566602e-01, 2.566786e-01, 2.566971e-01, 2.567155e-01, 2.567339e-01, 2.567523e-01, 2.567707e-01, 2.567892e-01, 2.568076e-01, 2.568260e-01, 2.568444e-01, 2.568628e-01, 2.568813e-01, 2.568997e-01, 2.569181e-01, 2.569366e-01, 2.569550e-01, 2.569734e-01, 2.569918e-01, 2.570103e-01, 2.570287e-01, 2.570471e-01, 2.570655e-01, 2.570840e-01, 2.571023e-01, 2.571208e-01, 2.571392e-01, 2.571576e-01, 2.571760e-01, 2.571944e-01, 2.572129e-01, 2.572313e-01, 2.572497e-01, 2.572681e-01, 2.572865e-01, 2.573050e-01, 2.573234e-01, 2.573418e-01, 2.573602e-01, 2.573786e-01, 2.573971e-01, 2.574155e-01, 2.574339e-01, 2.574523e-01, 2.574707e-01, 2.574891e-01, 2.575075e-01, 2.575260e-01, 2.575444e-01, 2.575628e-01, 2.575812e-01, 2.575996e-01, 2.576180e-01, 2.576364e-01, 2.576549e-01, 2.576733e-01, 2.576917e-01, 2.577101e-01, 2.577285e-01, 2.577469e-01, 2.577654e-01, 2.577837e-01, 2.578022e-01, 2.578206e-01, 2.578390e-01, 2.578574e-01, 2.578758e-01, 2.578942e-01, 2.579126e-01, 2.579311e-01, 2.579494e-01, 2.579679e-01, 2.579863e-01, 2.580047e-01, 2.580231e-01, 2.580415e-01, 2.580599e-01, 2.580783e-01, 2.580967e-01, 2.581151e-01, 2.581335e-01, 2.581519e-01, 2.581703e-01, 2.581887e-01, 2.582072e-01, 2.582256e-01, 2.582440e-01, 2.582624e-01, 2.582808e-01, 2.582992e-01, 2.583176e-01, 2.583360e-01, 2.583544e-01, 2.583728e-01, 2.583912e-01, 2.584096e-01, 2.584280e-01, 2.584464e-01, 2.584648e-01, 2.584832e-01, 2.585016e-01, 2.585200e-01, 2.585384e-01, 2.585568e-01, 2.585752e-01, 2.585936e-01, 2.586120e-01, 2.586304e-01, 2.586488e-01, 2.586672e-01, 2.586856e-01, 2.587040e-01, 2.587225e-01, 2.587408e-01, 2.587593e-01, 2.587776e-01, 2.587960e-01, 2.588144e-01, 2.588328e-01, 2.588512e-01, 2.588696e-01, 2.588880e-01, 2.589064e-01, 2.589248e-01, 2.589432e-01, 2.589616e-01, 2.589800e-01, 2.589984e-01, 2.590168e-01, 2.590352e-01, 2.590536e-01, 2.590720e-01, 2.590904e-01, 2.591088e-01, 2.591272e-01, 2.591456e-01, 2.591640e-01, 2.591824e-01, 2.592008e-01, 2.592191e-01, 2.592375e-01, 2.592559e-01, 2.592743e-01, 2.592927e-01, 2.593111e-01, 2.593295e-01, 2.593479e-01, 2.593663e-01, 2.593847e-01, 2.594031e-01, 2.594215e-01, 2.594399e-01, 2.594582e-01, 2.594766e-01, 2.594950e-01, 2.595134e-01, 2.595318e-01, 2.595502e-01, 2.595686e-01, 2.595870e-01, 2.596053e-01, 2.596237e-01, 2.596422e-01, 2.596605e-01, 2.596789e-01, 2.596973e-01, 2.597157e-01, 2.597341e-01, 2.597525e-01, 2.597708e-01, 2.597892e-01, 2.598076e-01, 2.598260e-01, 2.598444e-01, 2.598628e-01, 2.598812e-01, 2.598995e-01, 2.599179e-01, 2.599363e-01, 2.599547e-01, 2.599731e-01, 2.599915e-01, 2.600099e-01, 2.600282e-01, 2.600466e-01, 2.600650e-01, 2.600834e-01, 2.601018e-01, 2.601202e-01, 2.601385e-01, 2.601569e-01, 2.601753e-01, 2.601937e-01, 2.602121e-01, 2.602304e-01, 2.602488e-01, 2.602672e-01, 2.602856e-01, 2.603039e-01, 2.603223e-01, 2.603407e-01, 2.603591e-01, 2.603775e-01, 2.603958e-01, 2.604142e-01, 2.604326e-01, 2.604510e-01, 2.604693e-01, 2.604877e-01, 2.605061e-01, 2.605245e-01, 2.605429e-01, 2.605612e-01, 2.605796e-01, 2.605980e-01, 2.606164e-01, 2.606348e-01, 2.606531e-01, 2.606715e-01, 2.606899e-01, 2.607082e-01, 2.607266e-01, 2.607450e-01, 2.607634e-01, 2.607817e-01, 2.608001e-01, 2.608185e-01, 2.608369e-01, 2.608552e-01, 2.608736e-01, 2.608920e-01, 2.609103e-01, 2.609287e-01, 2.609471e-01, 2.609655e-01, 2.609838e-01, 2.610022e-01, 2.610206e-01, 2.610389e-01, 2.610573e-01, 2.610757e-01, 2.610941e-01, 2.611124e-01, 2.611308e-01, 2.611492e-01, 2.611675e-01, 2.611859e-01, 2.612043e-01, 2.612226e-01, 2.612410e-01, 2.612593e-01, 2.612777e-01, 2.612961e-01, 2.613145e-01, 2.613328e-01, 2.613512e-01, 2.613696e-01, 2.613879e-01, 2.614063e-01, 2.614247e-01, 2.614430e-01, 2.614614e-01, 2.614798e-01, 2.614981e-01, 2.615165e-01, 2.615349e-01, 2.615532e-01, 2.615716e-01, 2.615899e-01, 2.616083e-01, 2.616267e-01, 2.616450e-01, 2.616634e-01, 2.616817e-01, 2.617001e-01, 2.617185e-01, 2.617368e-01, 2.617552e-01, 2.617736e-01, 2.617919e-01, 2.618103e-01, 2.618286e-01, 2.618470e-01, 2.618653e-01, 2.618837e-01, 2.619021e-01, 2.619205e-01, 2.619388e-01, 2.619572e-01, 2.619755e-01, 2.619939e-01, 2.620122e-01, 2.620306e-01, 2.620490e-01, 2.620673e-01, 2.620857e-01, 2.621040e-01, 2.621224e-01, 2.621407e-01, 2.621591e-01, 2.621774e-01, 2.621958e-01, 2.622142e-01, 2.622325e-01, 2.622509e-01, 2.622692e-01, 2.622876e-01, 2.623059e-01, 2.623243e-01, 2.623426e-01, 2.623610e-01, 2.623793e-01, 2.623977e-01, 2.624161e-01, 2.624344e-01, 2.624528e-01, 2.624711e-01, 2.624895e-01, 2.625078e-01, 2.625262e-01, 2.625445e-01, 2.625629e-01, 2.625812e-01, 2.625996e-01, 2.626179e-01, 2.626363e-01, 2.626546e-01, 2.626730e-01, 2.626913e-01, 2.627097e-01, 2.627280e-01, 2.627464e-01, 2.627647e-01, 2.627831e-01, 2.628014e-01, 2.628198e-01, 2.628381e-01, 2.628565e-01, 2.628748e-01, 2.628931e-01, 2.629115e-01, 2.629298e-01, 2.629482e-01, 2.629665e-01, 2.629849e-01, 2.630032e-01, 2.630216e-01, 2.630399e-01, 2.630582e-01, 2.630766e-01, 2.630950e-01, 2.631133e-01, 2.631316e-01, 2.631500e-01, 2.631683e-01, 2.631867e-01, 2.632050e-01, 2.632234e-01, 2.632417e-01, 2.632600e-01, 2.632784e-01, 2.632967e-01, 2.633151e-01, 2.633334e-01, 2.633517e-01, 2.633701e-01, 2.633884e-01, 2.634068e-01, 2.634251e-01, 2.634434e-01, 2.634618e-01, 2.634801e-01, 2.634985e-01, 2.635168e-01, 2.635351e-01, 2.635535e-01, 2.635718e-01, 2.635902e-01, 2.636085e-01, 2.636268e-01, 2.636452e-01, 2.636635e-01, 2.636818e-01, 2.637002e-01, 2.637185e-01, 2.637368e-01, 2.637552e-01, 2.637735e-01, 2.637919e-01, 2.638102e-01, 2.638285e-01, 2.638469e-01, 2.638652e-01, 2.638835e-01, 2.639019e-01, 2.639202e-01, 2.639385e-01, 2.639569e-01, 2.639752e-01, 2.639935e-01, 2.640119e-01, 2.640302e-01, 2.640485e-01, 2.640668e-01, 2.640852e-01, 2.641035e-01, 2.641218e-01, 2.641402e-01, 2.641585e-01, 2.641768e-01, 2.641952e-01, 2.642135e-01, 2.642318e-01, 2.642502e-01, 2.642685e-01, 2.642868e-01, 2.643051e-01, 2.643235e-01, 2.643418e-01, 2.643601e-01, 2.643785e-01, 2.643968e-01, 2.644151e-01, 2.644334e-01, 2.644518e-01, 2.644701e-01, 2.644884e-01, 2.645067e-01, 2.645251e-01, 2.645434e-01, 2.645617e-01, 2.645800e-01, 2.645984e-01, 2.646167e-01, 2.646350e-01, 2.646534e-01, 2.646717e-01, 2.646900e-01, 2.647083e-01, 2.647266e-01, 2.647450e-01, 2.647633e-01, 2.647816e-01, 2.647999e-01, 2.648183e-01, 2.648366e-01, 2.648549e-01, 2.648732e-01, 2.648915e-01, 2.649099e-01, 2.649282e-01, 2.649465e-01, 2.649648e-01, 2.649831e-01, 2.650015e-01, 2.650198e-01, 2.650381e-01, 2.650564e-01, 2.650747e-01, 2.650931e-01, 2.651114e-01, 2.651297e-01, 2.651480e-01, 2.651663e-01, 2.651846e-01, 2.652030e-01, 2.652213e-01, 2.652396e-01, 2.652579e-01, 2.652762e-01, 2.652946e-01, 2.653129e-01, 2.653312e-01, 2.653495e-01, 2.653678e-01, 2.653861e-01, 2.654044e-01, 2.654228e-01, 2.654411e-01, 2.654594e-01, 2.654777e-01, 2.654960e-01, 2.655143e-01, 2.655326e-01, 2.655509e-01, 2.655693e-01, 2.655876e-01, 2.656059e-01, 2.656242e-01, 2.656425e-01, 2.656608e-01, 2.656792e-01, 2.656974e-01, 2.657157e-01, 2.657341e-01, 2.657524e-01, 2.657707e-01, 2.657890e-01, 2.658073e-01, 2.658256e-01, 2.658439e-01, 2.658622e-01, 2.658806e-01, 2.658989e-01, 2.659172e-01, 2.659355e-01, 2.659538e-01, 2.659721e-01, 2.659904e-01, 2.660087e-01, 2.660270e-01, 2.660453e-01, 2.660636e-01, 2.660819e-01, 2.661002e-01, 2.661185e-01, 2.661369e-01, 2.661552e-01, 2.661735e-01, 2.661918e-01, 2.662101e-01, 2.662284e-01, 2.662467e-01, 2.662650e-01, 2.662833e-01, 2.663016e-01, 2.663199e-01, 2.663382e-01, 2.663565e-01, 2.663748e-01, 2.663931e-01, 2.664114e-01, 2.664297e-01, 2.664480e-01, 2.664663e-01, 2.664846e-01, 2.665029e-01, 2.665212e-01, 2.665395e-01, 2.665578e-01, 2.665761e-01, 2.665944e-01, 2.666127e-01, 2.666310e-01, 2.666493e-01, 2.666676e-01, 2.666859e-01, 2.667042e-01, 2.667225e-01, 2.667408e-01, 2.667591e-01, 2.667774e-01, 2.667957e-01, 2.668140e-01, 2.668323e-01, 2.668506e-01, 2.668689e-01, 2.668872e-01, 2.669055e-01, 2.669238e-01, 2.669421e-01, 2.669604e-01, 2.669787e-01, 2.669969e-01, 2.670152e-01, 2.670335e-01, 2.670518e-01, 2.670701e-01, 2.670884e-01, 2.671067e-01, 2.671250e-01, 2.671433e-01, 2.671616e-01, 2.671799e-01, 2.671981e-01, 2.672164e-01, 2.672347e-01, 2.672530e-01, 2.672713e-01, 2.672896e-01, 2.673079e-01, 2.673262e-01, 2.673445e-01, 2.673628e-01, 2.673811e-01, 2.673993e-01, 2.674176e-01, 2.674359e-01, 2.674542e-01, 2.674725e-01, 2.674908e-01, 2.675091e-01, 2.675274e-01, 2.675457e-01, 2.675640e-01, 2.675822e-01, 2.676005e-01, 2.676188e-01, 2.676371e-01, 2.676554e-01, 2.676737e-01, 2.676920e-01, 2.677103e-01, 2.677285e-01, 2.677468e-01, 2.677651e-01, 2.677834e-01, 2.678017e-01, 2.678200e-01, 2.678382e-01, 2.678565e-01, 2.678748e-01, 2.678931e-01, 2.679114e-01, 2.679297e-01, 2.679479e-01, 2.679662e-01, 2.679845e-01, 2.680028e-01, 2.680211e-01, 2.680393e-01, 2.680576e-01, 2.680759e-01, 2.680942e-01, 2.681125e-01, 2.681307e-01, 2.681490e-01, 2.681673e-01, 2.681856e-01, 2.682039e-01, 2.682222e-01, 2.682404e-01, 2.682587e-01, 2.682770e-01, 2.682953e-01, 2.683136e-01, 2.683318e-01, 2.683501e-01, 2.683684e-01, 2.683867e-01, 2.684049e-01, 2.684232e-01, 2.684415e-01, 2.684598e-01, 2.684780e-01, 2.684963e-01, 2.685146e-01, 2.685329e-01, 2.685511e-01, 2.685694e-01, 2.685877e-01, 2.686060e-01, 2.686242e-01, 2.686425e-01, 2.686608e-01, 2.686791e-01, 2.686973e-01, 2.687156e-01, 2.687339e-01, 2.687522e-01, 2.687704e-01, 2.687887e-01, 2.688070e-01, 2.688252e-01, 2.688435e-01, 2.688618e-01, 2.688800e-01, 2.688983e-01, 2.689166e-01, 2.689348e-01, 2.689531e-01, 2.689714e-01, 2.689897e-01, 2.690079e-01, 2.690262e-01, 2.690445e-01, 2.690628e-01, 2.690810e-01, 2.690993e-01, 2.691175e-01, 2.691358e-01, 2.691541e-01, 2.691723e-01, 2.691906e-01, 2.692089e-01, 2.692271e-01, 2.692454e-01, 2.692637e-01, 2.692820e-01, 2.693002e-01, 2.693185e-01, 2.693367e-01, 2.693550e-01, 2.693733e-01, 2.693915e-01, 2.694098e-01, 2.694281e-01, 2.694463e-01, 2.694646e-01, 2.694829e-01, 2.695011e-01, 2.695194e-01, 2.695376e-01, 2.695559e-01, 2.695742e-01, 2.695924e-01, 2.696107e-01, 2.696289e-01, 2.696472e-01, 2.696654e-01, 2.696837e-01, 2.697020e-01, 2.697202e-01, 2.697385e-01, 2.697568e-01, 2.697750e-01, 2.697933e-01, 2.698115e-01, 2.698298e-01, 2.698481e-01, 2.698663e-01, 2.698846e-01, 2.699029e-01, 2.699211e-01, 2.699393e-01, 2.699576e-01, 2.699759e-01, 2.699941e-01, 2.700124e-01, 2.700306e-01, 2.700489e-01, 2.700672e-01, 2.700854e-01, 2.701037e-01, 2.701219e-01, 2.701402e-01, 2.701584e-01, 2.701767e-01, 2.701949e-01, 2.702132e-01, 2.702314e-01, 2.702497e-01, 2.702679e-01, 2.702862e-01, 2.703044e-01, 2.703227e-01, 2.703409e-01, 2.703592e-01, 2.703775e-01, 2.703957e-01, 2.704140e-01, 2.704322e-01, 2.704504e-01, 2.704687e-01, 2.704870e-01, 2.705052e-01, 2.705235e-01, 2.705417e-01, 2.705600e-01, 2.705782e-01, 2.705965e-01, 2.706147e-01, 2.706330e-01, 2.706512e-01, 2.706695e-01, 2.706877e-01, 2.707060e-01, 2.707242e-01, 2.707424e-01, 2.707607e-01, 2.707790e-01, 2.707972e-01, 2.708154e-01, 2.708337e-01, 2.708519e-01, 2.708702e-01, 2.708884e-01, 2.709067e-01, 2.709249e-01, 2.709431e-01, 2.709614e-01, 2.709796e-01, 2.709979e-01, 2.710161e-01, 2.710344e-01, 2.710526e-01, 2.710709e-01, 2.710891e-01, 2.711073e-01, 2.711256e-01, 2.711438e-01, 2.711621e-01, 2.711803e-01, 2.711986e-01, 2.712168e-01, 2.712350e-01, 2.712533e-01, 2.712715e-01, 2.712898e-01, 2.713080e-01, 2.713262e-01, 2.713445e-01, 2.713627e-01, 2.713810e-01, 2.713992e-01, 2.714174e-01, 2.714356e-01, 2.714539e-01, 2.714722e-01, 2.714904e-01, 2.715086e-01, 2.715268e-01, 2.715451e-01, 2.715633e-01, 2.715816e-01, 2.715998e-01, 2.716180e-01, 2.716363e-01, 2.716545e-01, 2.716727e-01, 2.716910e-01, 2.717092e-01, 2.717274e-01, 2.717457e-01, 2.717639e-01, 2.717822e-01, 2.718004e-01, 2.718186e-01, 2.718368e-01, 2.718551e-01, 2.718733e-01, 2.718916e-01, 2.719098e-01, 2.719280e-01, 2.719463e-01, 2.719645e-01, 2.719827e-01, 2.720009e-01, 2.720192e-01, 2.720374e-01, 2.720556e-01, 2.720739e-01, 2.720921e-01, 2.721103e-01, 2.721286e-01, 2.721468e-01, 2.721650e-01, 2.721832e-01, 2.722015e-01, 2.722197e-01, 2.722379e-01, 2.722562e-01, 2.722744e-01, 2.722926e-01, 2.723108e-01, 2.723291e-01, 2.723473e-01, 2.723655e-01, 2.723837e-01, 2.724020e-01, 2.724202e-01, 2.724384e-01, 2.724566e-01, 2.724749e-01, 2.724931e-01, 2.725113e-01, 2.725295e-01, 2.725478e-01, 2.725660e-01, 2.725842e-01, 2.726025e-01, 2.726206e-01, 2.726389e-01, 2.726571e-01, 2.726753e-01, 2.726936e-01, 2.727118e-01, 2.727300e-01, 2.727482e-01, 2.727665e-01, 2.727847e-01, 2.728029e-01, 2.728211e-01, 2.728393e-01, 2.728575e-01, 2.728758e-01, 2.728940e-01, 2.729122e-01, 2.729304e-01, 2.729487e-01, 2.729669e-01, 2.729851e-01, 2.730033e-01, 2.730215e-01, 2.730397e-01, 2.730580e-01, 2.730762e-01, 2.730944e-01, 2.731126e-01, 2.731308e-01, 2.731491e-01, 2.731673e-01, 2.731855e-01, 2.732037e-01, 2.732219e-01, 2.732401e-01, 2.732584e-01, 2.732766e-01, 2.732948e-01, 2.733130e-01, 2.733312e-01, 2.733494e-01, 2.733676e-01, 2.733859e-01, 2.734041e-01, 2.734223e-01, 2.734405e-01, 2.734587e-01, 2.734769e-01, 2.734951e-01, 2.735133e-01, 2.735316e-01, 2.735498e-01, 2.735680e-01, 2.735862e-01, 2.736044e-01, 2.736226e-01, 2.736408e-01, 2.736590e-01, 2.736772e-01, 2.736954e-01, 2.737136e-01, 2.737319e-01, 2.737501e-01, 2.737683e-01, 2.737865e-01, 2.738047e-01, 2.738229e-01, 2.738411e-01, 2.738593e-01, 2.738775e-01, 2.738957e-01, 2.739139e-01, 2.739322e-01, 2.739504e-01, 2.739686e-01, 2.739868e-01, 2.740050e-01, 2.740232e-01, 2.740414e-01, 2.740596e-01, 2.740778e-01, 2.740960e-01, 2.741142e-01, 2.741324e-01, 2.741506e-01, 2.741688e-01, 2.741870e-01, 2.742052e-01, 2.742234e-01, 2.742417e-01, 2.742598e-01, 2.742780e-01, 2.742963e-01, 2.743145e-01, 2.743326e-01, 2.743509e-01, 2.743691e-01, 2.743872e-01, 2.744054e-01, 2.744237e-01, 2.744418e-01, 2.744600e-01, 2.744783e-01, 2.744965e-01, 2.745147e-01, 2.745329e-01, 2.745511e-01, 2.745692e-01, 2.745875e-01, 2.746056e-01, 2.746238e-01, 2.746421e-01, 2.746603e-01, 2.746784e-01, 2.746966e-01, 2.747148e-01, 2.747330e-01, 2.747512e-01, 2.747694e-01, 2.747876e-01, 2.748058e-01, 2.748240e-01, 2.748422e-01, 2.748604e-01, 2.748786e-01, 2.748968e-01, 2.749150e-01, 2.749332e-01, 2.749514e-01, 2.749695e-01, 2.749878e-01, 2.750060e-01, 2.750241e-01, 2.750424e-01, 2.750605e-01, 2.750787e-01, 2.750969e-01, 2.751151e-01, 2.751333e-01, 2.751515e-01, 2.751697e-01, 2.751879e-01, 2.752061e-01, 2.752243e-01, 2.752424e-01, 2.752606e-01, 2.752788e-01, 2.752970e-01, 2.753152e-01, 2.753334e-01, 2.753516e-01, 2.753698e-01, 2.753880e-01, 2.754062e-01, 2.754243e-01, 2.754425e-01, 2.754607e-01, 2.754789e-01, 2.754971e-01, 2.755153e-01, 2.755335e-01, 2.755516e-01, 2.755699e-01, 2.755880e-01, 2.756062e-01, 2.756244e-01, 2.756426e-01, 2.756608e-01, 2.756789e-01, 2.756971e-01, 2.757153e-01, 2.757335e-01, 2.757517e-01, 2.757699e-01, 2.757880e-01, 2.758062e-01, 2.758244e-01, 2.758426e-01, 2.758608e-01, 2.758790e-01, 2.758971e-01, 2.759153e-01, 2.759335e-01, 2.759517e-01, 2.759699e-01, 2.759881e-01, 2.760062e-01, 2.760244e-01, 2.760426e-01, 2.760608e-01, 2.760790e-01, 2.760971e-01, 2.761153e-01, 2.761335e-01, 2.761517e-01, 2.761698e-01, 2.761880e-01, 2.762062e-01, 2.762244e-01, 2.762426e-01, 2.762607e-01, 2.762789e-01, 2.762971e-01, 2.763153e-01, 2.763335e-01, 2.763516e-01, 2.763698e-01, 2.763880e-01, 2.764061e-01, 2.764243e-01, 2.764425e-01, 2.764607e-01, 2.764789e-01, 2.764970e-01, 2.765152e-01, 2.765334e-01, 2.765515e-01, 2.765697e-01, 2.765879e-01, 2.766061e-01, 2.766242e-01, 2.766424e-01, 2.766606e-01, 2.766788e-01, 2.766969e-01, 2.767151e-01, 2.767333e-01, 2.767515e-01, 2.767696e-01, 2.767878e-01, 2.768060e-01, 2.768241e-01, 2.768423e-01, 2.768605e-01, 2.768786e-01, 2.768968e-01, 2.769150e-01, 2.769332e-01, 2.769513e-01, 2.769695e-01, 2.769876e-01, 2.770058e-01, 2.770240e-01, 2.770422e-01, 2.770603e-01, 2.770785e-01, 2.770967e-01, 2.771148e-01, 2.771330e-01, 2.771512e-01, 2.771693e-01, 2.771875e-01, 2.772056e-01, 2.772238e-01, 2.772420e-01, 2.772602e-01, 2.772783e-01, 2.772965e-01, 2.773147e-01, 2.773328e-01, 2.773510e-01, 2.773691e-01, 2.773873e-01, 2.774055e-01, 2.774236e-01, 2.774418e-01, 2.774599e-01, 2.774781e-01, 2.774963e-01, 2.775144e-01, 2.775326e-01, 2.775508e-01, 2.775689e-01, 2.775871e-01, 2.776052e-01, 2.776234e-01, 2.776416e-01, 2.776597e-01, 2.776779e-01, 2.776960e-01, 2.777142e-01, 2.777323e-01, 2.777505e-01, 2.777687e-01, 2.777868e-01, 2.778050e-01, 2.778232e-01, 2.778413e-01, 2.778595e-01, 2.778776e-01, 2.778958e-01, 2.779140e-01, 2.779321e-01, 2.779503e-01, 2.779684e-01, 2.779866e-01, 2.780047e-01, 2.780229e-01, 2.780410e-01, 2.780592e-01, 2.780773e-01, 2.780955e-01, 2.781136e-01, 2.781318e-01, 2.781500e-01, 2.781681e-01, 2.781863e-01, 2.782044e-01, 2.782226e-01, 2.782407e-01, 2.782589e-01, 2.782770e-01, 2.782952e-01, 2.783133e-01, 2.783315e-01, 2.783496e-01, 2.783678e-01, 2.783859e-01, 2.784041e-01, 2.784222e-01, 2.784404e-01, 2.784585e-01, 2.784767e-01, 2.784948e-01, 2.785130e-01, 2.785311e-01, 2.785493e-01, 2.785674e-01, 2.785856e-01, 2.786037e-01, 2.786219e-01, 2.786400e-01, 2.786582e-01, 2.786763e-01, 2.786945e-01, 2.787126e-01, 2.787308e-01, 2.787489e-01, 2.787670e-01, 2.787852e-01, 2.788033e-01, 2.788215e-01, 2.788396e-01, 2.788578e-01, 2.788759e-01, 2.788941e-01, 2.789122e-01, 2.789303e-01, 2.789485e-01, 2.789666e-01, 2.789848e-01, 2.790029e-01, 2.790211e-01, 2.790392e-01, 2.790574e-01, 2.790755e-01, 2.790937e-01, 2.791118e-01, 2.791299e-01, 2.791480e-01, 2.791662e-01, 2.791843e-01, 2.792025e-01, 2.792206e-01, 2.792388e-01, 2.792569e-01, 2.792750e-01, 2.792932e-01, 2.793113e-01, 2.793294e-01, 2.793476e-01, 2.793657e-01, 2.793839e-01, 2.794020e-01, 2.794201e-01, 2.794383e-01, 2.794564e-01, 2.794746e-01, 2.794927e-01, 2.795108e-01, 2.795290e-01, 2.795471e-01, 2.795652e-01, 2.795834e-01, 2.796015e-01, 2.796196e-01, 2.796378e-01, 2.796559e-01, 2.796741e-01, 2.796922e-01, 2.797103e-01, 2.797284e-01, 2.797466e-01, 2.797647e-01, 2.797829e-01, 2.798010e-01, 2.798191e-01, 2.798373e-01, 2.798554e-01, 2.798735e-01, 2.798917e-01, 2.799098e-01, 2.799279e-01, 2.799461e-01, 2.799642e-01, 2.799823e-01, 2.800004e-01, 2.800186e-01, 2.800367e-01, 2.800548e-01, 2.800730e-01, 2.800911e-01, 2.801092e-01, 2.801273e-01, 2.801455e-01, 2.801636e-01, 2.801817e-01, 2.801999e-01, 2.802180e-01, 2.802361e-01, 2.802542e-01, 2.802724e-01, 2.802905e-01, 2.803086e-01, 2.803268e-01, 2.803449e-01, 2.803630e-01, 2.803811e-01, 2.803992e-01, 2.804174e-01, 2.804355e-01, 2.804536e-01, 2.804717e-01, 2.804899e-01, 2.805080e-01, 2.805261e-01, 2.805443e-01, 2.805624e-01, 2.805805e-01, 2.805986e-01, 2.806167e-01, 2.806349e-01, 2.806530e-01, 2.806711e-01, 2.806892e-01, 2.807074e-01, 2.807255e-01, 2.807436e-01, 2.807617e-01, 2.807798e-01, 2.807980e-01, 2.808161e-01, 2.808342e-01, 2.808523e-01, 2.808704e-01, 2.808886e-01, 2.809066e-01, 2.809248e-01, 2.809429e-01, 2.809610e-01, 2.809792e-01, 2.809972e-01, 2.810154e-01, 2.810335e-01, 2.810516e-01, 2.810697e-01, 2.810878e-01, 2.811060e-01, 2.811241e-01, 2.811422e-01, 2.811603e-01, 2.811784e-01, 2.811965e-01, 2.812147e-01, 2.812328e-01, 2.812509e-01, 2.812690e-01, 2.812871e-01, 2.813052e-01, 2.813233e-01, 2.813415e-01, 2.813596e-01, 2.813777e-01, 2.813958e-01, 2.814139e-01, 2.814320e-01, 2.814502e-01, 2.814682e-01, 2.814864e-01, 2.815045e-01, 2.815226e-01, 2.815407e-01, 2.815588e-01, 2.815769e-01, 2.815950e-01, 2.816131e-01, 2.816312e-01, 2.816494e-01, 2.816675e-01, 2.816856e-01, 2.817037e-01, 2.817218e-01, 2.817399e-01, 2.817580e-01, 2.817761e-01, 2.817942e-01, 2.818123e-01, 2.818304e-01, 2.818485e-01, 2.818666e-01, 2.818848e-01, 2.819029e-01, 2.819210e-01, 2.819391e-01, 2.819572e-01, 2.819753e-01, 2.819934e-01, 2.820115e-01, 2.820296e-01, 2.820477e-01, 2.820658e-01, 2.820839e-01, 2.821020e-01, 2.821201e-01, 2.821382e-01, 2.821563e-01, 2.821744e-01, 2.821926e-01, 2.822106e-01, 2.822288e-01, 2.822469e-01, 2.822649e-01, 2.822831e-01, 2.823012e-01, 2.823192e-01, 2.823374e-01, 2.823555e-01, 2.823736e-01, 2.823917e-01, 2.824098e-01, 2.824279e-01, 2.824460e-01, 2.824641e-01, 2.824821e-01, 2.825002e-01, 2.825184e-01, 2.825364e-01, 2.825546e-01, 2.825727e-01, 2.825907e-01, 2.826089e-01, 2.826269e-01, 2.826450e-01, 2.826631e-01, 2.826812e-01, 2.826993e-01, 2.827174e-01, 2.827355e-01, 2.827536e-01, 2.827717e-01, 2.827898e-01, 2.828079e-01, 2.828260e-01, 2.828441e-01, 2.828622e-01, 2.828803e-01, 2.828984e-01, 2.829165e-01, 2.829346e-01, 2.829526e-01, 2.829708e-01, 2.829888e-01, 2.830069e-01, 2.830250e-01, 2.830431e-01, 2.830612e-01, 2.830793e-01, 2.830974e-01, 2.831155e-01, 2.831336e-01, 2.831517e-01, 2.831697e-01, 2.831879e-01, 2.832059e-01, 2.832240e-01, 2.832421e-01, 2.832602e-01, 2.832783e-01, 2.832964e-01, 2.833145e-01, 2.833326e-01, 2.833506e-01, 2.833687e-01, 2.833869e-01, 2.834049e-01, 2.834230e-01, 2.834411e-01, 2.834592e-01, 2.834772e-01, 2.834954e-01, 2.835135e-01, 2.835315e-01, 2.835496e-01, 2.835677e-01, 2.835858e-01, 2.836039e-01, 2.836220e-01, 2.836401e-01, 2.836581e-01, 2.836762e-01, 2.836943e-01, 2.837124e-01, 2.837305e-01, 2.837485e-01, 2.837666e-01, 2.837847e-01, 2.838028e-01, 2.838209e-01, 2.838390e-01, 2.838570e-01, 2.838751e-01, 2.838932e-01, 2.839113e-01, 2.839293e-01, 2.839474e-01, 2.839655e-01, 2.839836e-01, 2.840017e-01, 2.840198e-01, 2.840378e-01, 2.840559e-01, 2.840740e-01, 2.840921e-01, 2.841102e-01, 2.841282e-01, 2.841463e-01, 2.841644e-01, 2.841825e-01, 2.842005e-01, 2.842186e-01, 2.842367e-01, 2.842548e-01, 2.842729e-01, 2.842909e-01, 2.843090e-01, 2.843271e-01, 2.843452e-01, 2.843632e-01, 2.843813e-01, 2.843994e-01, 2.844175e-01, 2.844355e-01, 2.844536e-01, 2.844717e-01, 2.844898e-01, 2.845078e-01, 2.845259e-01, 2.845440e-01, 2.845621e-01, 2.845801e-01, 2.845982e-01, 2.846163e-01, 2.846344e-01, 2.846524e-01, 2.846705e-01, 2.846886e-01, 2.847066e-01, 2.847247e-01, 2.847428e-01, 2.847609e-01, 2.847789e-01, 2.847970e-01, 2.848151e-01, 2.848331e-01, 2.848512e-01, 2.848693e-01, 2.848873e-01, 2.849054e-01, 2.849235e-01, 2.849416e-01, 2.849596e-01, 2.849777e-01, 2.849958e-01, 2.850138e-01, 2.850319e-01, 2.850499e-01, 2.850680e-01, 2.850861e-01, 2.851042e-01, 2.851222e-01, 2.851403e-01, 2.851583e-01, 2.851764e-01, 2.851945e-01, 2.852125e-01, 2.852306e-01, 2.852487e-01, 2.852667e-01, 2.852848e-01, 2.853029e-01, 2.853209e-01, 2.853390e-01, 2.853571e-01, 2.853751e-01, 2.853932e-01, 2.854112e-01, 2.854293e-01, 2.854474e-01, 2.854654e-01, 2.854835e-01, 2.855016e-01, 2.855196e-01, 2.855377e-01, 2.855558e-01, 2.855738e-01, 2.855918e-01, 2.856099e-01, 2.856280e-01, 2.856461e-01, 2.856641e-01, 2.856822e-01, 2.857002e-01, 2.857183e-01, 2.857364e-01, 2.857544e-01, 2.857724e-01, 2.857905e-01, 2.858086e-01, 2.858266e-01, 2.858447e-01, 2.858627e-01, 2.858808e-01, 2.858989e-01, 2.859169e-01, 2.859350e-01, 2.859530e-01, 2.859711e-01, 2.859891e-01, 2.860072e-01, 2.860253e-01, 2.860433e-01, 2.860613e-01, 2.860794e-01, 2.860975e-01, 2.861155e-01, 2.861336e-01, 2.861516e-01, 2.861697e-01, 2.861877e-01, 2.862058e-01, 2.862238e-01, 2.862419e-01, 2.862599e-01, 2.862780e-01, 2.862960e-01, 2.863141e-01, 2.863322e-01, 2.863502e-01, 2.863683e-01, 2.863863e-01, 2.864043e-01, 2.864224e-01, 2.864404e-01, 2.864585e-01, 2.864765e-01, 2.864946e-01, 2.865126e-01, 2.865307e-01, 2.865487e-01, 2.865668e-01, 2.865848e-01, 2.866029e-01, 2.866209e-01, 2.866390e-01, 2.866570e-01, 2.866751e-01, 2.866931e-01, 2.867112e-01, 2.867292e-01, 2.867472e-01, 2.867653e-01, 2.867833e-01, 2.868014e-01, 2.868195e-01, 2.868375e-01, 2.868555e-01, 2.868736e-01, 2.868916e-01, 2.869096e-01, 2.869277e-01, 2.869457e-01, 2.869638e-01, 2.869819e-01, 2.869999e-01, 2.870179e-01, 2.870359e-01, 2.870540e-01, 2.870720e-01, 2.870901e-01, 2.871081e-01, 2.871262e-01, 2.871442e-01, 2.871622e-01, 2.871803e-01, 2.871983e-01, 2.872164e-01, 2.872344e-01, 2.872525e-01, 2.872705e-01, 2.872885e-01, 2.873066e-01, 2.873246e-01, 2.873426e-01, 2.873607e-01, 2.873787e-01, 2.873968e-01, 2.874148e-01, 2.874328e-01, 2.874509e-01, 2.874689e-01, 2.874869e-01, 2.875050e-01, 2.875230e-01, 2.875410e-01, 2.875591e-01, 2.875771e-01, 2.875952e-01, 2.876132e-01, 2.876312e-01, 2.876493e-01, 2.876673e-01, 2.876853e-01, 2.877034e-01, 2.877214e-01, 2.877394e-01, 2.877575e-01, 2.877755e-01, 2.877935e-01, 2.878116e-01, 2.878296e-01, 2.878476e-01, 2.878657e-01, 2.878837e-01, 2.879017e-01, 2.879198e-01, 2.879378e-01, 2.879558e-01, 2.879738e-01, 2.879919e-01, 2.880099e-01, 2.880279e-01, 2.880460e-01, 2.880640e-01, 2.880820e-01, 2.881000e-01, 2.881181e-01, 2.881361e-01, 2.881541e-01, 2.881722e-01, 2.881902e-01, 2.882082e-01, 2.882262e-01, 2.882443e-01, 2.882623e-01, 2.882803e-01, 2.882984e-01, 2.883164e-01, 2.883344e-01, 2.883524e-01, 2.883705e-01, 2.883885e-01, 2.884065e-01, 2.884245e-01, 2.884426e-01, 2.884606e-01, 2.884786e-01, 2.884966e-01, 2.885146e-01, 2.885327e-01, 2.885507e-01, 2.885687e-01, 2.885867e-01, 2.886048e-01, 2.886228e-01, 2.886408e-01, 2.886588e-01, 2.886769e-01, 2.886949e-01, 2.887129e-01, 2.887309e-01, 2.887489e-01, 2.887670e-01, 2.887850e-01, 2.888030e-01, 2.888210e-01, 2.888390e-01, 2.888571e-01, 2.888751e-01, 2.888931e-01, 2.889111e-01, 2.889291e-01, 2.889471e-01, 2.889652e-01, 2.889832e-01, 2.890012e-01, 2.890192e-01, 2.890373e-01, 2.890553e-01, 2.890733e-01, 2.890913e-01, 2.891093e-01, 2.891273e-01, 2.891454e-01, 2.891634e-01, 2.891814e-01, 2.891994e-01, 2.892174e-01, 2.892354e-01, 2.892534e-01, 2.892714e-01, 2.892894e-01, 2.893075e-01, 2.893255e-01, 2.893435e-01, 2.893615e-01, 2.893795e-01, 2.893975e-01, 2.894156e-01, 2.894336e-01, 2.894516e-01, 2.894696e-01, 2.894876e-01, 2.895056e-01, 2.895236e-01, 2.895416e-01, 2.895596e-01, 2.895777e-01, 2.895957e-01, 2.896137e-01, 2.896317e-01, 2.896497e-01, 2.896677e-01, 2.896857e-01, 2.897037e-01, 2.897217e-01, 2.897398e-01, 2.897578e-01, 2.897758e-01, 2.897938e-01, 2.898118e-01, 2.898298e-01, 2.898478e-01, 2.898658e-01, 2.898838e-01, 2.899018e-01, 2.899198e-01, 2.899378e-01, 2.899558e-01, 2.899739e-01, 2.899918e-01, 2.900099e-01, 2.900279e-01, 2.900459e-01, 2.900639e-01, 2.900819e-01, 2.900999e-01, 2.901179e-01, 2.901359e-01, 2.901539e-01, 2.901719e-01, 2.901899e-01, 2.902079e-01, 2.902259e-01, 2.902439e-01, 2.902619e-01, 2.902799e-01, 2.902979e-01, 2.903159e-01, 2.903339e-01, 2.903519e-01, 2.903699e-01, 2.903879e-01, 2.904059e-01, 2.904239e-01, 2.904419e-01, 2.904599e-01, 2.904779e-01, 2.904959e-01, 2.905139e-01, 2.905319e-01, 2.905499e-01, 2.905679e-01, 2.905859e-01, 2.906039e-01, 2.906219e-01, 2.906399e-01, 2.906579e-01, 2.906759e-01, 2.906939e-01, 2.907118e-01, 2.907299e-01, 2.907479e-01, 2.907659e-01, 2.907839e-01, 2.908019e-01, 2.908199e-01, 2.908379e-01, 2.908558e-01, 2.908738e-01, 2.908918e-01, 2.909098e-01, 2.909278e-01, 2.909458e-01, 2.909638e-01, 2.909818e-01, 2.909998e-01, 2.910178e-01, 2.910358e-01, 2.910538e-01, 2.910717e-01, 2.910897e-01, 2.911077e-01, 2.911257e-01, 2.911437e-01, 2.911617e-01, 2.911797e-01, 2.911977e-01, 2.912157e-01, 2.912337e-01, 2.912517e-01, 2.912696e-01, 2.912876e-01, 2.913056e-01, 2.913236e-01, 2.913416e-01, 2.913596e-01, 2.913776e-01, 2.913955e-01, 2.914135e-01, 2.914315e-01, 2.914495e-01, 2.914675e-01, 2.914855e-01, 2.915035e-01, 2.915215e-01, 2.915395e-01, 2.915574e-01, 2.915754e-01, 2.915934e-01, 2.916114e-01, 2.916294e-01, 2.916474e-01, 2.916653e-01, 2.916833e-01, 2.917013e-01, 2.917193e-01, 2.917373e-01, 2.917553e-01, 2.917733e-01, 2.917913e-01, 2.918092e-01, 2.918272e-01, 2.918452e-01, 2.918631e-01, 2.918811e-01, 2.918991e-01, 2.919171e-01, 2.919351e-01, 2.919531e-01, 2.919711e-01, 2.919890e-01, 2.920070e-01, 2.920250e-01, 2.920430e-01, 2.920610e-01, 2.920789e-01, 2.920969e-01, 2.921149e-01, 2.921329e-01, 2.921509e-01, 2.921688e-01, 2.921868e-01, 2.922048e-01, 2.922227e-01, 2.922407e-01, 2.922587e-01, 2.922767e-01, 2.922947e-01, 2.923126e-01, 2.923306e-01, 2.923486e-01, 2.923666e-01, 2.923845e-01, 2.924025e-01, 2.924205e-01, 2.924385e-01, 2.924564e-01, 2.924744e-01, 2.924924e-01, 2.925104e-01, 2.925283e-01, 2.925463e-01, 2.925643e-01, 2.925823e-01, 2.926002e-01, 2.926182e-01, 2.926362e-01, 2.926542e-01, 2.926721e-01, 2.926901e-01, 2.927081e-01, 2.927260e-01, 2.927440e-01, 2.927620e-01, 2.927800e-01, 2.927979e-01, 2.928159e-01, 2.928339e-01, 2.928518e-01, 2.928698e-01, 2.928878e-01, 2.929057e-01, 2.929237e-01, 2.929417e-01, 2.929597e-01, 2.929776e-01, 2.929956e-01, 2.930135e-01, 2.930315e-01, 2.930495e-01, 2.930675e-01, 2.930854e-01, 2.931034e-01, 2.931213e-01, 2.931393e-01, 2.931573e-01, 2.931753e-01, 2.931932e-01, 2.932112e-01, 2.932292e-01, 2.932471e-01, 2.932651e-01, 2.932830e-01, 2.933010e-01, 2.933190e-01, 2.933369e-01, 2.933549e-01, 2.933729e-01, 2.933908e-01, 2.934088e-01, 2.934267e-01, 2.934447e-01, 2.934627e-01, 2.934806e-01, 2.934986e-01, 2.935165e-01, 2.935345e-01, 2.935525e-01, 2.935704e-01, 2.935884e-01, 2.936063e-01, 2.936243e-01, 2.936423e-01, 2.936602e-01, 2.936782e-01, 2.936961e-01, 2.937141e-01, 2.937321e-01, 2.937500e-01, 2.937680e-01, 2.937859e-01, 2.938039e-01, 2.938219e-01, 2.938398e-01, 2.938578e-01, 2.938758e-01, 2.938937e-01, 2.939116e-01, 2.939296e-01, 2.939476e-01, 2.939655e-01, 2.939835e-01, 2.940014e-01, 2.940194e-01, 2.940373e-01, 2.940553e-01, 2.940733e-01, 2.940912e-01, 2.941091e-01, 2.941271e-01, 2.941451e-01, 2.941630e-01, 2.941810e-01, 2.941989e-01, 2.942169e-01, 2.942348e-01, 2.942528e-01, 2.942707e-01, 2.942887e-01, 2.943066e-01, 2.943246e-01, 2.943425e-01, 2.943605e-01, 2.943785e-01, 2.943964e-01, 2.944143e-01, 2.944323e-01, 2.944502e-01, 2.944682e-01, 2.944861e-01, 2.945041e-01, 2.945220e-01, 2.945400e-01, 2.945579e-01, 2.945759e-01, 2.945938e-01, 2.946118e-01, 2.946297e-01, 2.946477e-01, 2.946656e-01, 2.946836e-01, 2.947015e-01, 2.947195e-01, 2.947374e-01, 2.947553e-01, 2.947733e-01, 2.947913e-01, 2.948092e-01, 2.948271e-01, 2.948451e-01, 2.948630e-01, 2.948810e-01, 2.948989e-01, 2.949169e-01, 2.949348e-01, 2.949528e-01, 2.949707e-01, 2.949886e-01, 2.950066e-01, 2.950245e-01, 2.950425e-01, 2.950604e-01, 2.950783e-01, 2.950963e-01, 2.951142e-01, 2.951322e-01, 2.951501e-01, 2.951680e-01, 2.951860e-01, 2.952039e-01, 2.952219e-01, 2.952398e-01, 2.952577e-01, 2.952757e-01, 2.952936e-01, 2.953116e-01, 2.953295e-01, 2.953475e-01, 2.953654e-01, 2.953833e-01, 2.954012e-01, 2.954192e-01, 2.954371e-01, 2.954551e-01, 2.954730e-01, 2.954910e-01, 2.955089e-01, 2.955268e-01, 2.955447e-01, 2.955627e-01, 2.955806e-01, 2.955986e-01, 2.956165e-01, 2.956344e-01, 2.956524e-01, 2.956703e-01, 2.956882e-01, 2.957062e-01, 2.957241e-01, 2.957420e-01, 2.957600e-01, 2.957779e-01, 2.957958e-01, 2.958138e-01, 2.958317e-01, 2.958496e-01, 2.958676e-01, 2.958855e-01, 2.959034e-01, 2.959214e-01, 2.959393e-01, 2.959572e-01, 2.959751e-01, 2.959931e-01, 2.960110e-01, 2.960289e-01, 2.960469e-01, 2.960648e-01, 2.960827e-01, 2.961006e-01, 2.961186e-01, 2.961365e-01, 2.961544e-01, 2.961724e-01, 2.961903e-01, 2.962082e-01, 2.962262e-01, 2.962441e-01, 2.962620e-01, 2.962799e-01, 2.962978e-01, 2.963158e-01, 2.963337e-01, 2.963516e-01, 2.963696e-01, 2.963875e-01, 2.964054e-01, 2.964233e-01, 2.964413e-01, 2.964592e-01, 2.964771e-01, 2.964951e-01, 2.965130e-01, 2.965309e-01, 2.965488e-01, 2.965668e-01, 2.965847e-01, 2.966026e-01, 2.966205e-01, 2.966384e-01, 2.966564e-01, 2.966743e-01, 2.966922e-01, 2.967101e-01, 2.967280e-01, 2.967460e-01, 2.967639e-01, 2.967818e-01, 2.967997e-01, 2.968177e-01, 2.968356e-01, 2.968535e-01, 2.968714e-01, 2.968893e-01, 2.969072e-01, 2.969252e-01, 2.969431e-01, 2.969610e-01, 2.969789e-01, 2.969968e-01, 2.970147e-01, 2.970327e-01, 2.970506e-01, 2.970685e-01, 2.970864e-01, 2.971044e-01, 2.971223e-01, 2.971402e-01, 2.971581e-01, 2.971760e-01, 2.971939e-01, 2.972118e-01, 2.972297e-01, 2.972477e-01, 2.972656e-01, 2.972835e-01, 2.973014e-01, 2.973193e-01, 2.973372e-01, 2.973552e-01, 2.973731e-01, 2.973910e-01, 2.974089e-01, 2.974268e-01, 2.974447e-01, 2.974626e-01, 2.974806e-01, 2.974984e-01, 2.975164e-01, 2.975343e-01, 2.975522e-01, 2.975701e-01, 2.975880e-01, 2.976059e-01, 2.976238e-01, 2.976418e-01, 2.976597e-01, 2.976776e-01, 2.976955e-01, 2.977134e-01, 2.977313e-01, 2.977492e-01, 2.977671e-01, 2.977850e-01, 2.978029e-01, 2.978208e-01, 2.978387e-01, 2.978567e-01, 2.978745e-01, 2.978925e-01, 2.979104e-01, 2.979283e-01, 2.979462e-01, 2.979641e-01, 2.979820e-01, 2.979999e-01, 2.980178e-01, 2.980357e-01, 2.980536e-01, 2.980715e-01, 2.980894e-01, 2.981073e-01, 2.981252e-01, 2.981431e-01, 2.981610e-01, 2.981789e-01, 2.981969e-01, 2.982148e-01, 2.982326e-01, 2.982506e-01, 2.982685e-01, 2.982864e-01, 2.983043e-01, 2.983222e-01, 2.983401e-01, 2.983580e-01, 2.983759e-01, 2.983938e-01, 2.984117e-01, 2.984295e-01, 2.984475e-01, 2.984654e-01, 2.984833e-01, 2.985012e-01, 2.985190e-01, 2.985370e-01, 2.985549e-01, 2.985727e-01, 2.985907e-01, 2.986085e-01, 2.986265e-01, 2.986443e-01, 2.986622e-01, 2.986801e-01, 2.986980e-01, 2.987159e-01, 2.987338e-01, 2.987517e-01, 2.987696e-01, 2.987875e-01, 2.988054e-01, 2.988233e-01, 2.988412e-01, 2.988591e-01, 2.988770e-01, 2.988949e-01, 2.989128e-01, 2.989307e-01, 2.989486e-01, 2.989665e-01, 2.989844e-01, 2.990023e-01, 2.990201e-01, 2.990380e-01, 2.990559e-01, 2.990738e-01, 2.990917e-01, 2.991096e-01, 2.991275e-01, 2.991454e-01, 2.991633e-01, 2.991812e-01, 2.991991e-01, 2.992170e-01, 2.992348e-01, 2.992527e-01, 2.992706e-01, 2.992885e-01, 2.993064e-01, 2.993243e-01, 2.993422e-01, 2.993601e-01, 2.993779e-01, 2.993959e-01, 2.994137e-01, 2.994317e-01, 2.994495e-01, 2.994674e-01, 2.994853e-01, 2.995032e-01, 2.995211e-01, 2.995390e-01, 2.995569e-01, 2.995747e-01, 2.995926e-01, 2.996105e-01, 2.996284e-01, 2.996463e-01, 2.996642e-01, 2.996821e-01, 2.996999e-01, 2.997178e-01, 2.997357e-01, 2.997536e-01, 2.997715e-01, 2.997893e-01, 2.998072e-01, 2.998251e-01, 2.998430e-01, 2.998609e-01, 2.998787e-01, 2.998966e-01, 2.999145e-01, 2.999324e-01, 2.999503e-01, 2.999682e-01, 2.999860e-01, 3.000039e-01, 3.000218e-01, 3.000397e-01, 3.000576e-01, 3.000755e-01, 3.000933e-01, 3.001112e-01, 3.001291e-01, 3.001470e-01, 3.001648e-01, 3.001827e-01, 3.002006e-01, 3.002185e-01, 3.002364e-01, 3.002542e-01, 3.002721e-01, 3.002900e-01, 3.003079e-01, 3.003257e-01, 3.003436e-01, 3.003615e-01, 3.003794e-01, 3.003972e-01, 3.004151e-01, 3.004330e-01, 3.004509e-01, 3.004688e-01, 3.004866e-01, 3.005045e-01, 3.005224e-01, 3.005402e-01, 3.005581e-01, 3.005760e-01, 3.005939e-01, 3.006117e-01, 3.006296e-01, 3.006475e-01, 3.006653e-01, 3.006832e-01, 3.007011e-01, 3.007190e-01, 3.007369e-01, 3.007547e-01, 3.007726e-01, 3.007905e-01, 3.008083e-01, 3.008262e-01, 3.008441e-01, 3.008620e-01, 3.008798e-01, 3.008977e-01, 3.009155e-01, 3.009334e-01, 3.009513e-01, 3.009692e-01, 3.009870e-01, 3.010049e-01, 3.010228e-01, 3.010406e-01, 3.010585e-01, 3.010764e-01, 3.010942e-01, 3.011121e-01, 3.011300e-01, 3.011478e-01, 3.011657e-01, 3.011836e-01, 3.012014e-01, 3.012193e-01, 3.012372e-01, 3.012550e-01, 3.012729e-01, 3.012908e-01, 3.013086e-01, 3.013265e-01, 3.013444e-01, 3.013622e-01, 3.013801e-01, 3.013979e-01, 3.014158e-01, 3.014337e-01, 3.014515e-01, 3.014694e-01, 3.014873e-01, 3.015051e-01, 3.015230e-01, 3.015409e-01, 3.015587e-01, 3.015766e-01, 3.015944e-01, 3.016123e-01, 3.016302e-01, 3.016480e-01, 3.016659e-01, 3.016837e-01, 3.017016e-01, 3.017195e-01, 3.017373e-01, 3.017552e-01, 3.017730e-01, 3.017909e-01, 3.018087e-01, 3.018266e-01, 3.018445e-01, 3.018623e-01, 3.018802e-01, 3.018980e-01, 3.019159e-01, 3.019338e-01, 3.019516e-01, 3.019695e-01, 3.019873e-01, 3.020052e-01, 3.020230e-01, 3.020409e-01, 3.020587e-01, 3.020766e-01, 3.020945e-01, 3.021123e-01, 3.021302e-01, 3.021480e-01, 3.021659e-01, 3.021837e-01, 3.022016e-01, 3.022195e-01, 3.022373e-01, 3.022552e-01, 3.022730e-01, 3.022909e-01, 3.023087e-01, 3.023265e-01, 3.023444e-01, 3.023622e-01, 3.023801e-01, 3.023980e-01, 3.024158e-01, 3.024337e-01, 3.024515e-01, 3.024693e-01, 3.024872e-01, 3.025050e-01, 3.025229e-01, 3.025407e-01, 3.025586e-01, 3.025765e-01, 3.025943e-01, 3.026122e-01, 3.026300e-01, 3.026479e-01, 3.026657e-01, 3.026836e-01, 3.027014e-01, 3.027192e-01, 3.027371e-01, 3.027549e-01, 3.027728e-01, 3.027906e-01, 3.028085e-01, 3.028263e-01, 3.028442e-01, 3.028620e-01, 3.028798e-01, 3.028977e-01, 3.029155e-01, 3.029334e-01, 3.029512e-01, 3.029691e-01, 3.029869e-01, 3.030047e-01, 3.030226e-01, 3.030404e-01, 3.030583e-01, 3.030761e-01, 3.030940e-01, 3.031118e-01, 3.031296e-01, 3.031475e-01, 3.031653e-01, 3.031832e-01, 3.032010e-01, 3.032189e-01, 3.032367e-01, 3.032545e-01, 3.032724e-01, 3.032902e-01, 3.033081e-01, 3.033259e-01, 3.033437e-01, 3.033616e-01, 3.033794e-01, 3.033973e-01, 3.034151e-01, 3.034329e-01, 3.034508e-01, 3.034686e-01, 3.034865e-01, 3.035043e-01, 3.035221e-01, 3.035400e-01, 3.035578e-01, 3.035756e-01, 3.035935e-01, 3.036113e-01, 3.036292e-01, 3.036470e-01, 3.036648e-01, 3.036827e-01, 3.037005e-01, 3.037183e-01, 3.037362e-01, 3.037540e-01, 3.037718e-01, 3.037896e-01, 3.038075e-01, 3.038253e-01, 3.038432e-01, 3.038610e-01, 3.038788e-01, 3.038967e-01, 3.039145e-01, 3.039323e-01, 3.039502e-01, 3.039680e-01, 3.039858e-01, 3.040037e-01, 3.040215e-01, 3.040393e-01, 3.040572e-01, 3.040750e-01, 3.040928e-01, 3.041106e-01, 3.041285e-01, 3.041463e-01, 3.041641e-01, 3.041820e-01, 3.041998e-01, 3.042176e-01, 3.042354e-01, 3.042533e-01, 3.042711e-01, 3.042889e-01, 3.043067e-01, 3.043246e-01, 3.043424e-01, 3.043602e-01, 3.043781e-01, 3.043959e-01, 3.044137e-01, 3.044315e-01, 3.044493e-01, 3.044672e-01, 3.044850e-01, 3.045028e-01, 3.045207e-01, 3.045385e-01, 3.045563e-01, 3.045741e-01, 3.045920e-01, 3.046098e-01, 3.046276e-01, 3.046454e-01, 3.046633e-01, 3.046811e-01, 3.046989e-01, 3.047167e-01, 3.047346e-01, 3.047524e-01, 3.047702e-01, 3.047880e-01, 3.048058e-01, 3.048237e-01, 3.048415e-01, 3.048593e-01, 3.048771e-01, 3.048950e-01, 3.049127e-01, 3.049306e-01, 3.049484e-01, 3.049662e-01, 3.049840e-01, 3.050019e-01, 3.050197e-01, 3.050375e-01, 3.050553e-01, 3.050731e-01, 3.050909e-01, 3.051088e-01, 3.051266e-01, 3.051444e-01, 3.051622e-01, 3.051800e-01, 3.051979e-01, 3.052157e-01, 3.052335e-01, 3.052513e-01, 3.052691e-01, 3.052869e-01, 3.053047e-01, 3.053226e-01, 3.053404e-01, 3.053582e-01, 3.053760e-01, 3.053938e-01, 3.054116e-01, 3.054295e-01, 3.054473e-01, 3.054651e-01, 3.054829e-01, 3.055007e-01, 3.055185e-01, 3.055363e-01, 3.055542e-01, 3.055719e-01, 3.055898e-01, 3.056076e-01, 3.056254e-01, 3.056432e-01, 3.056610e-01, 3.056788e-01, 3.056966e-01, 3.057144e-01, 3.057323e-01, 3.057500e-01, 3.057679e-01, 3.057857e-01, 3.058035e-01, 3.058213e-01, 3.058391e-01, 3.058569e-01, 3.058747e-01, 3.058925e-01, 3.059103e-01, 3.059281e-01, 3.059460e-01, 3.059638e-01, 3.059815e-01, 3.059994e-01, 3.060172e-01, 3.060350e-01, 3.060528e-01, 3.060706e-01, 3.060884e-01, 3.061062e-01, 3.061240e-01, 3.061418e-01, 3.061596e-01, 3.061774e-01, 3.061952e-01, 3.062130e-01, 3.062308e-01, 3.062486e-01, 3.062665e-01, 3.062842e-01, 3.063020e-01, 3.063198e-01, 3.063377e-01, 3.063554e-01, 3.063732e-01, 3.063911e-01, 3.064089e-01, 3.064267e-01, 3.064445e-01, 3.064623e-01, 3.064801e-01, 3.064979e-01, 3.065157e-01, 3.065335e-01, 3.065513e-01, 3.065691e-01, 3.065869e-01, 3.066047e-01, 3.066225e-01, 3.066402e-01, 3.066581e-01, 3.066759e-01, 3.066936e-01, 3.067115e-01, 3.067293e-01, 3.067470e-01, 3.067648e-01, 3.067827e-01, 3.068004e-01, 3.068182e-01, 3.068360e-01, 3.068538e-01, 3.068716e-01, 3.068894e-01, 3.069072e-01, 3.069250e-01, 3.069428e-01, 3.069606e-01, 3.069784e-01, 3.069962e-01, 3.070140e-01, 3.070318e-01, 3.070496e-01, 3.070674e-01, 3.070852e-01, 3.071029e-01, 3.071207e-01, 3.071385e-01, 3.071563e-01, 3.071741e-01, 3.071919e-01, 3.072097e-01, 3.072275e-01, 3.072453e-01, 3.072631e-01, 3.072809e-01, 3.072987e-01, 3.073165e-01, 3.073342e-01, 3.073520e-01, 3.073698e-01, 3.073876e-01, 3.074054e-01, 3.074232e-01, 3.074410e-01, 3.074588e-01, 3.074766e-01, 3.074943e-01, 3.075121e-01, 3.075299e-01, 3.075477e-01, 3.075655e-01, 3.075833e-01, 3.076011e-01, 3.076189e-01, 3.076366e-01, 3.076544e-01, 3.076722e-01, 3.076900e-01, 3.077078e-01, 3.077256e-01, 3.077433e-01, 3.077611e-01, 3.077789e-01, 3.077967e-01, 3.078145e-01, 3.078323e-01, 3.078501e-01, 3.078679e-01, 3.078856e-01, 3.079034e-01, 3.079212e-01, 3.079390e-01, 3.079568e-01, 3.079745e-01, 3.079923e-01, 3.080101e-01, 3.080279e-01, 3.080457e-01, 3.080634e-01, 3.080812e-01, 3.080990e-01, 3.081168e-01, 3.081346e-01, 3.081523e-01, 3.081701e-01, 3.081879e-01, 3.082057e-01, 3.082235e-01, 3.082412e-01, 3.082590e-01, 3.082768e-01, 3.082946e-01, 3.083124e-01, 3.083301e-01, 3.083479e-01, 3.083657e-01, 3.083835e-01, 3.084013e-01, 3.084190e-01, 3.084368e-01, 3.084546e-01, 3.084724e-01, 3.084901e-01, 3.085079e-01, 3.085257e-01, 3.085434e-01, 3.085612e-01, 3.085790e-01, 3.085968e-01, 3.086146e-01, 3.086323e-01, 3.086501e-01, 3.086679e-01, 3.086857e-01, 3.087034e-01, 3.087212e-01, 3.087390e-01, 3.087568e-01, 3.087745e-01, 3.087923e-01, 3.088101e-01, 3.088278e-01, 3.088456e-01, 3.088634e-01, 3.088811e-01, 3.088989e-01, 3.089167e-01, 3.089345e-01, 3.089522e-01, 3.089700e-01, 3.089878e-01, 3.090056e-01, 3.090233e-01, 3.090411e-01, 3.090588e-01, 3.090766e-01, 3.090944e-01, 3.091122e-01, 3.091299e-01, 3.091477e-01, 3.091654e-01, 3.091832e-01, 3.092010e-01, 3.092188e-01, 3.092365e-01, 3.092543e-01, 3.092721e-01, 3.092898e-01, 3.093076e-01, 3.093253e-01, 3.093431e-01, 3.093609e-01, 3.093787e-01, 3.093964e-01, 3.094142e-01, 3.094319e-01, 3.094497e-01, 3.094675e-01, 3.094852e-01, 3.095030e-01, 3.095208e-01, 3.095385e-01, 3.095563e-01, 3.095741e-01, 3.095918e-01, 3.096096e-01, 3.096273e-01, 3.096451e-01, 3.096629e-01, 3.096806e-01, 3.096984e-01, 3.097161e-01, 3.097339e-01, 3.097517e-01, 3.097694e-01, 3.097872e-01, 3.098049e-01, 3.098227e-01, 3.098405e-01, 3.098582e-01, 3.098760e-01, 3.098937e-01, 3.099115e-01, 3.099293e-01, 3.099470e-01, 3.099648e-01, 3.099825e-01, 3.100003e-01, 3.100181e-01, 3.100358e-01, 3.100536e-01, 3.100713e-01, 3.100891e-01, 3.101068e-01, 3.101246e-01, 3.101423e-01, 3.101601e-01, 3.101778e-01, 3.101956e-01, 3.102134e-01, 3.102311e-01, 3.102489e-01, 3.102666e-01, 3.102844e-01, 3.103021e-01, 3.103199e-01, 3.103376e-01, 3.103554e-01, 3.103731e-01, 3.103909e-01, 3.104087e-01, 3.104264e-01, 3.104441e-01, 3.104619e-01, 3.104796e-01, 3.104974e-01, 3.105151e-01, 3.105329e-01, 3.105507e-01, 3.105684e-01, 3.105862e-01, 3.106039e-01, 3.106216e-01, 3.106394e-01, 3.106572e-01, 3.106749e-01, 3.106927e-01, 3.107104e-01, 3.107282e-01, 3.107459e-01, 3.107636e-01, 3.107814e-01, 3.107991e-01, 3.108169e-01, 3.108346e-01, 3.108524e-01, 3.108701e-01, 3.108879e-01, 3.109056e-01, 3.109234e-01, 3.109411e-01, 3.109589e-01, 3.109766e-01, 3.109944e-01, 3.110121e-01, 3.110298e-01, 3.110476e-01, 3.110653e-01, 3.110831e-01, 3.111008e-01, 3.111185e-01, 3.111363e-01, 3.111540e-01, 3.111718e-01, 3.111895e-01, 3.112073e-01, 3.112250e-01, 3.112428e-01, 3.112605e-01, 3.112782e-01, 3.112960e-01, 3.113137e-01, 3.113315e-01, 3.113492e-01, 3.113669e-01, 3.113847e-01, 3.114024e-01, 3.114202e-01, 3.114379e-01, 3.114556e-01, 3.114734e-01, 3.114911e-01, 3.115089e-01, 3.115266e-01, 3.115443e-01, 3.115621e-01, 3.115798e-01, 3.115976e-01, 3.116153e-01, 3.116330e-01, 3.116508e-01, 3.116685e-01, 3.116862e-01, 3.117040e-01, 3.117217e-01, 3.117394e-01, 3.117572e-01, 3.117749e-01, 3.117927e-01, 3.118104e-01, 3.118281e-01, 3.118459e-01, 3.118636e-01, 3.118813e-01, 3.118990e-01, 3.119168e-01, 3.119345e-01, 3.119523e-01, 3.119700e-01, 3.119877e-01, 3.120055e-01, 3.120232e-01, 3.120409e-01, 3.120587e-01, 3.120764e-01, 3.120941e-01, 3.121119e-01, 3.121296e-01, 3.121473e-01, 3.121651e-01, 3.121828e-01, 3.122005e-01, 3.122182e-01, 3.122360e-01, 3.122537e-01, 3.122714e-01, 3.122891e-01, 3.123069e-01, 3.123246e-01, 3.123423e-01, 3.123601e-01, 3.123778e-01, 3.123955e-01, 3.124132e-01, 3.124310e-01, 3.124487e-01, 3.124664e-01, 3.124841e-01, 3.125019e-01, 3.125196e-01, 3.125373e-01, 3.125550e-01, 3.125728e-01, 3.125905e-01, 3.126082e-01, 3.126259e-01, 3.126437e-01, 3.126614e-01, 3.126791e-01, 3.126968e-01, 3.127146e-01, 3.127323e-01, 3.127500e-01, 3.127677e-01, 3.127855e-01, 3.128032e-01, 3.128209e-01, 3.128386e-01, 3.128564e-01, 3.128741e-01, 3.128918e-01, 3.129095e-01, 3.129272e-01, 3.129450e-01, 3.129627e-01, 3.129804e-01, 3.129981e-01, 3.130158e-01, 3.130336e-01, 3.130513e-01, 3.130690e-01, 3.130867e-01, 3.131045e-01, 3.131222e-01, 3.131399e-01, 3.131576e-01, 3.131753e-01, 3.131931e-01, 3.132108e-01, 3.132285e-01, 3.132462e-01, 3.132639e-01, 3.132816e-01, 3.132994e-01, 3.133171e-01, 3.133348e-01, 3.133525e-01, 3.133702e-01, 3.133880e-01, 3.134057e-01, 3.134234e-01, 3.134411e-01, 3.134588e-01, 3.134765e-01, 3.134942e-01, 3.135119e-01, 3.135297e-01, 3.135474e-01, 3.135651e-01, 3.135828e-01, 3.136005e-01, 3.136182e-01, 3.136359e-01, 3.136536e-01, 3.136714e-01, 3.136891e-01, 3.137068e-01, 3.137245e-01, 3.137422e-01, 3.137599e-01, 3.137776e-01, 3.137953e-01, 3.138130e-01, 3.138308e-01, 3.138485e-01, 3.138662e-01, 3.138839e-01, 3.139016e-01, 3.139193e-01, 3.139370e-01, 3.139547e-01, 3.139724e-01, 3.139901e-01, 3.140078e-01, 3.140256e-01, 3.140433e-01, 3.140610e-01, 3.140787e-01, 3.140964e-01, 3.141141e-01, 3.141318e-01, 3.141495e-01, 3.141672e-01, 3.141849e-01, 3.142026e-01, 3.142203e-01, 3.142380e-01, 3.142557e-01, 3.142734e-01, 3.142911e-01, 3.143089e-01, 3.143266e-01, 3.143443e-01, 3.143620e-01, 3.143797e-01, 3.143974e-01, 3.144151e-01, 3.144328e-01, 3.144505e-01, 3.144682e-01, 3.144859e-01, 3.145036e-01, 3.145213e-01, 3.145390e-01, 3.145567e-01, 3.145744e-01, 3.145921e-01, 3.146098e-01, 3.146275e-01, 3.146452e-01, 3.146629e-01, 3.146806e-01, 3.146983e-01, 3.147160e-01, 3.147337e-01, 3.147514e-01, 3.147691e-01, 3.147868e-01, 3.148045e-01, 3.148222e-01, 3.148399e-01, 3.148576e-01, 3.148753e-01, 3.148930e-01, 3.149107e-01, 3.149284e-01, 3.149461e-01, 3.149638e-01, 3.149815e-01, 3.149991e-01, 3.150169e-01, 3.150345e-01, 3.150522e-01, 3.150699e-01, 3.150876e-01, 3.151053e-01, 3.151230e-01, 3.151407e-01, 3.151584e-01, 3.151761e-01, 3.151938e-01, 3.152115e-01, 3.152292e-01, 3.152469e-01, 3.152646e-01, 3.152823e-01, 3.152999e-01, 3.153176e-01, 3.153353e-01, 3.153530e-01, 3.153707e-01, 3.153884e-01, 3.154061e-01, 3.154238e-01, 3.154415e-01, 3.154592e-01, 3.154769e-01, 3.154946e-01, 3.155122e-01, 3.155299e-01, 3.155476e-01, 3.155653e-01, 3.155830e-01, 3.156007e-01, 3.156184e-01, 3.156361e-01, 3.156537e-01, 3.156714e-01, 3.156891e-01, 3.157068e-01, 3.157245e-01, 3.157422e-01, 3.157599e-01, 3.157776e-01, 3.157952e-01, 3.158129e-01, 3.158306e-01, 3.158483e-01, 3.158660e-01, 3.158837e-01, 3.159014e-01, 3.159190e-01, 3.159367e-01, 3.159544e-01, 3.159721e-01, 3.159898e-01, 3.160075e-01, 3.160251e-01, 3.160428e-01, 3.160605e-01, 3.160782e-01, 3.160959e-01, 3.161136e-01, 3.161312e-01, 3.161489e-01, 3.161666e-01, 3.161843e-01, 3.162020e-01, 3.162196e-01, 3.162373e-01, 3.162550e-01, 3.162727e-01, 3.162904e-01, 3.163081e-01, 3.163257e-01, 3.163434e-01, 3.163611e-01, 3.163788e-01, 3.163964e-01, 3.164141e-01, 3.164318e-01, 3.164495e-01, 3.164672e-01, 3.164848e-01, 3.165025e-01, 3.165202e-01, 3.165379e-01, 3.165555e-01, 3.165732e-01, 3.165909e-01, 3.166086e-01, 3.166263e-01, 3.166439e-01, 3.166616e-01, 3.166793e-01, 3.166970e-01, 3.167146e-01, 3.167323e-01, 3.167500e-01, 3.167676e-01, 3.167853e-01, 3.168030e-01, 3.168207e-01, 3.168384e-01, 3.168560e-01, 3.168737e-01, 3.168914e-01, 3.169090e-01, 3.169267e-01, 3.169444e-01, 3.169620e-01, 3.169797e-01, 3.169974e-01, 3.170151e-01, 3.170327e-01, 3.170504e-01, 3.170681e-01, 3.170857e-01, 3.171034e-01, 3.171211e-01, 3.171388e-01, 3.171564e-01, 3.171741e-01, 3.171918e-01, 3.172095e-01, 3.172271e-01, 3.172448e-01, 3.172624e-01, 3.172801e-01, 3.172978e-01, 3.173155e-01, 3.173331e-01, 3.173508e-01, 3.173684e-01, 3.173861e-01, 3.174038e-01, 3.174215e-01, 3.174391e-01, 3.174568e-01, 3.174745e-01, 3.174921e-01, 3.175098e-01, 3.175274e-01, 3.175451e-01, 3.175628e-01, 3.175804e-01, 3.175981e-01, 3.176157e-01, 3.176334e-01, 3.176511e-01, 3.176687e-01, 3.176864e-01, 3.177041e-01, 3.177217e-01, 3.177394e-01, 3.177571e-01, 3.177747e-01, 3.177924e-01, 3.178101e-01, 3.178277e-01, 3.178454e-01, 3.178630e-01, 3.178807e-01, 3.178983e-01, 3.179160e-01, 3.179336e-01, 3.179513e-01, 3.179690e-01, 3.179867e-01, 3.180043e-01, 3.180220e-01, 3.180396e-01, 3.180573e-01, 3.180749e-01, 3.180926e-01, 3.181103e-01, 3.181279e-01, 3.181456e-01, 3.181632e-01, 3.181809e-01, 3.181985e-01, 3.182162e-01, 3.182338e-01, 3.182515e-01, 3.182692e-01, 3.182868e-01, 3.183045e-01, 3.183221e-01, 3.183398e-01, 3.183574e-01, 3.183751e-01, 3.183928e-01, 3.184104e-01, 3.184281e-01, 3.184457e-01, 3.184634e-01, 3.184810e-01, 3.184987e-01, 3.185163e-01, 3.185340e-01, 3.185516e-01, 3.185693e-01, 3.185869e-01, 3.186046e-01, 3.186222e-01, 3.186399e-01, 3.186575e-01, 3.186752e-01, 3.186928e-01, 3.187105e-01, 3.187281e-01, 3.187458e-01, 3.187635e-01, 3.187811e-01, 3.187987e-01, 3.188164e-01, 3.188340e-01, 3.188517e-01, 3.188693e-01, 3.188870e-01, 3.189046e-01, 3.189223e-01, 3.189399e-01, 3.189576e-01, 3.189752e-01, 3.189929e-01, 3.190105e-01, 3.190282e-01, 3.190458e-01, 3.190635e-01, 3.190811e-01, 3.190988e-01, 3.191164e-01, 3.191340e-01, 3.191517e-01, 3.191693e-01, 3.191870e-01, 3.192046e-01, 3.192223e-01, 3.192399e-01, 3.192576e-01, 3.192752e-01, 3.192928e-01, 3.193105e-01, 3.193281e-01, 3.193458e-01, 3.193634e-01, 3.193811e-01, 3.193987e-01, 3.194163e-01, 3.194340e-01, 3.194516e-01, 3.194692e-01, 3.194869e-01, 3.195046e-01, 3.195222e-01, 3.195398e-01, 3.195575e-01, 3.195751e-01, 3.195927e-01, 3.196104e-01, 3.196280e-01, 3.196457e-01, 3.196633e-01, 3.196809e-01, 3.196986e-01, 3.197162e-01, 3.197339e-01, 3.197515e-01, 3.197691e-01, 3.197868e-01, 3.198044e-01, 3.198220e-01, 3.198397e-01, 3.198573e-01, 3.198750e-01, 3.198926e-01, 3.199102e-01, 3.199279e-01, 3.199455e-01, 3.199631e-01, 3.199808e-01, 3.199984e-01, 3.200160e-01, 3.200337e-01, 3.200513e-01, 3.200689e-01, 3.200866e-01, 3.201042e-01, 3.201219e-01, 3.201395e-01, 3.201571e-01, 3.201747e-01, 3.201924e-01, 3.202100e-01, 3.202276e-01, 3.202453e-01, 3.202629e-01, 3.202805e-01, 3.202981e-01, 3.203158e-01, 3.203334e-01, 3.203511e-01, 3.203687e-01, 3.203863e-01, 3.204039e-01, 3.204216e-01, 3.204392e-01, 3.204568e-01, 3.204744e-01, 3.204921e-01, 3.205097e-01, 3.205273e-01, 3.205450e-01, 3.205626e-01, 3.205802e-01, 3.205979e-01, 3.206155e-01, 3.206331e-01, 3.206507e-01, 3.206684e-01, 3.206860e-01, 3.207036e-01, 3.207212e-01, 3.207389e-01, 3.207565e-01, 3.207741e-01, 3.207917e-01, 3.208094e-01, 3.208270e-01, 3.208446e-01, 3.208622e-01, 3.208798e-01, 3.208975e-01, 3.209151e-01, 3.209327e-01, 3.209504e-01, 3.209680e-01, 3.209856e-01, 3.210032e-01, 3.210208e-01, 3.210385e-01, 3.210561e-01, 3.210737e-01, 3.210913e-01, 3.211090e-01, 3.211266e-01, 3.211442e-01, 3.211618e-01, 3.211794e-01, 3.211971e-01, 3.212147e-01, 3.212323e-01, 3.212499e-01, 3.212675e-01, 3.212852e-01, 3.213028e-01, 3.213204e-01, 3.213380e-01, 3.213556e-01, 3.213732e-01, 3.213909e-01, 3.214085e-01, 3.214261e-01, 3.214437e-01, 3.214613e-01, 3.214789e-01, 3.214966e-01, 3.215142e-01, 3.215318e-01, 3.215494e-01, 3.215670e-01, 3.215846e-01, 3.216023e-01, 3.216199e-01, 3.216375e-01, 3.216551e-01, 3.216727e-01, 3.216903e-01, 3.217079e-01, 3.217255e-01, 3.217432e-01, 3.217608e-01, 3.217784e-01, 3.217960e-01, 3.218136e-01, 3.218312e-01, 3.218488e-01, 3.218665e-01, 3.218841e-01, 3.219017e-01, 3.219193e-01, 3.219369e-01, 3.219545e-01, 3.219721e-01, 3.219897e-01, 3.220074e-01, 3.220250e-01, 3.220426e-01, 3.220602e-01, 3.220778e-01, 3.220954e-01, 3.221130e-01, 3.221306e-01, 3.221482e-01, 3.221658e-01, 3.221834e-01, 3.222010e-01, 3.222187e-01, 3.222363e-01, 3.222539e-01, 3.222715e-01, 3.222891e-01, 3.223067e-01, 3.223243e-01, 3.223419e-01, 3.223595e-01, 3.223771e-01, 3.223947e-01, 3.224123e-01, 3.224299e-01, 3.224475e-01, 3.224651e-01, 3.224827e-01, 3.225003e-01, 3.225180e-01, 3.225355e-01, 3.225532e-01, 3.225707e-01, 3.225884e-01, 3.226060e-01, 3.226236e-01, 3.226412e-01, 3.226587e-01, 3.226764e-01, 3.226940e-01, 3.227116e-01, 3.227292e-01, 3.227468e-01, 3.227644e-01, 3.227820e-01, 3.227996e-01, 3.228172e-01, 3.228348e-01, 3.228524e-01, 3.228700e-01, 3.228876e-01, 3.229052e-01, 3.229228e-01, 3.229404e-01, 3.229580e-01, 3.229756e-01, 3.229932e-01, 3.230108e-01, 3.230284e-01, 3.230460e-01, 3.230636e-01, 3.230811e-01, 3.230987e-01, 3.231163e-01, 3.231339e-01, 3.231516e-01, 3.231691e-01, 3.231867e-01, 3.232043e-01, 3.232219e-01, 3.232395e-01, 3.232571e-01, 3.232747e-01, 3.232923e-01, 3.233099e-01, 3.233275e-01, 3.233451e-01, 3.233627e-01, 3.233803e-01, 3.233979e-01, 3.234155e-01, 3.234330e-01, 3.234507e-01, 3.234682e-01, 3.234858e-01, 3.235034e-01, 3.235210e-01, 3.235386e-01, 3.235562e-01, 3.235738e-01, 3.235914e-01, 3.236090e-01, 3.236266e-01, 3.236442e-01, 3.236617e-01, 3.236793e-01, 3.236969e-01, 3.237145e-01, 3.237321e-01, 3.237497e-01, 3.237673e-01, 3.237849e-01, 3.238024e-01, 3.238201e-01, 3.238376e-01, 3.238552e-01, 3.238728e-01, 3.238904e-01, 3.239080e-01, 3.239256e-01, 3.239431e-01, 3.239607e-01, 3.239783e-01, 3.239959e-01, 3.240135e-01, 3.240311e-01, 3.240487e-01, 3.240663e-01, 3.240838e-01, 3.241014e-01, 3.241190e-01, 3.241366e-01, 3.241542e-01, 3.241718e-01, 3.241893e-01, 3.242069e-01, 3.242245e-01, 3.242421e-01, 3.242597e-01, 3.242773e-01, 3.242948e-01, 3.243124e-01, 3.243300e-01, 3.243476e-01, 3.243652e-01, 3.243827e-01, 3.244003e-01, 3.244179e-01, 3.244355e-01, 3.244531e-01, 3.244706e-01, 3.244882e-01, 3.245058e-01, 3.245234e-01, 3.245409e-01, 3.245586e-01, 3.245761e-01, 3.245937e-01, 3.246113e-01, 3.246289e-01, 3.246464e-01, 3.246640e-01, 3.246816e-01, 3.246992e-01, 3.247167e-01, 3.247343e-01, 3.247519e-01, 3.247695e-01, 3.247871e-01, 3.248046e-01, 3.248222e-01, 3.248398e-01, 3.248574e-01, 3.248749e-01, 3.248925e-01, 3.249101e-01, 3.249277e-01, 3.249452e-01, 3.249628e-01, 3.249804e-01, 3.249980e-01, 3.250155e-01, 3.250331e-01, 3.250507e-01, 3.250682e-01, 3.250858e-01, 3.251034e-01, 3.251210e-01, 3.251385e-01, 3.251561e-01, 3.251737e-01, 3.251913e-01, 3.252088e-01, 3.252264e-01, 3.252439e-01, 3.252615e-01, 3.252791e-01, 3.252967e-01, 3.253142e-01, 3.253318e-01, 3.253494e-01, 3.253669e-01, 3.253845e-01, 3.254021e-01, 3.254197e-01, 3.254372e-01, 3.254548e-01, 3.254724e-01, 3.254899e-01, 3.255075e-01, 3.255251e-01, 3.255426e-01, 3.255602e-01, 3.255778e-01, 3.255953e-01, 3.256129e-01, 3.256305e-01, 3.256480e-01, 3.256656e-01, 3.256831e-01, 3.257007e-01, 3.257183e-01, 3.257358e-01, 3.257534e-01, 3.257710e-01, 3.257885e-01, 3.258061e-01, 3.258237e-01, 3.258412e-01, 3.258588e-01, 3.258764e-01, 3.258939e-01, 3.259115e-01, 3.259290e-01, 3.259466e-01, 3.259642e-01, 3.259817e-01, 3.259993e-01, 3.260168e-01, 3.260344e-01, 3.260520e-01, 3.260695e-01, 3.260871e-01, 3.261047e-01, 3.261222e-01, 3.261398e-01, 3.261573e-01, 3.261749e-01, 3.261925e-01, 3.262100e-01, 3.262276e-01, 3.262451e-01, 3.262627e-01, 3.262803e-01, 3.262978e-01, 3.263154e-01, 3.263329e-01, 3.263505e-01, 3.263680e-01, 3.263856e-01, 3.264031e-01, 3.264207e-01, 3.264383e-01, 3.264558e-01, 3.264734e-01, 3.264909e-01, 3.265085e-01, 3.265260e-01, 3.265436e-01, 3.265612e-01, 3.265787e-01, 3.265963e-01, 3.266138e-01, 3.266314e-01, 3.266489e-01, 3.266665e-01, 3.266840e-01, 3.267016e-01, 3.267191e-01, 3.267367e-01, 3.267542e-01, 3.267718e-01, 3.267893e-01, 3.268069e-01, 3.268245e-01, 3.268420e-01, 3.268595e-01, 3.268771e-01, 3.268946e-01, 3.269122e-01, 3.269297e-01, 3.269473e-01, 3.269649e-01, 3.269824e-01, 3.269999e-01, 3.270175e-01, 3.270350e-01, 3.270526e-01, 3.270701e-01, 3.270877e-01, 3.271053e-01, 3.271228e-01, 3.271403e-01, 3.271579e-01, 3.271754e-01, 3.271930e-01, 3.272105e-01, 3.272281e-01, 3.272456e-01, 3.272632e-01, 3.272807e-01, 3.272983e-01, 3.273158e-01, 3.273334e-01, 3.273509e-01, 3.273684e-01, 3.273860e-01, 3.274035e-01, 3.274211e-01, 3.274386e-01, 3.274561e-01, 3.274737e-01, 3.274912e-01, 3.275088e-01, 3.275263e-01, 3.275439e-01, 3.275614e-01, 3.275790e-01, 3.275965e-01, 3.276140e-01, 3.276316e-01, 3.276491e-01, 3.276667e-01, 3.276842e-01, 3.277017e-01, 3.277193e-01, 3.277368e-01, 3.277544e-01, 3.277719e-01, 3.277895e-01, 3.278070e-01, 3.278245e-01, 3.278421e-01, 3.278596e-01, 3.278771e-01, 3.278947e-01, 3.279122e-01, 3.279298e-01, 3.279473e-01, 3.279648e-01, 3.279824e-01, 3.279999e-01, 3.280174e-01, 3.280350e-01, 3.280525e-01, 3.280701e-01, 3.280876e-01, 3.281051e-01, 3.281227e-01, 3.281402e-01, 3.281577e-01, 3.281753e-01, 3.281928e-01, 3.282103e-01, 3.282279e-01, 3.282454e-01, 3.282630e-01, 3.282805e-01, 3.282980e-01, 3.283156e-01, 3.283331e-01, 3.283506e-01, 3.283681e-01, 3.283857e-01, 3.284032e-01, 3.284207e-01, 3.284383e-01, 3.284558e-01, 3.284733e-01, 3.284909e-01, 3.285084e-01, 3.285259e-01, 3.285435e-01, 3.285610e-01, 3.285785e-01, 3.285961e-01, 3.286136e-01, 3.286311e-01, 3.286486e-01, 3.286662e-01, 3.286837e-01, 3.287012e-01, 3.287188e-01, 3.287363e-01, 3.287538e-01, 3.287713e-01, 3.287889e-01, 3.288064e-01, 3.288239e-01, 3.288414e-01, 3.288590e-01, 3.288765e-01, 3.288940e-01, 3.289115e-01, 3.289291e-01, 3.289466e-01, 3.289641e-01, 3.289817e-01, 3.289992e-01, 3.290167e-01, 3.290342e-01, 3.290517e-01, 3.290693e-01, 3.290868e-01, 3.291043e-01, 3.291219e-01, 3.291394e-01, 3.291569e-01, 3.291744e-01, 3.291919e-01, 3.292094e-01, 3.292270e-01, 3.292445e-01, 3.292620e-01, 3.292795e-01, 3.292971e-01, 3.293146e-01, 3.293321e-01, 3.293496e-01, 3.293672e-01, 3.293847e-01, 3.294022e-01, 3.294197e-01, 3.294372e-01, 3.294547e-01, 3.294722e-01, 3.294898e-01, 3.295073e-01, 3.295248e-01, 3.295423e-01, 3.295599e-01, 3.295774e-01, 3.295949e-01, 3.296124e-01, 3.296299e-01, 3.296475e-01, 3.296650e-01, 3.296825e-01, 3.297000e-01, 3.297175e-01, 3.297350e-01, 3.297525e-01, 3.297701e-01, 3.297876e-01, 3.298051e-01, 3.298226e-01, 3.298401e-01, 3.298576e-01, 3.298751e-01, 3.298927e-01, 3.299102e-01, 3.299277e-01, 3.299452e-01, 3.299627e-01, 3.299802e-01, 3.299977e-01, 3.300152e-01, 3.300328e-01, 3.300503e-01, 3.300678e-01, 3.300853e-01, 3.301028e-01, 3.301203e-01, 3.301378e-01, 3.301553e-01, 3.301729e-01, 3.301904e-01, 3.302079e-01, 3.302254e-01, 3.302429e-01, 3.302604e-01, 3.302779e-01, 3.302954e-01, 3.303130e-01, 3.303305e-01, 3.303480e-01, 3.303655e-01, 3.303830e-01, 3.304005e-01, 3.304180e-01, 3.304355e-01, 3.304530e-01, 3.304705e-01, 3.304880e-01, 3.305055e-01, 3.305230e-01, 3.305405e-01, 3.305581e-01, 3.305756e-01, 3.305931e-01, 3.306106e-01, 3.306281e-01, 3.306456e-01, 3.306631e-01, 3.306806e-01, 3.306981e-01, 3.307156e-01, 3.307331e-01, 3.307506e-01, 3.307681e-01, 3.307856e-01, 3.308031e-01, 3.308206e-01, 3.308381e-01, 3.308556e-01, 3.308731e-01, 3.308906e-01, 3.309081e-01, 3.309256e-01, 3.309431e-01, 3.309606e-01, 3.309781e-01, 3.309956e-01, 3.310131e-01, 3.310306e-01, 3.310481e-01, 3.310656e-01, 3.310831e-01, 3.311006e-01, 3.311181e-01, 3.311356e-01, 3.311531e-01, 3.311706e-01, 3.311881e-01, 3.312056e-01, 3.312231e-01, 3.312406e-01, 3.312581e-01, 3.312756e-01, 3.312931e-01, 3.313106e-01, 3.313281e-01, 3.313456e-01, 3.313631e-01, 3.313806e-01, 3.313981e-01, 3.314156e-01, 3.314331e-01, 3.314506e-01, 3.314681e-01, 3.314856e-01, 3.315031e-01, 3.315206e-01, 3.315381e-01, 3.315555e-01, 3.315730e-01, 3.315905e-01, 3.316080e-01, 3.316255e-01, 3.316430e-01, 3.316605e-01, 3.316780e-01, 3.316955e-01, 3.317130e-01, 3.317305e-01, 3.317480e-01, 3.317654e-01, 3.317830e-01, 3.318004e-01, 3.318179e-01, 3.318354e-01, 3.318529e-01, 3.318704e-01, 3.318879e-01, 3.319054e-01, 3.319229e-01, 3.319404e-01, 3.319578e-01, 3.319753e-01, 3.319928e-01, 3.320103e-01, 3.320278e-01, 3.320453e-01, 3.320628e-01, 3.320803e-01, 3.320977e-01, 3.321152e-01, 3.321327e-01, 3.321502e-01, 3.321677e-01, 3.321852e-01, 3.322027e-01, 3.322202e-01, 3.322377e-01, 3.322551e-01, 3.322726e-01, 3.322901e-01, 3.323076e-01, 3.323251e-01, 3.323426e-01, 3.323600e-01, 3.323775e-01, 3.323950e-01, 3.324125e-01, 3.324300e-01, 3.324474e-01, 3.324650e-01, 3.324824e-01, 3.324999e-01, 3.325174e-01, 3.325348e-01, 3.325524e-01, 3.325698e-01, 3.325873e-01, 3.326048e-01, 3.326223e-01, 3.326398e-01, 3.326572e-01, 3.326747e-01, 3.326922e-01, 3.327097e-01, 3.327272e-01, 3.327446e-01, 3.327621e-01, 3.327796e-01, 3.327971e-01, 3.328145e-01, 3.328320e-01, 3.328495e-01, 3.328670e-01, 3.328845e-01, 3.329019e-01, 3.329194e-01, 3.329369e-01, 3.329544e-01, 3.329718e-01, 3.329893e-01, 3.330068e-01, 3.330243e-01, 3.330418e-01, 3.330592e-01, 3.330767e-01, 3.330942e-01, 3.331117e-01, 3.331291e-01, 3.331466e-01, 3.331641e-01, 3.331816e-01, 3.331990e-01, 3.332165e-01, 3.332340e-01, 3.332514e-01, 3.332689e-01, 3.332864e-01, 3.333039e-01, 3.333213e-01, 3.333388e-01, 3.333563e-01, 3.333738e-01, 3.333912e-01, 3.334087e-01, 3.334262e-01, 3.334437e-01, 3.334611e-01, 3.334786e-01, 3.334961e-01, 3.335135e-01, 3.335310e-01, 3.335485e-01, 3.335660e-01, 3.335834e-01, 3.336009e-01, 3.336183e-01, 3.336358e-01, 3.336533e-01, 3.336708e-01, 3.336882e-01, 3.337057e-01, 3.337232e-01, 3.337406e-01, 3.337581e-01, 3.337756e-01, 3.337930e-01, 3.338105e-01, 3.338279e-01, 3.338454e-01, 3.338629e-01, 3.338804e-01, 3.338978e-01, 3.339153e-01, 3.339328e-01, 3.339502e-01, 3.339677e-01, 3.339851e-01, 3.340026e-01, 3.340201e-01, 3.340375e-01, 3.340550e-01, 3.340725e-01, 3.340899e-01, 3.341074e-01, 3.341249e-01, 3.341423e-01, 3.341598e-01, 3.341773e-01, 3.341947e-01, 3.342122e-01, 3.342296e-01, 3.342471e-01, 3.342645e-01, 3.342820e-01, 3.342995e-01, 3.343169e-01, 3.343344e-01, 3.343519e-01, 3.343693e-01, 3.343868e-01, 3.344042e-01, 3.344217e-01, 3.344392e-01, 3.344566e-01, 3.344741e-01, 3.344915e-01, 3.345090e-01, 3.345264e-01, 3.345439e-01, 3.345613e-01, 3.345788e-01, 3.345963e-01, 3.346137e-01, 3.346312e-01, 3.346487e-01, 3.346661e-01, 3.346836e-01, 3.347010e-01, 3.347185e-01, 3.347359e-01, 3.347534e-01, 3.347708e-01, 3.347883e-01, 3.348057e-01, 3.348232e-01, 3.348407e-01, 3.348581e-01, 3.348756e-01, 3.348930e-01, 3.349105e-01, 3.349279e-01, 3.349454e-01, 3.349628e-01, 3.349803e-01, 3.349977e-01, 3.350152e-01, 3.350326e-01, 3.350501e-01, 3.350675e-01, 3.350850e-01, 3.351024e-01, 3.351199e-01, 3.351373e-01, 3.351548e-01, 3.351722e-01, 3.351897e-01, 3.352071e-01, 3.352246e-01, 3.352420e-01, 3.352595e-01, 3.352769e-01, 3.352944e-01, 3.353118e-01, 3.353293e-01, 3.353467e-01, 3.353642e-01, 3.353816e-01, 3.353991e-01, 3.354165e-01, 3.354340e-01, 3.354514e-01, 3.354689e-01, 3.354863e-01, 3.355038e-01, 3.355212e-01, 3.355387e-01, 3.355561e-01, 3.355735e-01, 3.355910e-01, 3.356084e-01, 3.356259e-01, 3.356433e-01, 3.356608e-01, 3.356782e-01, 3.356957e-01, 3.357131e-01, 3.357305e-01, 3.357480e-01, 3.357654e-01, 3.357829e-01, 3.358003e-01, 3.358178e-01, 3.358352e-01, 3.358527e-01, 3.358701e-01, 3.358875e-01, 3.359050e-01, 3.359224e-01, 3.359398e-01, 3.359573e-01, 3.359747e-01, 3.359922e-01, 3.360096e-01, 3.360271e-01, 3.360445e-01, 3.360619e-01, 3.360794e-01, 3.360968e-01, 3.361143e-01, 3.361317e-01, 3.361491e-01, 3.361666e-01, 3.361840e-01, 3.362014e-01, 3.362189e-01, 3.362363e-01, 3.362538e-01, 3.362712e-01, 3.362886e-01, 3.363061e-01, 3.363235e-01, 3.363409e-01, 3.363584e-01, 3.363758e-01, 3.363932e-01, 3.364107e-01, 3.364281e-01, 3.364455e-01, 3.364630e-01, 3.364804e-01, 3.364978e-01, 3.365153e-01, 3.365327e-01, 3.365501e-01, 3.365676e-01, 3.365850e-01, 3.366024e-01, 3.366199e-01, 3.366373e-01, 3.366548e-01, 3.366722e-01, 3.366896e-01, 3.367070e-01, 3.367245e-01, 3.367419e-01, 3.367593e-01, 3.367768e-01, 3.367942e-01, 3.368116e-01, 3.368291e-01, 3.368465e-01, 3.368639e-01, 3.368813e-01, 3.368988e-01, 3.369162e-01, 3.369336e-01, 3.369510e-01, 3.369685e-01, 3.369859e-01, 3.370034e-01, 3.370208e-01, 3.370382e-01, 3.370556e-01, 3.370731e-01, 3.370905e-01, 3.371079e-01, 3.371253e-01, 3.371427e-01, 3.371602e-01, 3.371776e-01, 3.371950e-01, 3.372125e-01, 3.372299e-01, 3.372473e-01, 3.372647e-01, 3.372822e-01, 3.372996e-01, 3.373170e-01, 3.373344e-01, 3.373519e-01, 3.373693e-01, 3.373867e-01, 3.374041e-01, 3.374216e-01, 3.374390e-01, 3.374564e-01, 3.374738e-01, 3.374912e-01, 3.375087e-01, 3.375261e-01, 3.375435e-01, 3.375609e-01, 3.375784e-01, 3.375958e-01, 3.376132e-01, 3.376306e-01, 3.376480e-01, 3.376654e-01, 3.376829e-01, 3.377003e-01, 3.377177e-01, 3.377351e-01, 3.377526e-01, 3.377700e-01, 3.377874e-01, 3.378048e-01, 3.378222e-01, 3.378396e-01, 3.378571e-01, 3.378745e-01, 3.378919e-01, 3.379093e-01, 3.379267e-01, 3.379441e-01, 3.379616e-01, 3.379790e-01, 3.379964e-01, 3.380138e-01, 3.380312e-01, 3.380486e-01, 3.380661e-01, 3.380835e-01, 3.381009e-01, 3.381183e-01, 3.381357e-01, 3.381531e-01, 3.381705e-01, 3.381880e-01, 3.382054e-01, 3.382228e-01, 3.382402e-01, 3.382576e-01, 3.382750e-01, 3.382924e-01, 3.383099e-01, 3.383273e-01, 3.383447e-01, 3.383621e-01, 3.383795e-01, 3.383969e-01, 3.384143e-01, 3.384317e-01, 3.384491e-01, 3.384666e-01, 3.384840e-01, 3.385014e-01, 3.385188e-01, 3.385362e-01, 3.385536e-01, 3.385710e-01, 3.385884e-01, 3.386058e-01, 3.386232e-01, 3.386406e-01, 3.386580e-01, 3.386755e-01, 3.386929e-01, 3.387103e-01, 3.387277e-01, 3.387451e-01, 3.387625e-01, 3.387799e-01, 3.387973e-01, 3.388147e-01, 3.388321e-01, 3.388495e-01, 3.388669e-01, 3.388843e-01, 3.389018e-01, 3.389191e-01, 3.389365e-01, 3.389540e-01, 3.389713e-01, 3.389888e-01, 3.390062e-01, 3.390236e-01, 3.390410e-01, 3.390584e-01, 3.390758e-01, 3.390932e-01, 3.391106e-01, 3.391280e-01, 3.391454e-01, 3.391628e-01, 3.391802e-01, 3.391976e-01, 3.392150e-01, 3.392324e-01, 3.392498e-01, 3.392672e-01, 3.392846e-01, 3.393020e-01, 3.393194e-01, 3.393368e-01, 3.393542e-01, 3.393716e-01, 3.393890e-01, 3.394064e-01, 3.394238e-01, 3.394412e-01, 3.394586e-01, 3.394760e-01, 3.394934e-01, 3.395108e-01, 3.395282e-01, 3.395456e-01, 3.395630e-01, 3.395804e-01, 3.395978e-01, 3.396152e-01, 3.396326e-01, 3.396499e-01, 3.396674e-01, 3.396848e-01, 3.397022e-01, 3.397195e-01, 3.397369e-01, 3.397543e-01, 3.397717e-01, 3.397891e-01, 3.398065e-01, 3.398239e-01, 3.398413e-01, 3.398587e-01, 3.398761e-01, 3.398935e-01, 3.399109e-01, 3.399283e-01, 3.399456e-01, 3.399630e-01, 3.399805e-01, 3.399978e-01, 3.400152e-01, 3.400326e-01, 3.400500e-01, 3.400674e-01, 3.400848e-01, 3.401022e-01, 3.401196e-01, 3.401370e-01, 3.401543e-01, 3.401718e-01, 3.401891e-01, 3.402065e-01, 3.402239e-01, 3.402413e-01, 3.402587e-01, 3.402761e-01, 3.402935e-01, 3.403109e-01, 3.403282e-01, 3.403456e-01, 3.403630e-01, 3.403804e-01, 3.403978e-01, 3.404152e-01, 3.404326e-01, 3.404500e-01, 3.404673e-01, 3.404847e-01, 3.405021e-01, 3.405195e-01, 3.405369e-01, 3.405543e-01, 3.405716e-01, 3.405890e-01, 3.406064e-01, 3.406238e-01, 3.406412e-01, 3.406586e-01, 3.406760e-01, 3.406934e-01, 3.407107e-01, 3.407281e-01, 3.407455e-01, 3.407629e-01, 3.407803e-01, 3.407976e-01, 3.408150e-01, 3.408324e-01, 3.408498e-01, 3.408672e-01, 3.408846e-01, 3.409019e-01, 3.409193e-01, 3.409367e-01, 3.409541e-01, 3.409714e-01, 3.409888e-01, 3.410062e-01, 3.410236e-01, 3.410410e-01, 3.410583e-01, 3.410757e-01, 3.410931e-01, 3.411105e-01, 3.411279e-01, 3.411452e-01, 3.411626e-01, 3.411800e-01, 3.411974e-01, 3.412147e-01, 3.412321e-01, 3.412495e-01, 3.412669e-01, 3.412843e-01, 3.413016e-01, 3.413190e-01, 3.413364e-01, 3.413538e-01, 3.413711e-01, 3.413885e-01, 3.414059e-01, 3.414233e-01, 3.414406e-01, 3.414580e-01, 3.414754e-01, 3.414928e-01, 3.415101e-01, 3.415275e-01, 3.415449e-01, 3.415622e-01, 3.415796e-01, 3.415970e-01, 3.416144e-01, 3.416317e-01, 3.416491e-01, 3.416665e-01, 3.416839e-01, 3.417012e-01, 3.417186e-01, 3.417360e-01, 3.417533e-01, 3.417707e-01, 3.417881e-01, 3.418055e-01, 3.418228e-01, 3.418402e-01, 3.418576e-01, 3.418749e-01, 3.418923e-01, 3.419097e-01, 3.419271e-01, 3.419444e-01, 3.419618e-01, 3.419791e-01, 3.419965e-01, 3.420139e-01, 3.420312e-01, 3.420486e-01, 3.420660e-01, 3.420834e-01, 3.421007e-01, 3.421181e-01, 3.421355e-01, 3.421528e-01, 3.421702e-01, 3.421875e-01, 3.422049e-01, 3.422223e-01, 3.422396e-01, 3.422570e-01, 3.422744e-01, 3.422917e-01, 3.423091e-01, 3.423265e-01, 3.423438e-01, 3.423612e-01, 3.423786e-01, 3.423959e-01, 3.424133e-01, 3.424306e-01, 3.424480e-01, 3.424654e-01, 3.424827e-01, 3.425001e-01, 3.425174e-01, 3.425348e-01, 3.425522e-01, 3.425695e-01, 3.425869e-01, 3.426042e-01, 3.426216e-01, 3.426390e-01, 3.426563e-01, 3.426737e-01, 3.426911e-01, 3.427084e-01, 3.427258e-01, 3.427431e-01, 3.427605e-01, 3.427778e-01, 3.427952e-01, 3.428126e-01, 3.428299e-01, 3.428473e-01, 3.428646e-01, 3.428820e-01, 3.428994e-01, 3.429167e-01, 3.429341e-01, 3.429514e-01, 3.429688e-01, 3.429861e-01, 3.430035e-01, 3.430209e-01, 3.430382e-01, 3.430555e-01, 3.430729e-01, 3.430903e-01, 3.431076e-01, 3.431250e-01, 3.431423e-01, 3.431597e-01, 3.431771e-01, 3.431944e-01, 3.432117e-01, 3.432291e-01, 3.432465e-01, 3.432638e-01, 3.432811e-01, 3.432985e-01, 3.433158e-01, 3.433332e-01, 3.433506e-01, 3.433679e-01, 3.433853e-01, 3.434026e-01, 3.434200e-01, 3.434373e-01, 3.434547e-01, 3.434720e-01, 3.434893e-01, 3.435067e-01, 3.435241e-01, 3.435414e-01, 3.435588e-01, 3.435761e-01, 3.435934e-01, 3.436108e-01, 3.436281e-01, 3.436455e-01, 3.436629e-01, 3.436802e-01, 3.436975e-01, 3.437149e-01, 3.437322e-01, 3.437496e-01, 3.437669e-01, 3.437843e-01, 3.438016e-01, 3.438190e-01, 3.438363e-01, 3.438537e-01, 3.438710e-01, 3.438884e-01, 3.439057e-01, 3.439231e-01, 3.439404e-01, 3.439577e-01, 3.439751e-01, 3.439924e-01, 3.440098e-01, 3.440271e-01, 3.440444e-01, 3.440618e-01, 3.440791e-01, 3.440965e-01, 3.441138e-01, 3.441311e-01, 3.441485e-01, 3.441659e-01, 3.441832e-01, 3.442005e-01, 3.442179e-01, 3.442352e-01, 3.442526e-01, 3.442699e-01, 3.442872e-01, 3.443046e-01, 3.443219e-01, 3.443393e-01, 3.443566e-01, 3.443739e-01, 3.443913e-01, 3.444086e-01, 3.444259e-01, 3.444433e-01, 3.444606e-01, 3.444780e-01, 3.444953e-01, 3.445126e-01, 3.445300e-01, 3.445473e-01, 3.445646e-01, 3.445820e-01, 3.445993e-01, 3.446167e-01, 3.446340e-01, 3.446513e-01, 3.446687e-01, 3.446860e-01, 3.447033e-01, 3.447207e-01, 3.447380e-01, 3.447554e-01, 3.447727e-01, 3.447900e-01, 3.448074e-01, 3.448247e-01, 3.448420e-01, 3.448594e-01, 3.448767e-01, 3.448940e-01, 3.449114e-01, 3.449287e-01, 3.449460e-01, 3.449633e-01, 3.449807e-01, 3.449980e-01, 3.450153e-01, 3.450327e-01, 3.450500e-01, 3.450674e-01, 3.450847e-01, 3.451020e-01, 3.451193e-01, 3.451366e-01, 3.451540e-01, 3.451713e-01, 3.451886e-01, 3.452060e-01, 3.452233e-01, 3.452407e-01, 3.452580e-01, 3.452753e-01, 3.452926e-01, 3.453099e-01, 3.453273e-01, 3.453446e-01, 3.453619e-01, 3.453793e-01, 3.453966e-01, 3.454139e-01, 3.454312e-01, 3.454486e-01, 3.454659e-01, 3.454832e-01, 3.455006e-01, 3.455179e-01, 3.455352e-01, 3.455525e-01, 3.455698e-01, 3.455872e-01, 3.456045e-01, 3.456218e-01, 3.456391e-01, 3.456565e-01, 3.456738e-01, 3.456911e-01, 3.457084e-01, 3.457257e-01, 3.457431e-01, 3.457604e-01, 3.457777e-01, 3.457950e-01, 3.458124e-01, 3.458297e-01, 3.458470e-01, 3.458643e-01, 3.458817e-01, 3.458990e-01, 3.459163e-01, 3.459336e-01, 3.459509e-01, 3.459682e-01, 3.459856e-01, 3.460029e-01, 3.460202e-01, 3.460375e-01, 3.460549e-01, 3.460722e-01, 3.460895e-01, 3.461068e-01, 3.461241e-01, 3.461414e-01, 3.461588e-01, 3.461761e-01, 3.461934e-01, 3.462107e-01, 3.462280e-01, 3.462453e-01, 3.462627e-01, 3.462800e-01, 3.462973e-01, 3.463146e-01, 3.463319e-01, 3.463492e-01, 3.463666e-01, 3.463839e-01, 3.464012e-01, 3.464185e-01, 3.464358e-01, 3.464531e-01, 3.464704e-01, 3.464878e-01, 3.465051e-01, 3.465224e-01, 3.465397e-01, 3.465570e-01, 3.465743e-01, 3.465917e-01, 3.466090e-01, 3.466263e-01, 3.466436e-01, 3.466609e-01, 3.466782e-01, 3.466955e-01, 3.467128e-01, 3.467301e-01, 3.467474e-01, 3.467647e-01, 3.467821e-01, 3.467994e-01, 3.468167e-01, 3.468340e-01, 3.468513e-01, 3.468686e-01, 3.468859e-01, 3.469032e-01, 3.469205e-01, 3.469378e-01, 3.469552e-01, 3.469725e-01, 3.469898e-01, 3.470071e-01, 3.470244e-01, 3.470417e-01, 3.470590e-01, 3.470763e-01, 3.470936e-01, 3.471109e-01, 3.471282e-01, 3.471455e-01, 3.471628e-01, 3.471802e-01, 3.471974e-01, 3.472148e-01, 3.472321e-01, 3.472494e-01, 3.472667e-01, 3.472840e-01, 3.473013e-01, 3.473186e-01, 3.473359e-01, 3.473532e-01, 3.473705e-01, 3.473878e-01, 3.474051e-01, 3.474224e-01, 3.474397e-01, 3.474570e-01, 3.474743e-01, 3.474916e-01, 3.475089e-01, 3.475262e-01, 3.475435e-01, 3.475608e-01, 3.475781e-01, 3.475954e-01, 3.476127e-01, 3.476300e-01, 3.476473e-01, 3.476646e-01, 3.476819e-01, 3.476992e-01, 3.477165e-01, 3.477338e-01, 3.477511e-01, 3.477684e-01, 3.477857e-01, 3.478030e-01, 3.478203e-01, 3.478376e-01, 3.478549e-01, 3.478722e-01, 3.478895e-01, 3.479068e-01, 3.479241e-01, 3.479414e-01, 3.479587e-01, 3.479760e-01, 3.479933e-01, 3.480106e-01, 3.480279e-01, 3.480452e-01, 3.480625e-01, 3.480797e-01, 3.480970e-01, 3.481143e-01, 3.481316e-01, 3.481489e-01, 3.481662e-01, 3.481835e-01, 3.482008e-01, 3.482181e-01, 3.482354e-01, 3.482527e-01, 3.482700e-01, 3.482873e-01, 3.483045e-01, 3.483219e-01, 3.483391e-01, 3.483565e-01, 3.483737e-01, 3.483910e-01, 3.484083e-01, 3.484256e-01, 3.484429e-01, 3.484602e-01, 3.484775e-01, 3.484948e-01, 3.485121e-01, 3.485293e-01, 3.485467e-01, 3.485639e-01, 3.485812e-01, 3.485985e-01, 3.486158e-01, 3.486331e-01, 3.486504e-01, 3.486677e-01, 3.486849e-01, 3.487022e-01, 3.487195e-01, 3.487368e-01, 3.487541e-01, 3.487714e-01, 3.487886e-01, 3.488059e-01, 3.488232e-01, 3.488405e-01, 3.488578e-01, 3.488751e-01, 3.488924e-01, 3.489096e-01, 3.489269e-01, 3.489442e-01, 3.489615e-01, 3.489788e-01, 3.489961e-01, 3.490134e-01, 3.490306e-01, 3.490479e-01, 3.490652e-01, 3.490825e-01, 3.490998e-01, 3.491171e-01, 3.491344e-01, 3.491516e-01, 3.491689e-01, 3.491862e-01, 3.492035e-01, 3.492208e-01, 3.492380e-01, 3.492553e-01, 3.492726e-01, 3.492899e-01, 3.493071e-01, 3.493244e-01, 3.493417e-01, 3.493590e-01, 3.493763e-01, 3.493935e-01, 3.494108e-01, 3.494281e-01, 3.494454e-01, 3.494627e-01, 3.494799e-01, 3.494972e-01, 3.495145e-01, 3.495318e-01, 3.495490e-01, 3.495663e-01, 3.495836e-01, 3.496009e-01, 3.496182e-01, 3.496355e-01, 3.496527e-01, 3.496700e-01, 3.496872e-01, 3.497045e-01, 3.497218e-01, 3.497391e-01, 3.497564e-01, 3.497736e-01, 3.497909e-01, 3.498082e-01, 3.498255e-01, 3.498427e-01, 3.498600e-01, 3.498773e-01, 3.498946e-01, 3.499118e-01, 3.499291e-01, 3.499463e-01, 3.499636e-01, 3.499809e-01, 3.499982e-01, 3.500155e-01, 3.500327e-01, 3.500500e-01, 3.500673e-01, 3.500845e-01, 3.501018e-01, 3.501191e-01, 3.501363e-01, 3.501536e-01, 3.501709e-01, 3.501881e-01, 3.502054e-01, 3.502227e-01, 3.502400e-01, 3.502572e-01, 3.502745e-01, 3.502918e-01, 3.503090e-01, 3.503263e-01, 3.503436e-01, 3.503608e-01, 3.503781e-01, 3.503954e-01, 3.504126e-01, 3.504299e-01, 3.504472e-01, 3.504644e-01, 3.504817e-01, 3.504990e-01, 3.505163e-01, 3.505335e-01, 3.505508e-01, 3.505680e-01, 3.505853e-01, 3.506026e-01, 3.506198e-01, 3.506371e-01, 3.506544e-01, 3.506716e-01, 3.506889e-01, 3.507061e-01, 3.507234e-01, 3.507407e-01, 3.507579e-01, 3.507752e-01, 3.507925e-01, 3.508097e-01, 3.508270e-01, 3.508442e-01, 3.508615e-01, 3.508788e-01, 3.508960e-01, 3.509133e-01, 3.509305e-01, 3.509478e-01, 3.509651e-01, 3.509823e-01, 3.509996e-01, 3.510168e-01, 3.510341e-01, 3.510514e-01, 3.510686e-01, 3.510859e-01, 3.511031e-01, 3.511204e-01, 3.511377e-01, 3.511549e-01, 3.511722e-01, 3.511894e-01, 3.512067e-01, 3.512239e-01, 3.512412e-01, 3.512585e-01, 3.512757e-01, 3.512930e-01, 3.513102e-01, 3.513275e-01, 3.513448e-01, 3.513620e-01, 3.513792e-01, 3.513965e-01, 3.514138e-01, 3.514310e-01, 3.514483e-01, 3.514655e-01, 3.514828e-01, 3.515000e-01, 3.515173e-01, 3.515345e-01, 3.515518e-01, 3.515690e-01, 3.515863e-01, 3.516035e-01, 3.516208e-01, 3.516380e-01, 3.516553e-01, 3.516726e-01, 3.516898e-01, 3.517071e-01, 3.517243e-01, 3.517416e-01, 3.517588e-01, 3.517761e-01, 3.517933e-01, 3.518106e-01, 3.518278e-01, 3.518451e-01, 3.518623e-01, 3.518796e-01, 3.518968e-01, 3.519140e-01, 3.519313e-01, 3.519486e-01, 3.519658e-01, 3.519831e-01, 3.520003e-01, 3.520176e-01, 3.520348e-01, 3.520521e-01, 3.520693e-01, 3.520865e-01, 3.521038e-01, 3.521211e-01, 3.521383e-01, 3.521555e-01, 3.521728e-01, 3.521900e-01, 3.522073e-01, 3.522245e-01, 3.522418e-01, 3.522590e-01, 3.522762e-01, 3.522935e-01, 3.523107e-01, 3.523280e-01, 3.523452e-01, 3.523625e-01, 3.523797e-01, 3.523969e-01, 3.524142e-01, 3.524314e-01, 3.524487e-01, 3.524659e-01, 3.524832e-01, 3.525004e-01, 3.525177e-01, 3.525349e-01, 3.525521e-01, 3.525694e-01, 3.525866e-01, 3.526039e-01, 3.526211e-01, 3.526383e-01, 3.526556e-01, 3.526728e-01, 3.526900e-01, 3.527073e-01, 3.527245e-01, 3.527418e-01, 3.527590e-01, 3.527763e-01, 3.527935e-01, 3.528107e-01, 3.528280e-01, 3.528452e-01, 3.528624e-01, 3.528797e-01, 3.528969e-01, 3.529141e-01, 3.529314e-01, 3.529486e-01, 3.529659e-01, 3.529831e-01, 3.530003e-01, 3.530176e-01, 3.530348e-01, 3.530520e-01, 3.530693e-01, 3.530865e-01, 3.531038e-01, 3.531210e-01, 3.531382e-01, 3.531555e-01, 3.531727e-01, 3.531899e-01, 3.532071e-01, 3.532244e-01, 3.532416e-01, 3.532588e-01, 3.532761e-01, 3.532933e-01, 3.533105e-01, 3.533278e-01, 3.533450e-01, 3.533622e-01, 3.533795e-01, 3.533967e-01, 3.534139e-01, 3.534312e-01, 3.534484e-01, 3.534656e-01, 3.534828e-01, 3.535001e-01, 3.535173e-01, 3.535345e-01, 3.535518e-01, 3.535690e-01, 3.535862e-01, 3.536035e-01, 3.536207e-01, 3.536379e-01, 3.536552e-01, 3.536724e-01, 3.536896e-01, 3.537068e-01, 3.537241e-01, 3.537413e-01, 3.537585e-01, 3.537757e-01, 3.537929e-01, 3.538102e-01, 3.538274e-01, 3.538446e-01, 3.538618e-01, 3.538791e-01, 3.538963e-01, 3.539135e-01, 3.539307e-01, 3.539480e-01, 3.539652e-01, 3.539824e-01, 3.539996e-01, 3.540169e-01, 3.540341e-01, 3.540513e-01, 3.540685e-01, 3.540858e-01, 3.541030e-01, 3.541202e-01, 3.541375e-01, 3.541547e-01, 3.541719e-01, 3.541891e-01, 3.542063e-01, 3.542235e-01, 3.542408e-01, 3.542580e-01, 3.542752e-01, 3.542924e-01, 3.543096e-01, 3.543269e-01, 3.543441e-01, 3.543613e-01, 3.543785e-01, 3.543957e-01, 3.544130e-01, 3.544302e-01, 3.544474e-01, 3.544646e-01, 3.544818e-01, 3.544991e-01, 3.545163e-01, 3.545335e-01, 3.545507e-01, 3.545679e-01, 3.545851e-01, 3.546024e-01, 3.546196e-01, 3.546368e-01, 3.546540e-01, 3.546712e-01, 3.546884e-01, 3.547057e-01, 3.547229e-01, 3.547401e-01, 3.547573e-01, 3.547745e-01, 3.547917e-01, 3.548090e-01, 3.548262e-01, 3.548434e-01, 3.548606e-01, 3.548778e-01, 3.548950e-01, 3.549122e-01, 3.549294e-01, 3.549466e-01, 3.549639e-01, 3.549811e-01, 3.549983e-01, 3.550155e-01, 3.550327e-01, 3.550499e-01, 3.550671e-01, 3.550843e-01, 3.551016e-01, 3.551188e-01, 3.551360e-01, 3.551532e-01, 3.551704e-01, 3.551876e-01, 3.552048e-01, 3.552220e-01, 3.552392e-01, 3.552565e-01, 3.552737e-01, 3.552909e-01, 3.553081e-01, 3.553253e-01, 3.553425e-01, 3.553597e-01, 3.553769e-01, 3.553941e-01, 3.554113e-01, 3.554285e-01, 3.554457e-01, 3.554629e-01, 3.554801e-01, 3.554974e-01, 3.555146e-01, 3.555318e-01, 3.555490e-01, 3.555662e-01, 3.555834e-01, 3.556006e-01, 3.556178e-01, 3.556350e-01, 3.556522e-01, 3.556694e-01, 3.556866e-01, 3.557038e-01, 3.557210e-01, 3.557382e-01, 3.557554e-01, 3.557726e-01, 3.557898e-01, 3.558070e-01, 3.558242e-01, 3.558414e-01, 3.558586e-01, 3.558758e-01, 3.558930e-01, 3.559102e-01, 3.559274e-01, 3.559446e-01, 3.559618e-01, 3.559791e-01, 3.559963e-01, 3.560134e-01, 3.560306e-01, 3.560478e-01, 3.560650e-01, 3.560822e-01, 3.560994e-01, 3.561166e-01, 3.561338e-01, 3.561510e-01, 3.561682e-01, 3.561854e-01, 3.562026e-01, 3.562198e-01, 3.562370e-01, 3.562542e-01, 3.562714e-01, 3.562886e-01, 3.563058e-01, 3.563230e-01, 3.563402e-01, 3.563574e-01, 3.563746e-01, 3.563918e-01, 3.564090e-01, 3.564262e-01, 3.564434e-01, 3.564606e-01, 3.564778e-01, 3.564949e-01, 3.565122e-01, 3.565294e-01, 3.565466e-01, 3.565637e-01, 3.565809e-01, 3.565981e-01, 3.566153e-01, 3.566325e-01, 3.566497e-01, 3.566669e-01, 3.566841e-01, 3.567013e-01, 3.567185e-01, 3.567356e-01, 3.567528e-01, 3.567700e-01, 3.567872e-01, 3.568044e-01, 3.568216e-01, 3.568388e-01, 3.568560e-01, 3.568732e-01, 3.568904e-01, 3.569075e-01, 3.569247e-01, 3.569419e-01, 3.569591e-01, 3.569763e-01, 3.569935e-01, 3.570107e-01, 3.570279e-01, 3.570451e-01, 3.570623e-01, 3.570794e-01, 3.570966e-01, 3.571138e-01, 3.571310e-01, 3.571482e-01, 3.571654e-01, 3.571826e-01, 3.571997e-01, 3.572169e-01, 3.572341e-01, 3.572513e-01, 3.572685e-01, 3.572856e-01, 3.573028e-01, 3.573200e-01, 3.573372e-01, 3.573544e-01, 3.573716e-01, 3.573888e-01, 3.574060e-01, 3.574231e-01, 3.574403e-01, 3.574575e-01, 3.574747e-01, 3.574919e-01, 3.575090e-01, 3.575262e-01, 3.575434e-01, 3.575606e-01, 3.575778e-01, 3.575949e-01, 3.576121e-01, 3.576293e-01, 3.576465e-01, 3.576637e-01, 3.576809e-01, 3.576980e-01, 3.577152e-01, 3.577324e-01, 3.577496e-01, 3.577667e-01, 3.577839e-01, 3.578011e-01, 3.578183e-01, 3.578355e-01, 3.578526e-01, 3.578698e-01, 3.578870e-01, 3.579042e-01, 3.579214e-01, 3.579385e-01, 3.579557e-01, 3.579729e-01, 3.579901e-01, 3.580072e-01, 3.580244e-01, 3.580416e-01, 3.580588e-01, 3.580759e-01, 3.580931e-01, 3.581103e-01, 3.581275e-01, 3.581446e-01, 3.581618e-01, 3.581790e-01, 3.581962e-01, 3.582133e-01, 3.582305e-01, 3.582477e-01, 3.582649e-01, 3.582820e-01, 3.582992e-01, 3.583164e-01, 3.583336e-01, 3.583507e-01, 3.583679e-01, 3.583851e-01, 3.584022e-01, 3.584194e-01, 3.584366e-01, 3.584538e-01, 3.584709e-01, 3.584881e-01, 3.585052e-01, 3.585224e-01, 3.585396e-01, 3.585567e-01, 3.585739e-01, 3.585911e-01, 3.586083e-01, 3.586254e-01, 3.586426e-01, 3.586598e-01, 3.586769e-01, 3.586941e-01, 3.587113e-01, 3.587285e-01, 3.587456e-01, 3.587628e-01, 3.587799e-01, 3.587971e-01, 3.588143e-01, 3.588315e-01, 3.588486e-01, 3.588658e-01, 3.588829e-01, 3.589001e-01, 3.589173e-01, 3.589345e-01, 3.589516e-01, 3.589688e-01, 3.589859e-01, 3.590031e-01, 3.590203e-01, 3.590374e-01, 3.590546e-01, 3.590718e-01, 3.590889e-01, 3.591061e-01, 3.591233e-01, 3.591404e-01, 3.591576e-01, 3.591747e-01, 3.591919e-01, 3.592091e-01, 3.592262e-01, 3.592434e-01, 3.592606e-01, 3.592777e-01, 3.592949e-01, 3.593120e-01, 3.593292e-01, 3.593464e-01, 3.593635e-01, 3.593807e-01, 3.593978e-01, 3.594150e-01, 3.594322e-01, 3.594493e-01, 3.594665e-01, 3.594836e-01, 3.595008e-01, 3.595180e-01, 3.595351e-01, 3.595523e-01, 3.595694e-01, 3.595866e-01, 3.596037e-01, 3.596209e-01, 3.596380e-01, 3.596552e-01, 3.596724e-01, 3.596895e-01, 3.597067e-01, 3.597238e-01, 3.597410e-01, 3.597581e-01, 3.597753e-01, 3.597924e-01, 3.598096e-01, 3.598268e-01, 3.598439e-01, 3.598610e-01, 3.598782e-01, 3.598954e-01, 3.599125e-01, 3.599297e-01, 3.599468e-01, 3.599640e-01, 3.599811e-01, 3.599983e-01, 3.600155e-01, 3.600326e-01, 3.600498e-01, 3.600669e-01, 3.600841e-01, 3.601012e-01, 3.601183e-01, 3.601355e-01, 3.601527e-01, 3.601698e-01, 3.601870e-01, 3.602041e-01, 3.602212e-01, 3.602384e-01, 3.602556e-01, 3.602727e-01, 3.602898e-01, 3.603070e-01, 3.603241e-01, 3.603413e-01, 3.603584e-01, 3.603756e-01, 3.603927e-01, 3.604099e-01, 3.604270e-01, 3.604442e-01, 3.604613e-01, 3.604785e-01, 3.604956e-01, 3.605128e-01, 3.605299e-01, 3.605471e-01, 3.605642e-01, 3.605814e-01, 3.605985e-01, 3.606156e-01, 3.606328e-01, 3.606499e-01, 3.606671e-01, 3.606842e-01, 3.607014e-01, 3.607185e-01, 3.607357e-01, 3.607528e-01, 3.607699e-01, 3.607871e-01, 3.608042e-01, 3.608214e-01, 3.608385e-01, 3.608557e-01, 3.608728e-01, 3.608899e-01, 3.609071e-01, 3.609242e-01, 3.609414e-01, 3.609585e-01, 3.609756e-01, 3.609928e-01, 3.610100e-01, 3.610271e-01, 3.610442e-01, 3.610614e-01, 3.610785e-01, 3.610956e-01, 3.611127e-01, 3.611299e-01, 3.611470e-01, 3.611642e-01, 3.611813e-01, 3.611985e-01, 3.612156e-01, 3.612328e-01, 3.612499e-01, 3.612670e-01, 3.612841e-01, 3.613013e-01, 3.613184e-01, 3.613355e-01, 3.613527e-01, 3.613698e-01, 3.613870e-01, 3.614041e-01, 3.614212e-01, 3.614384e-01, 3.614555e-01, 3.614727e-01, 3.614898e-01, 3.615069e-01, 3.615240e-01, 3.615412e-01, 3.615583e-01, 3.615755e-01, 3.615926e-01, 3.616097e-01, 3.616268e-01, 3.616440e-01, 3.616611e-01, 3.616782e-01, 3.616954e-01, 3.617125e-01, 3.617297e-01, 3.617468e-01, 3.617639e-01, 3.617810e-01, 3.617982e-01, 3.618153e-01, 3.618324e-01, 3.618496e-01, 3.618667e-01, 3.618838e-01, 3.619010e-01, 3.619181e-01, 3.619352e-01, 3.619523e-01, 3.619695e-01, 3.619866e-01, 3.620037e-01, 3.620209e-01, 3.620380e-01, 3.620551e-01, 3.620722e-01, 3.620893e-01, 3.621065e-01, 3.621236e-01, 3.621407e-01, 3.621579e-01, 3.621750e-01, 3.621921e-01, 3.622093e-01, 3.622264e-01, 3.622435e-01, 3.622606e-01, 3.622777e-01, 3.622949e-01, 3.623120e-01, 3.623291e-01, 3.623463e-01, 3.623634e-01, 3.623805e-01, 3.623976e-01, 3.624147e-01, 3.624319e-01, 3.624490e-01, 3.624661e-01, 3.624832e-01, 3.625004e-01, 3.625175e-01, 3.625346e-01, 3.625517e-01, 3.625688e-01, 3.625860e-01, 3.626031e-01, 3.626202e-01, 3.626373e-01, 3.626545e-01, 3.626716e-01, 3.626887e-01, 3.627058e-01, 3.627229e-01, 3.627400e-01, 3.627572e-01, 3.627743e-01, 3.627914e-01, 3.628085e-01, 3.628257e-01, 3.628428e-01, 3.628599e-01, 3.628770e-01, 3.628941e-01, 3.629113e-01, 3.629284e-01, 3.629455e-01, 3.629626e-01, 3.629797e-01, 3.629968e-01, 3.630140e-01, 3.630311e-01, 3.630482e-01, 3.630653e-01, 3.630824e-01, 3.630995e-01, 3.631167e-01, 3.631338e-01, 3.631509e-01, 3.631680e-01, 3.631851e-01, 3.632022e-01, 3.632193e-01, 3.632365e-01, 3.632536e-01, 3.632707e-01, 3.632878e-01, 3.633049e-01, 3.633220e-01, 3.633392e-01, 3.633563e-01, 3.633734e-01, 3.633905e-01, 3.634076e-01, 3.634247e-01, 3.634418e-01, 3.634589e-01, 3.634760e-01, 3.634931e-01, 3.635103e-01, 3.635274e-01, 3.635445e-01, 3.635616e-01, 3.635787e-01, 3.635958e-01, 3.636129e-01, 3.636300e-01, 3.636471e-01, 3.636642e-01, 3.636813e-01, 3.636985e-01, 3.637156e-01, 3.637327e-01, 3.637498e-01, 3.637669e-01, 3.637840e-01, 3.638011e-01, 3.638182e-01, 3.638353e-01, 3.638524e-01, 3.638695e-01, 3.638867e-01, 3.639037e-01, 3.639208e-01, 3.639379e-01, 3.639551e-01, 3.639722e-01, 3.639893e-01, 3.640063e-01, 3.640235e-01, 3.640406e-01, 3.640577e-01, 3.640748e-01, 3.640919e-01, 3.641090e-01, 3.641261e-01, 3.641432e-01, 3.641603e-01, 3.641774e-01, 3.641945e-01, 3.642116e-01, 3.642287e-01, 3.642458e-01, 3.642629e-01, 3.642800e-01, 3.642971e-01, 3.643143e-01, 3.643313e-01, 3.643484e-01, 3.643655e-01, 3.643827e-01, 3.643997e-01, 3.644168e-01, 3.644339e-01, 3.644510e-01, 3.644681e-01, 3.644852e-01, 3.645023e-01, 3.645194e-01, 3.645365e-01, 3.645536e-01, 3.645707e-01, 3.645878e-01, 3.646049e-01, 3.646220e-01, 3.646391e-01, 3.646562e-01, 3.646733e-01, 3.646904e-01, 3.647075e-01, 3.647246e-01, 3.647417e-01, 3.647588e-01, 3.647759e-01, 3.647930e-01, 3.648101e-01, 3.648272e-01, 3.648443e-01, 3.648614e-01, 3.648784e-01, 3.648956e-01, 3.649127e-01, 3.649297e-01, 3.649468e-01, 3.649639e-01, 3.649810e-01, 3.649981e-01, 3.650152e-01, 3.650323e-01, 3.650494e-01, 3.650665e-01, 3.650836e-01, 3.651007e-01, 3.651178e-01, 3.651349e-01, 3.651519e-01, 3.651690e-01, 3.651861e-01, 3.652032e-01, 3.652203e-01, 3.652374e-01, 3.652545e-01, 3.652716e-01, 3.652886e-01, 3.653058e-01, 3.653228e-01, 3.653399e-01, 3.653570e-01, 3.653741e-01, 3.653912e-01, 3.654083e-01, 3.654254e-01, 3.654425e-01, 3.654596e-01, 3.654766e-01, 3.654937e-01, 3.655108e-01, 3.655279e-01, 3.655450e-01, 3.655621e-01, 3.655792e-01, 3.655962e-01, 3.656133e-01, 3.656304e-01, 3.656475e-01, 3.656646e-01, 3.656817e-01, 3.656988e-01, 3.657159e-01, 3.657329e-01, 3.657500e-01, 3.657671e-01, 3.657842e-01, 3.658012e-01, 3.658184e-01, 3.658354e-01, 3.658525e-01, 3.658696e-01, 3.658867e-01, 3.659038e-01, 3.659208e-01, 3.659379e-01, 3.659550e-01, 3.659721e-01, 3.659892e-01, 3.660063e-01, 3.660233e-01, 3.660404e-01, 3.660575e-01, 3.660746e-01, 3.660916e-01, 3.661087e-01, 3.661258e-01, 3.661429e-01, 3.661600e-01, 3.661770e-01, 3.661942e-01, 3.662112e-01, 3.662283e-01, 3.662454e-01, 3.662624e-01, 3.662795e-01, 3.662966e-01, 3.663137e-01, 3.663307e-01, 3.663478e-01, 3.663649e-01, 3.663820e-01, 3.663990e-01, 3.664161e-01, 3.664332e-01, 3.664503e-01, 3.664674e-01, 3.664845e-01, 3.665015e-01, 3.665186e-01, 3.665357e-01, 3.665527e-01, 3.665698e-01, 3.665869e-01, 3.666040e-01, 3.666210e-01, 3.666381e-01, 3.666552e-01, 3.666722e-01, 3.666893e-01, 3.667064e-01, 3.667235e-01, 3.667405e-01, 3.667576e-01, 3.667747e-01, 3.667918e-01, 3.668089e-01, 3.668259e-01, 3.668430e-01, 3.668601e-01, 3.668771e-01, 3.668942e-01, 3.669113e-01, 3.669283e-01, 3.669454e-01, 3.669625e-01, 3.669795e-01, 3.669966e-01, 3.670137e-01, 3.670307e-01, 3.670478e-01, 3.670649e-01, 3.670820e-01, 3.670990e-01, 3.671161e-01, 3.671332e-01, 3.671502e-01, 3.671673e-01, 3.671844e-01, 3.672014e-01, 3.672185e-01, 3.672355e-01, 3.672526e-01, 3.672697e-01, 3.672867e-01, 3.673038e-01, 3.673209e-01, 3.673380e-01, 3.673550e-01, 3.673721e-01, 3.673892e-01, 3.674062e-01, 3.674233e-01, 3.674403e-01, 3.674574e-01, 3.674745e-01, 3.674915e-01, 3.675086e-01, 3.675257e-01, 3.675427e-01, 3.675598e-01, 3.675768e-01, 3.675939e-01, 3.676110e-01, 3.676280e-01, 3.676451e-01, 3.676621e-01, 3.676792e-01, 3.676963e-01, 3.677134e-01, 3.677304e-01, 3.677475e-01, 3.677645e-01, 3.677816e-01, 3.677987e-01, 3.678157e-01, 3.678328e-01, 3.678498e-01, 3.678669e-01, 3.678840e-01, 3.679010e-01, 3.679180e-01, 3.679351e-01, 3.679522e-01, 3.679692e-01, 3.679863e-01, 3.680034e-01, 3.680204e-01, 3.680375e-01, 3.680545e-01, 3.680716e-01, 3.680886e-01, 3.681057e-01, 3.681228e-01, 3.681398e-01, 3.681569e-01, 3.681739e-01, 3.681910e-01, 3.682080e-01, 3.682251e-01, 3.682421e-01, 3.682592e-01, 3.682762e-01, 3.682933e-01, 3.683104e-01, 3.683274e-01, 3.683445e-01, 3.683615e-01, 3.683786e-01, 3.683956e-01, 3.684127e-01, 3.684298e-01, 3.684468e-01, 3.684638e-01, 3.684809e-01, 3.684979e-01, 3.685150e-01, 3.685320e-01, 3.685491e-01, 3.685661e-01, 3.685832e-01, 3.686002e-01, 3.686173e-01, 3.686343e-01, 3.686514e-01, 3.686685e-01, 3.686855e-01, 3.687026e-01, 3.687196e-01, 3.687367e-01, 3.687537e-01, 3.687707e-01, 3.687878e-01, 3.688048e-01, 3.688219e-01, 3.688389e-01, 3.688560e-01, 3.688730e-01, 3.688900e-01, 3.689071e-01, 3.689241e-01, 3.689412e-01, 3.689582e-01, 3.689753e-01, 3.689924e-01, 3.690094e-01, 3.690265e-01, 3.690435e-01, 3.690605e-01, 3.690776e-01, 3.690946e-01, 3.691117e-01, 3.691287e-01, 3.691458e-01, 3.691628e-01, 3.691798e-01, 3.691969e-01, 3.692139e-01, 3.692310e-01, 3.692480e-01, 3.692651e-01, 3.692821e-01, 3.692991e-01, 3.693162e-01, 3.693332e-01, 3.693503e-01, 3.693673e-01, 3.693843e-01, 3.694014e-01, 3.694184e-01, 3.694355e-01, 3.694525e-01, 3.694696e-01, 3.694866e-01, 3.695036e-01, 3.695207e-01, 3.695377e-01, 3.695547e-01, 3.695718e-01, 3.695888e-01, 3.696058e-01, 3.696229e-01, 3.696399e-01, 3.696570e-01, 3.696740e-01, 3.696911e-01, 3.697081e-01, 3.697251e-01, 3.697422e-01, 3.697592e-01, 3.697762e-01, 3.697933e-01, 3.698103e-01, 3.698274e-01, 3.698444e-01, 3.698614e-01, 3.698784e-01, 3.698955e-01, 3.699125e-01, 3.699296e-01, 3.699466e-01, 3.699636e-01, 3.699806e-01, 3.699977e-01, 3.700147e-01, 3.700318e-01, 3.700488e-01, 3.700658e-01, 3.700829e-01, 3.700999e-01, 3.701169e-01, 3.701340e-01, 3.701510e-01, 3.701680e-01, 3.701850e-01, 3.702021e-01, 3.702191e-01, 3.702362e-01, 3.702532e-01, 3.702702e-01, 3.702872e-01, 3.703043e-01, 3.703213e-01, 3.703383e-01, 3.703553e-01, 3.703724e-01, 3.703894e-01, 3.704065e-01, 3.704235e-01, 3.704405e-01, 3.704576e-01, 3.704746e-01, 3.704916e-01, 3.705086e-01, 3.705257e-01, 3.705427e-01, 3.705597e-01, 3.705767e-01, 3.705938e-01, 3.706108e-01, 3.706278e-01, 3.706448e-01, 3.706619e-01, 3.706789e-01, 3.706959e-01, 3.707129e-01, 3.707300e-01, 3.707470e-01, 3.707640e-01, 3.707811e-01, 3.707981e-01, 3.708151e-01, 3.708321e-01, 3.708492e-01, 3.708662e-01, 3.708832e-01, 3.709002e-01, 3.709172e-01, 3.709342e-01, 3.709513e-01, 3.709683e-01, 3.709853e-01, 3.710023e-01, 3.710194e-01, 3.710364e-01, 3.710534e-01, 3.710704e-01, 3.710874e-01, 3.711045e-01, 3.711215e-01, 3.711385e-01, 3.711555e-01, 3.711726e-01, 3.711896e-01, 3.712066e-01, 3.712236e-01, 3.712406e-01, 3.712577e-01, 3.712747e-01, 3.712917e-01, 3.713087e-01, 3.713257e-01, 3.713427e-01, 3.713598e-01, 3.713768e-01, 3.713938e-01, 3.714108e-01, 3.714278e-01, 3.714449e-01, 3.714619e-01, 3.714789e-01, 3.714959e-01, 3.715129e-01, 3.715299e-01, 3.715469e-01, 3.715640e-01, 3.715810e-01, 3.715980e-01, 3.716150e-01, 3.716320e-01, 3.716491e-01, 3.716661e-01, 3.716831e-01, 3.717001e-01, 3.717171e-01, 3.717341e-01, 3.717511e-01, 3.717681e-01, 3.717851e-01, 3.718022e-01, 3.718192e-01, 3.718362e-01, 3.718532e-01, 3.718702e-01, 3.718872e-01, 3.719042e-01, 3.719212e-01, 3.719382e-01, 3.719553e-01, 3.719723e-01, 3.719893e-01, 3.720063e-01, 3.720233e-01, 3.720403e-01, 3.720573e-01, 3.720743e-01, 3.720914e-01, 3.721084e-01, 3.721254e-01, 3.721424e-01, 3.721594e-01, 3.721764e-01, 3.721934e-01, 3.722104e-01, 3.722274e-01, 3.722444e-01, 3.722614e-01, 3.722784e-01, 3.722954e-01, 3.723125e-01, 3.723294e-01, 3.723465e-01, 3.723634e-01, 3.723805e-01, 3.723975e-01, 3.724145e-01, 3.724315e-01, 3.724485e-01, 3.724655e-01, 3.724825e-01, 3.724995e-01, 3.725165e-01, 3.725335e-01, 3.725505e-01, 3.725675e-01, 3.725846e-01, 3.726015e-01, 3.726186e-01, 3.726355e-01, 3.726525e-01, 3.726695e-01, 3.726865e-01, 3.727036e-01, 3.727205e-01, 3.727376e-01, 3.727545e-01, 3.727715e-01, 3.727885e-01, 3.728055e-01, 3.728226e-01, 3.728395e-01, 3.728566e-01, 3.728736e-01, 3.728905e-01, 3.729076e-01, 3.729246e-01, 3.729416e-01, 3.729586e-01, 3.729756e-01, 3.729926e-01, 3.730096e-01, 3.730265e-01, 3.730436e-01, 3.730606e-01, 3.730775e-01, 3.730946e-01, 3.731115e-01, 3.731285e-01, 3.731456e-01, 3.731625e-01, 3.731795e-01, 3.731965e-01, 3.732135e-01, 3.732305e-01, 3.732475e-01, 3.732645e-01, 3.732815e-01, 3.732985e-01, 3.733155e-01, 3.733325e-01, 3.733495e-01, 3.733665e-01, 3.733835e-01, 3.734005e-01, 3.734175e-01, 3.734345e-01, 3.734514e-01, 3.734685e-01, 3.734854e-01, 3.735024e-01, 3.735194e-01, 3.735364e-01, 3.735534e-01, 3.735704e-01, 3.735874e-01, 3.736044e-01, 3.736213e-01, 3.736384e-01, 3.736553e-01, 3.736723e-01, 3.736893e-01, 3.737063e-01, 3.737233e-01, 3.737403e-01, 3.737573e-01, 3.737743e-01, 3.737913e-01, 3.738082e-01, 3.738252e-01, 3.738422e-01, 3.738592e-01, 3.738762e-01, 3.738932e-01, 3.739102e-01, 3.739272e-01, 3.739442e-01, 3.739612e-01, 3.739781e-01, 3.739951e-01, 3.740121e-01, 3.740291e-01, 3.740461e-01, 3.740631e-01, 3.740801e-01, 3.740970e-01, 3.741140e-01, 3.741310e-01, 3.741480e-01, 3.741650e-01, 3.741820e-01, 3.741989e-01, 3.742159e-01, 3.742329e-01, 3.742499e-01, 3.742669e-01, 3.742839e-01, 3.743008e-01, 3.743178e-01, 3.743348e-01, 3.743518e-01, 3.743688e-01, 3.743858e-01, 3.744028e-01, 3.744197e-01, 3.744367e-01, 3.744537e-01, 3.744707e-01, 3.744877e-01, 3.745047e-01, 3.745216e-01, 3.745386e-01, 3.745556e-01, 3.745725e-01, 3.745895e-01, 3.746065e-01, 3.746235e-01, 3.746405e-01, 3.746575e-01, 3.746744e-01, 3.746914e-01, 3.747084e-01, 3.747254e-01, 3.747423e-01, 3.747593e-01, 3.747763e-01, 3.747933e-01, 3.748102e-01, 3.748272e-01, 3.748442e-01, 3.748612e-01, 3.748781e-01, 3.748951e-01, 3.749121e-01, 3.749291e-01, 3.749461e-01, 3.749630e-01, 3.749800e-01, 3.749970e-01, 3.750140e-01, 3.750310e-01, 3.750479e-01, 3.750649e-01, 3.750819e-01, 3.750989e-01, 3.751158e-01, 3.751328e-01, 3.751498e-01, 3.751667e-01, 3.751837e-01, 3.752007e-01, 3.752176e-01, 3.752346e-01, 3.752516e-01, 3.752685e-01, 3.752855e-01, 3.753025e-01, 3.753195e-01, 3.753364e-01, 3.753534e-01, 3.753704e-01, 3.753873e-01, 3.754043e-01, 3.754213e-01, 3.754382e-01, 3.754552e-01, 3.754722e-01, 3.754892e-01, 3.755061e-01, 3.755231e-01, 3.755401e-01, 3.755571e-01, 3.755740e-01, 3.755910e-01, 3.756080e-01, 3.756250e-01, 3.756419e-01, 3.756589e-01, 3.756759e-01, 3.756928e-01, 3.757098e-01, 3.757267e-01, 3.757437e-01, 3.757607e-01, 3.757776e-01, 3.757946e-01, 3.758115e-01, 3.758285e-01, 3.758455e-01, 3.758624e-01, 3.758794e-01, 3.758964e-01, 3.759134e-01, 3.759303e-01, 3.759473e-01, 3.759643e-01, 3.759812e-01, 3.759982e-01, 3.760151e-01, 3.760321e-01, 3.760490e-01, 3.760660e-01, 3.760830e-01, 3.760999e-01, 3.761169e-01, 3.761339e-01, 3.761508e-01, 3.761678e-01, 3.761847e-01, 3.762017e-01, 3.762187e-01, 3.762357e-01, 3.762526e-01, 3.762696e-01, 3.762865e-01, 3.763035e-01, 3.763205e-01, 3.763374e-01, 3.763544e-01, 3.763713e-01, 3.763883e-01, 3.764052e-01, 3.764222e-01, 3.764392e-01, 3.764561e-01, 3.764731e-01, 3.764900e-01, 3.765070e-01, 3.765239e-01, 3.765409e-01, 3.765579e-01, 3.765748e-01, 3.765917e-01, 3.766087e-01, 3.766257e-01, 3.766426e-01, 3.766596e-01, 3.766765e-01, 3.766935e-01, 3.767104e-01, 3.767274e-01, 3.767444e-01, 3.767613e-01, 3.767782e-01, 3.767952e-01, 3.768122e-01, 3.768291e-01, 3.768461e-01, 3.768630e-01, 3.768800e-01, 3.768969e-01, 3.769139e-01, 3.769309e-01, 3.769478e-01, 3.769647e-01, 3.769817e-01, 3.769987e-01, 3.770156e-01, 3.770325e-01, 3.770495e-01, 3.770665e-01, 3.770834e-01, 3.771003e-01, 3.771173e-01, 3.771343e-01, 3.771512e-01, 3.771681e-01, 3.771851e-01, 3.772021e-01, 3.772190e-01, 3.772359e-01, 3.772529e-01, 3.772699e-01, 3.772868e-01, 3.773037e-01, 3.773207e-01, 3.773376e-01, 3.773546e-01, 3.773715e-01, 3.773885e-01, 3.774054e-01, 3.774224e-01, 3.774393e-01, 3.774562e-01, 3.774732e-01, 3.774902e-01, 3.775071e-01, 3.775240e-01, 3.775410e-01, 3.775579e-01, 3.775749e-01, 3.775918e-01, 3.776088e-01, 3.776257e-01, 3.776426e-01, 3.776596e-01, 3.776766e-01, 3.776935e-01, 3.777104e-01, 3.777274e-01, 3.777443e-01, 3.777613e-01, 3.777782e-01, 3.777952e-01, 3.778121e-01, 3.778290e-01, 3.778460e-01, 3.778629e-01, 3.778799e-01, 3.778968e-01, 3.779137e-01, 3.779307e-01, 3.779476e-01, 3.779646e-01, 3.779815e-01, 3.779984e-01, 3.780154e-01, 3.780323e-01, 3.780493e-01, 3.780662e-01, 3.780831e-01, 3.781001e-01, 3.781170e-01, 3.781340e-01, 3.781509e-01, 3.781678e-01, 3.781848e-01, 3.782017e-01, 3.782187e-01, 3.782356e-01, 3.782525e-01, 3.782694e-01, 3.782864e-01, 3.783033e-01, 3.783202e-01, 3.783372e-01, 3.783541e-01, 3.783711e-01, 3.783880e-01, 3.784049e-01, 3.784218e-01, 3.784388e-01, 3.784557e-01, 3.784727e-01, 3.784896e-01, 3.785065e-01, 3.785235e-01, 3.785404e-01, 3.785573e-01, 3.785743e-01, 3.785912e-01, 3.786082e-01, 3.786251e-01, 3.786420e-01, 3.786589e-01, 3.786759e-01, 3.786928e-01, 3.787098e-01, 3.787267e-01, 3.787436e-01, 3.787605e-01, 3.787775e-01, 3.787944e-01, 3.788113e-01, 3.788283e-01, 3.788452e-01, 3.788621e-01, 3.788790e-01, 3.788960e-01, 3.789129e-01, 3.789298e-01, 3.789468e-01, 3.789637e-01, 3.789806e-01, 3.789975e-01, 3.790145e-01, 3.790314e-01, 3.790483e-01, 3.790652e-01, 3.790822e-01, 3.790991e-01, 3.791160e-01, 3.791330e-01, 3.791499e-01, 3.791668e-01, 3.791837e-01, 3.792007e-01, 3.792176e-01, 3.792345e-01, 3.792515e-01, 3.792683e-01, 3.792853e-01, 3.793022e-01, 3.793191e-01, 3.793361e-01, 3.793530e-01, 3.793699e-01, 3.793868e-01, 3.794037e-01, 3.794207e-01, 3.794376e-01, 3.794545e-01, 3.794715e-01, 3.794883e-01, 3.795053e-01, 3.795222e-01, 3.795391e-01, 3.795560e-01, 3.795730e-01, 3.795899e-01, 3.796068e-01, 3.796237e-01, 3.796406e-01, 3.796576e-01, 3.796745e-01, 3.796914e-01, 3.797083e-01, 3.797253e-01, 3.797422e-01, 3.797591e-01, 3.797760e-01, 3.797929e-01, 3.798098e-01, 3.798268e-01, 3.798437e-01, 3.798606e-01, 3.798775e-01, 3.798945e-01, 3.799114e-01, 3.799283e-01, 3.799452e-01, 3.799621e-01, 3.799790e-01, 3.799959e-01, 3.800129e-01, 3.800298e-01, 3.800467e-01, 3.800636e-01, 3.800806e-01, 3.800974e-01, 3.801143e-01, 3.801313e-01, 3.801482e-01, 3.801651e-01, 3.801820e-01, 3.801989e-01, 3.802159e-01, 3.802328e-01, 3.802497e-01, 3.802666e-01, 3.802835e-01, 3.803004e-01, 3.803173e-01, 3.803342e-01, 3.803512e-01, 3.803681e-01, 3.803850e-01, 3.804019e-01, 3.804188e-01, 3.804357e-01, 3.804526e-01, 3.804695e-01, 3.804864e-01, 3.805034e-01, 3.805203e-01, 3.805372e-01, 3.805541e-01, 3.805710e-01, 3.805879e-01, 3.806048e-01, 3.806217e-01, 3.806386e-01, 3.806555e-01, 3.806724e-01, 3.806894e-01, 3.807063e-01, 3.807231e-01, 3.807400e-01, 3.807570e-01, 3.807739e-01, 3.807908e-01, 3.808077e-01, 3.808246e-01, 3.808415e-01, 3.808584e-01, 3.808753e-01, 3.808922e-01, 3.809091e-01, 3.809260e-01, 3.809429e-01, 3.809598e-01, 3.809767e-01, 3.809936e-01, 3.810106e-01, 3.810275e-01, 3.810444e-01, 3.810613e-01, 3.810782e-01, 3.810951e-01, 3.811119e-01, 3.811289e-01, 3.811458e-01, 3.811627e-01, 3.811796e-01, 3.811965e-01, 3.812134e-01, 3.812303e-01, 3.812472e-01, 3.812641e-01, 3.812810e-01, 3.812979e-01, 3.813148e-01, 3.813317e-01, 3.813486e-01, 3.813655e-01, 3.813824e-01, 3.813993e-01, 3.814162e-01, 3.814331e-01, 3.814500e-01, 3.814669e-01, 3.814838e-01, 3.815007e-01, 3.815176e-01, 3.815345e-01, 3.815514e-01, 3.815683e-01, 3.815852e-01, 3.816021e-01, 3.816190e-01, 3.816359e-01, 3.816528e-01, 3.816697e-01, 3.816866e-01, 3.817035e-01, 3.817204e-01, 3.817373e-01, 3.817542e-01, 3.817710e-01, 3.817879e-01, 3.818048e-01, 3.818217e-01, 3.818386e-01, 3.818555e-01, 3.818724e-01, 3.818893e-01, 3.819062e-01, 3.819231e-01, 3.819400e-01, 3.819569e-01, 3.819738e-01, 3.819907e-01, 3.820076e-01, 3.820245e-01, 3.820414e-01, 3.820583e-01, 3.820752e-01, 3.820921e-01, 3.821090e-01, 3.821258e-01, 3.821427e-01, 3.821596e-01, 3.821765e-01, 3.821934e-01, 3.822103e-01, 3.822272e-01, 3.822441e-01, 3.822609e-01, 3.822778e-01, 3.822947e-01, 3.823116e-01, 3.823285e-01, 3.823454e-01, 3.823623e-01, 3.823792e-01, 3.823961e-01, 3.824129e-01, 3.824298e-01, 3.824467e-01, 3.824636e-01, 3.824805e-01, 3.824974e-01, 3.825143e-01, 3.825312e-01, 3.825480e-01, 3.825649e-01, 3.825818e-01, 3.825987e-01, 3.826156e-01, 3.826325e-01, 3.826494e-01, 3.826663e-01, 3.826831e-01, 3.827000e-01, 3.827169e-01, 3.827338e-01, 3.827507e-01, 3.827676e-01, 3.827844e-01, 3.828013e-01, 3.828182e-01, 3.828351e-01, 3.828520e-01, 3.828689e-01, 3.828857e-01, 3.829026e-01, 3.829195e-01, 3.829364e-01, 3.829533e-01, 3.829702e-01, 3.829870e-01, 3.830039e-01, 3.830208e-01, 3.830377e-01, 3.830546e-01, 3.830714e-01, 3.830883e-01, 3.831052e-01, 3.831221e-01, 3.831390e-01, 3.831558e-01, 3.831727e-01, 3.831896e-01, 3.832065e-01, 3.832234e-01, 3.832402e-01, 3.832571e-01, 3.832740e-01, 3.832909e-01, 3.833077e-01, 3.833246e-01, 3.833415e-01, 3.833584e-01, 3.833753e-01, 3.833921e-01, 3.834090e-01, 3.834259e-01, 3.834428e-01, 3.834596e-01, 3.834765e-01, 3.834934e-01, 3.835103e-01, 3.835271e-01, 3.835440e-01, 3.835609e-01, 3.835777e-01, 3.835946e-01, 3.836115e-01, 3.836284e-01, 3.836452e-01, 3.836621e-01, 3.836790e-01, 3.836959e-01, 3.837127e-01, 3.837296e-01, 3.837465e-01, 3.837633e-01, 3.837802e-01, 3.837971e-01, 3.838140e-01, 3.838308e-01, 3.838477e-01, 3.838646e-01, 3.838814e-01, 3.838983e-01, 3.839152e-01, 3.839321e-01, 3.839490e-01, 3.839658e-01, 3.839827e-01, 3.839996e-01, 3.840164e-01, 3.840333e-01, 3.840502e-01, 3.840670e-01, 3.840839e-01, 3.841008e-01, 3.841176e-01, 3.841345e-01, 3.841514e-01, 3.841682e-01, 3.841851e-01, 3.842020e-01, 3.842188e-01, 3.842357e-01, 3.842525e-01, 3.842694e-01, 3.842863e-01, 3.843032e-01, 3.843200e-01, 3.843369e-01, 3.843538e-01, 3.843706e-01, 3.843875e-01, 3.844044e-01, 3.844212e-01, 3.844381e-01, 3.844549e-01, 3.844718e-01, 3.844887e-01, 3.845055e-01, 3.845224e-01, 3.845393e-01, 3.845561e-01, 3.845730e-01, 3.845899e-01, 3.846067e-01, 3.846236e-01, 3.846405e-01, 3.846573e-01, 3.846742e-01, 3.846910e-01, 3.847079e-01, 3.847247e-01, 3.847416e-01, 3.847585e-01, 3.847753e-01, 3.847922e-01, 3.848090e-01, 3.848259e-01, 3.848428e-01, 3.848596e-01, 3.848765e-01, 3.848934e-01, 3.849102e-01, 3.849271e-01, 3.849439e-01, 3.849608e-01, 3.849776e-01, 3.849945e-01, 3.850113e-01, 3.850282e-01, 3.850451e-01, 3.850619e-01, 3.850788e-01, 3.850956e-01, 3.851125e-01, 3.851294e-01, 3.851462e-01, 3.851631e-01, 3.851799e-01, 3.851968e-01, 3.852136e-01, 3.852305e-01, 3.852473e-01, 3.852642e-01, 3.852810e-01, 3.852979e-01, 3.853147e-01, 3.853316e-01, 3.853484e-01, 3.853653e-01, 3.853822e-01, 3.853990e-01, 3.854159e-01, 3.854327e-01, 3.854496e-01, 3.854664e-01, 3.854833e-01, 3.855001e-01, 3.855170e-01, 3.855338e-01, 3.855507e-01, 3.855675e-01, 3.855844e-01, 3.856012e-01, 3.856181e-01, 3.856349e-01, 3.856518e-01, 3.856686e-01, 3.856855e-01, 3.857023e-01, 3.857192e-01, 3.857360e-01, 3.857529e-01, 3.857697e-01, 3.857866e-01, 3.858034e-01, 3.858203e-01, 3.858371e-01, 3.858540e-01, 3.858708e-01, 3.858877e-01, 3.859045e-01, 3.859214e-01, 3.859382e-01, 3.859551e-01, 3.859719e-01, 3.859887e-01, 3.860056e-01, 3.860224e-01, 3.860393e-01, 3.860561e-01, 3.860730e-01, 3.860898e-01, 3.861067e-01, 3.861235e-01, 3.861403e-01, 3.861572e-01, 3.861741e-01, 3.861909e-01, 3.862077e-01, 3.862246e-01, 3.862414e-01, 3.862583e-01, 3.862751e-01, 3.862920e-01, 3.863088e-01, 3.863256e-01, 3.863425e-01, 3.863593e-01, 3.863762e-01, 3.863930e-01, 3.864098e-01, 3.864267e-01, 3.864435e-01, 3.864604e-01, 3.864772e-01, 3.864940e-01, 3.865109e-01, 3.865277e-01, 3.865446e-01, 3.865614e-01, 3.865783e-01, 3.865951e-01, 3.866119e-01, 3.866288e-01, 3.866456e-01, 3.866625e-01, 3.866793e-01, 3.866961e-01, 3.867130e-01, 3.867298e-01, 3.867466e-01, 3.867635e-01, 3.867803e-01, 3.867972e-01, 3.868140e-01, 3.868308e-01, 3.868477e-01, 3.868645e-01, 3.868813e-01, 3.868982e-01, 3.869150e-01, 3.869318e-01, 3.869487e-01, 3.869655e-01, 3.869823e-01, 3.869992e-01, 3.870160e-01, 3.870329e-01, 3.870497e-01, 3.870665e-01, 3.870833e-01, 3.871002e-01, 3.871170e-01, 3.871338e-01, 3.871507e-01, 3.871675e-01, 3.871843e-01, 3.872012e-01, 3.872180e-01, 3.872348e-01, 3.872516e-01, 3.872685e-01, 3.872853e-01, 3.873021e-01, 3.873190e-01, 3.873358e-01, 3.873526e-01, 3.873695e-01, 3.873863e-01, 3.874031e-01, 3.874199e-01, 3.874368e-01, 3.874536e-01, 3.874705e-01, 3.874873e-01, 3.875041e-01, 3.875209e-01, 3.875377e-01, 3.875546e-01, 3.875714e-01, 3.875882e-01, 3.876051e-01, 3.876219e-01, 3.876387e-01, 3.876556e-01, 3.876724e-01, 3.876892e-01, 3.877060e-01, 3.877228e-01, 3.877397e-01, 3.877565e-01, 3.877733e-01, 3.877902e-01, 3.878070e-01, 3.878238e-01, 3.878407e-01, 3.878575e-01, 3.878743e-01, 3.878911e-01, 3.879080e-01, 3.879248e-01, 3.879416e-01, 3.879584e-01, 3.879752e-01, 3.879921e-01, 3.880089e-01, 3.880257e-01, 3.880425e-01, 3.880593e-01, 3.880762e-01, 3.880930e-01, 3.881098e-01, 3.881266e-01, 3.881434e-01, 3.881603e-01, 3.881771e-01, 3.881939e-01, 3.882107e-01, 3.882275e-01, 3.882444e-01, 3.882612e-01, 3.882780e-01, 3.882948e-01, 3.883116e-01, 3.883285e-01, 3.883453e-01, 3.883621e-01, 3.883789e-01, 3.883957e-01, 3.884125e-01, 3.884294e-01, 3.884462e-01, 3.884630e-01, 3.884798e-01, 3.884966e-01, 3.885134e-01, 3.885303e-01, 3.885471e-01, 3.885639e-01, 3.885807e-01, 3.885975e-01, 3.886144e-01, 3.886312e-01, 3.886480e-01, 3.886648e-01, 3.886816e-01, 3.886984e-01, 3.887152e-01, 3.887320e-01, 3.887489e-01, 3.887657e-01, 3.887825e-01, 3.887993e-01, 3.888161e-01, 3.888330e-01, 3.888498e-01, 3.888666e-01, 3.888834e-01, 3.889002e-01, 3.889170e-01, 3.889338e-01, 3.889506e-01, 3.889675e-01, 3.889843e-01, 3.890011e-01, 3.890179e-01, 3.890347e-01, 3.890515e-01, 3.890683e-01, 3.890851e-01, 3.891019e-01, 3.891187e-01, 3.891356e-01, 3.891524e-01, 3.891692e-01, 3.891860e-01, 3.892028e-01, 3.892196e-01, 3.892364e-01, 3.892532e-01, 3.892700e-01, 3.892868e-01, 3.893036e-01, 3.893204e-01, 3.893372e-01, 3.893541e-01, 3.893709e-01, 3.893877e-01, 3.894044e-01, 3.894213e-01, 3.894381e-01, 3.894549e-01, 3.894717e-01, 3.894885e-01, 3.895053e-01, 3.895221e-01, 3.895389e-01, 3.895557e-01, 3.895725e-01, 3.895893e-01, 3.896061e-01, 3.896230e-01, 3.896397e-01, 3.896565e-01, 3.896734e-01, 3.896902e-01, 3.897070e-01, 3.897237e-01, 3.897406e-01, 3.897574e-01, 3.897742e-01, 3.897910e-01, 3.898078e-01, 3.898246e-01, 3.898414e-01, 3.898582e-01, 3.898750e-01, 3.898918e-01, 3.899086e-01, 3.899254e-01, 3.899421e-01, 3.899590e-01, 3.899758e-01, 3.899926e-01, 3.900093e-01, 3.900262e-01, 3.900430e-01, 3.900597e-01, 3.900765e-01, 3.900934e-01, 3.901102e-01, 3.901269e-01, 3.901438e-01, 3.901606e-01, 3.901773e-01, 3.901941e-01, 3.902110e-01, 3.902277e-01, 3.902445e-01, 3.902614e-01, 3.902781e-01, 3.902949e-01, 3.903117e-01, 3.903285e-01, 3.903453e-01, 3.903621e-01, 3.903789e-01, 3.903957e-01, 3.904125e-01, 3.904293e-01, 3.904461e-01, 3.904629e-01, 3.904797e-01, 3.904965e-01, 3.905133e-01, 3.905300e-01, 3.905469e-01, 3.905637e-01, 3.905804e-01, 3.905972e-01, 3.906140e-01, 3.906308e-01, 3.906476e-01, 3.906644e-01, 3.906812e-01, 3.906980e-01, 3.907148e-01, 3.907315e-01, 3.907484e-01, 3.907651e-01, 3.907819e-01, 3.907987e-01, 3.908155e-01, 3.908323e-01, 3.908491e-01, 3.908659e-01, 3.908827e-01, 3.908994e-01, 3.909163e-01, 3.909330e-01, 3.909498e-01, 3.909666e-01, 3.909834e-01, 3.910002e-01, 3.910170e-01, 3.910338e-01, 3.910505e-01, 3.910674e-01, 3.910841e-01, 3.911009e-01, 3.911177e-01, 3.911345e-01, 3.911513e-01, 3.911681e-01, 3.911849e-01, 3.912016e-01, 3.912184e-01, 3.912352e-01, 3.912520e-01, 3.912688e-01, 3.912855e-01, 3.913023e-01, 3.913191e-01, 3.913359e-01, 3.913527e-01, 3.913695e-01, 3.913862e-01, 3.914030e-01, 3.914198e-01, 3.914366e-01, 3.914534e-01, 3.914702e-01, 3.914869e-01, 3.915037e-01, 3.915205e-01, 3.915373e-01, 3.915541e-01, 3.915709e-01, 3.915876e-01, 3.916044e-01, 3.916212e-01, 3.916380e-01, 3.916548e-01, 3.916715e-01, 3.916883e-01, 3.917051e-01, 3.917219e-01, 3.917387e-01, 3.917555e-01, 3.917722e-01, 3.917890e-01, 3.918058e-01, 3.918226e-01, 3.918393e-01, 3.918561e-01, 3.918729e-01, 3.918896e-01, 3.919064e-01, 3.919232e-01, 3.919400e-01, 3.919567e-01, 3.919735e-01, 3.919903e-01, 3.920071e-01, 3.920239e-01, 3.920406e-01, 3.920574e-01, 3.920742e-01, 3.920910e-01, 3.921078e-01, 3.921245e-01, 3.921413e-01, 3.921581e-01, 3.921748e-01, 3.921916e-01, 3.922084e-01, 3.922252e-01, 3.922420e-01, 3.922587e-01, 3.922755e-01, 3.922923e-01, 3.923090e-01, 3.923258e-01, 3.923426e-01, 3.923594e-01, 3.923761e-01, 3.923929e-01, 3.924097e-01, 3.924264e-01, 3.924432e-01, 3.924600e-01, 3.924767e-01, 3.924935e-01, 3.925103e-01, 3.925270e-01, 3.925438e-01, 3.925606e-01, 3.925774e-01, 3.925941e-01, 3.926109e-01, 3.926277e-01, 3.926444e-01, 3.926612e-01, 3.926780e-01, 3.926947e-01, 3.927115e-01, 3.927283e-01, 3.927450e-01, 3.927618e-01, 3.927786e-01, 3.927954e-01, 3.928121e-01, 3.928289e-01, 3.928457e-01, 3.928624e-01, 3.928792e-01, 3.928960e-01, 3.929127e-01, 3.929295e-01, 3.929463e-01, 3.929630e-01, 3.929798e-01, 3.929966e-01, 3.930133e-01, 3.930300e-01, 3.930468e-01, 3.930636e-01, 3.930804e-01, 3.930971e-01, 3.931139e-01, 3.931307e-01, 3.931474e-01, 3.931642e-01, 3.931809e-01, 3.931977e-01, 3.932145e-01, 3.932312e-01, 3.932480e-01, 3.932648e-01, 3.932815e-01, 3.932983e-01, 3.933150e-01, 3.933318e-01, 3.933486e-01, 3.933653e-01, 3.933821e-01, 3.933988e-01, 3.934156e-01, 3.934324e-01, 3.934491e-01, 3.934659e-01, 3.934826e-01, 3.934994e-01, 3.935162e-01, 3.935329e-01, 3.935497e-01, 3.935664e-01, 3.935832e-01, 3.935999e-01, 3.936167e-01, 3.936335e-01, 3.936502e-01, 3.936670e-01, 3.936837e-01, 3.937005e-01, 3.937173e-01, 3.937340e-01, 3.937508e-01, 3.937675e-01, 3.937843e-01, 3.938010e-01, 3.938178e-01, 3.938345e-01, 3.938513e-01, 3.938681e-01, 3.938848e-01, 3.939015e-01, 3.939183e-01, 3.939350e-01, 3.939518e-01, 3.939686e-01, 3.939853e-01, 3.940021e-01, 3.940188e-01, 3.940355e-01, 3.940523e-01, 3.940691e-01, 3.940858e-01, 3.941026e-01, 3.941193e-01, 3.941361e-01, 3.941528e-01, 3.941696e-01, 3.941863e-01, 3.942031e-01, 3.942198e-01, 3.942366e-01, 3.942533e-01, 3.942701e-01, 3.942868e-01, 3.943036e-01, 3.943203e-01, 3.943371e-01, 3.943538e-01, 3.943706e-01, 3.943873e-01, 3.944041e-01, 3.944208e-01, 3.944376e-01, 3.944543e-01, 3.944710e-01, 3.944878e-01, 3.945045e-01, 3.945213e-01, 3.945380e-01, 3.945548e-01, 3.945715e-01, 3.945883e-01, 3.946050e-01, 3.946218e-01, 3.946385e-01, 3.946553e-01, 3.946720e-01, 3.946888e-01, 3.947055e-01, 3.947223e-01, 3.947390e-01, 3.947557e-01, 3.947725e-01, 3.947892e-01, 3.948060e-01, 3.948227e-01, 3.948394e-01, 3.948562e-01, 3.948729e-01, 3.948897e-01, 3.949064e-01, 3.949232e-01, 3.949399e-01, 3.949566e-01, 3.949734e-01, 3.949901e-01, 3.950069e-01, 3.950236e-01, 3.950404e-01, 3.950571e-01, 3.950739e-01, 3.950906e-01, 3.951073e-01, 3.951241e-01, 3.951408e-01, 3.951575e-01, 3.951743e-01, 3.951910e-01, 3.952077e-01, 3.952245e-01, 3.952412e-01, 3.952580e-01, 3.952747e-01, 3.952914e-01, 3.953082e-01, 3.953249e-01, 3.953417e-01, 3.953584e-01, 3.953751e-01, 3.953919e-01, 3.954086e-01, 3.954253e-01, 3.954421e-01, 3.954588e-01, 3.954756e-01, 3.954923e-01, 3.955090e-01, 3.955258e-01, 3.955425e-01, 3.955592e-01, 3.955760e-01, 3.955927e-01, 3.956095e-01, 3.956262e-01, 3.956429e-01, 3.956596e-01, 3.956763e-01, 3.956931e-01, 3.957098e-01, 3.957266e-01, 3.957433e-01, 3.957600e-01, 3.957767e-01, 3.957935e-01, 3.958102e-01, 3.958270e-01, 3.958437e-01, 3.958604e-01, 3.958772e-01, 3.958939e-01, 3.959107e-01, 3.959274e-01, 3.959441e-01, 3.959608e-01, 3.959775e-01, 3.959943e-01, 3.960110e-01, 3.960277e-01, 3.960444e-01, 3.960612e-01, 3.960779e-01, 3.960947e-01, 3.961114e-01, 3.961281e-01, 3.961448e-01, 3.961616e-01, 3.961783e-01, 3.961950e-01, 3.962117e-01, 3.962285e-01, 3.962452e-01, 3.962619e-01, 3.962786e-01, 3.962954e-01, 3.963121e-01, 3.963288e-01, 3.963455e-01, 3.963623e-01, 3.963790e-01, 3.963957e-01, 3.964124e-01, 3.964292e-01, 3.964459e-01, 3.964626e-01, 3.964793e-01, 3.964961e-01, 3.965128e-01, 3.965295e-01, 3.965462e-01, 3.965630e-01, 3.965797e-01, 3.965964e-01, 3.966132e-01, 3.966299e-01, 3.966466e-01, 3.966633e-01, 3.966801e-01, 3.966968e-01, 3.967135e-01, 3.967302e-01, 3.967469e-01, 3.967636e-01, 3.967803e-01, 3.967971e-01, 3.968138e-01, 3.968305e-01, 3.968472e-01, 3.968639e-01, 3.968807e-01, 3.968974e-01, 3.969141e-01, 3.969308e-01, 3.969476e-01, 3.969643e-01, 3.969810e-01, 3.969977e-01, 3.970144e-01, 3.970312e-01, 3.970479e-01, 3.970646e-01, 3.970813e-01, 3.970980e-01, 3.971147e-01, 3.971315e-01, 3.971482e-01, 3.971649e-01, 3.971816e-01, 3.971983e-01, 3.972150e-01, 3.972317e-01, 3.972484e-01, 3.972652e-01, 3.972819e-01, 3.972986e-01, 3.973153e-01, 3.973320e-01, 3.973488e-01, 3.973655e-01, 3.973822e-01, 3.973989e-01, 3.974156e-01, 3.974323e-01, 3.974490e-01, 3.974657e-01, 3.974824e-01, 3.974991e-01, 3.975159e-01, 3.975326e-01, 3.975493e-01, 3.975660e-01, 3.975827e-01, 3.975994e-01, 3.976161e-01, 3.976329e-01, 3.976496e-01, 3.976663e-01, 3.976830e-01, 3.976997e-01, 3.977164e-01, 3.977331e-01, 3.977498e-01, 3.977666e-01, 3.977832e-01, 3.978000e-01, 3.978167e-01, 3.978334e-01, 3.978501e-01, 3.978668e-01, 3.978835e-01, 3.979002e-01, 3.979169e-01, 3.979336e-01, 3.979503e-01, 3.979670e-01, 3.979837e-01, 3.980004e-01, 3.980172e-01, 3.980339e-01, 3.980506e-01, 3.980673e-01, 3.980840e-01, 3.981007e-01, 3.981174e-01, 3.981341e-01, 3.981508e-01, 3.981675e-01, 3.981842e-01, 3.982009e-01, 3.982176e-01, 3.982343e-01, 3.982510e-01, 3.982677e-01, 3.982844e-01, 3.983011e-01, 3.983178e-01, 3.983345e-01, 3.983513e-01, 3.983679e-01, 3.983847e-01, 3.984013e-01, 3.984181e-01, 3.984347e-01, 3.984515e-01, 3.984681e-01, 3.984848e-01, 3.985015e-01, 3.985182e-01, 3.985350e-01, 3.985516e-01, 3.985684e-01, 3.985851e-01, 3.986017e-01, 3.986185e-01, 3.986351e-01, 3.986519e-01, 3.986686e-01, 3.986852e-01, 3.987020e-01, 3.987187e-01, 3.987353e-01, 3.987521e-01, 3.987687e-01, 3.987854e-01, 3.988021e-01, 3.988188e-01, 3.988355e-01, 3.988522e-01, 3.988689e-01, 3.988856e-01, 3.989023e-01, 3.989190e-01, 3.989357e-01, 3.989524e-01, 3.989691e-01, 3.989858e-01, 3.990025e-01, 3.990192e-01, 3.990359e-01, 3.990526e-01, 3.990693e-01, 3.990860e-01, 3.991026e-01, 3.991194e-01, 3.991360e-01, 3.991527e-01, 3.991694e-01, 3.991861e-01, 3.992028e-01, 3.992195e-01, 3.992362e-01, 3.992529e-01, 3.992696e-01, 3.992863e-01, 3.993030e-01, 3.993196e-01, 3.993364e-01, 3.993531e-01, 3.993697e-01, 3.993864e-01, 3.994031e-01, 3.994198e-01, 3.994365e-01, 3.994532e-01, 3.994699e-01, 3.994865e-01, 3.995032e-01, 3.995200e-01, 3.995366e-01, 3.995533e-01, 3.995700e-01, 3.995867e-01, 3.996034e-01, 3.996201e-01, 3.996367e-01, 3.996535e-01, 3.996701e-01, 3.996868e-01, 3.997035e-01, 3.997202e-01, 3.997369e-01, 3.997535e-01, 3.997702e-01, 3.997869e-01, 3.998036e-01, 3.998203e-01, 3.998370e-01, 3.998537e-01, 3.998704e-01, 3.998871e-01, 3.999037e-01, 3.999204e-01, 3.999371e-01, 3.999538e-01, 3.999705e-01, 3.999871e-01, 4.000038e-01, 4.000205e-01, 4.000372e-01, 4.000539e-01, 4.000705e-01, 4.000872e-01, 4.001039e-01, 4.001206e-01, 4.001373e-01, 4.001540e-01, 4.001707e-01, 4.001873e-01, 4.002040e-01, 4.002207e-01, 4.002374e-01, 4.002541e-01, 4.002707e-01, 4.002874e-01, 4.003041e-01, 4.003208e-01, 4.003375e-01, 4.003541e-01, 4.003708e-01, 4.003875e-01, 4.004042e-01, 4.004208e-01, 4.004375e-01, 4.004542e-01, 4.004709e-01, 4.004876e-01, 4.005043e-01, 4.005209e-01, 4.005376e-01, 4.005543e-01, 4.005709e-01, 4.005876e-01, 4.006043e-01, 4.006210e-01, 4.006377e-01, 4.006543e-01, 4.006710e-01, 4.006877e-01, 4.007044e-01, 4.007210e-01, 4.007377e-01, 4.007544e-01, 4.007711e-01, 4.007877e-01, 4.008044e-01, 4.008211e-01, 4.008378e-01, 4.008544e-01, 4.008711e-01, 4.008878e-01, 4.009044e-01, 4.009211e-01, 4.009378e-01, 4.009545e-01, 4.009711e-01, 4.009878e-01, 4.010045e-01, 4.010212e-01, 4.010378e-01, 4.010545e-01, 4.010712e-01, 4.010878e-01, 4.011045e-01, 4.011212e-01, 4.011378e-01, 4.011545e-01, 4.011712e-01, 4.011878e-01, 4.012045e-01, 4.012212e-01, 4.012378e-01, 4.012545e-01, 4.012712e-01, 4.012879e-01, 4.013045e-01, 4.013212e-01, 4.013379e-01, 4.013545e-01, 4.013712e-01, 4.013879e-01, 4.014045e-01, 4.014212e-01, 4.014378e-01, 4.014545e-01, 4.014712e-01, 4.014879e-01, 4.015045e-01, 4.015212e-01, 4.015379e-01, 4.015546e-01, 4.015712e-01, 4.015879e-01, 4.016046e-01, 4.016212e-01, 4.016379e-01, 4.016545e-01, 4.016712e-01, 4.016878e-01, 4.017045e-01, 4.017212e-01, 4.017378e-01, 4.017545e-01, 4.017712e-01, 4.017878e-01, 4.018045e-01, 4.018212e-01, 4.018378e-01, 4.018545e-01, 4.018711e-01, 4.018878e-01, 4.019045e-01, 4.019211e-01, 4.019378e-01, 4.019544e-01, 4.019711e-01, 4.019878e-01, 4.020044e-01, 4.020211e-01, 4.020377e-01, 4.020544e-01, 4.020711e-01, 4.020877e-01, 4.021044e-01, 4.021211e-01, 4.021377e-01, 4.021544e-01, 4.021710e-01, 4.021877e-01, 4.022043e-01, 4.022210e-01, 4.022377e-01, 4.022543e-01, 4.022710e-01, 4.022876e-01, 4.023043e-01, 4.023210e-01, 4.023376e-01, 4.023543e-01, 4.023709e-01, 4.023876e-01, 4.024042e-01, 4.024209e-01, 4.024376e-01, 4.024542e-01, 4.024708e-01, 4.024875e-01, 4.025041e-01, 4.025208e-01, 4.025375e-01, 4.025541e-01, 4.025708e-01, 4.025874e-01, 4.026041e-01, 4.026207e-01, 4.026374e-01, 4.026540e-01, 4.026707e-01, 4.026874e-01, 4.027040e-01, 4.027206e-01, 4.027373e-01, 4.027539e-01, 4.027706e-01, 4.027872e-01, 4.028039e-01, 4.028206e-01, 4.028372e-01, 4.028538e-01, 4.028705e-01, 4.028872e-01, 4.029038e-01, 4.029204e-01, 4.029371e-01, 4.029538e-01, 4.029704e-01, 4.029870e-01, 4.030037e-01, 4.030204e-01, 4.030370e-01, 4.030536e-01, 4.030703e-01, 4.030870e-01, 4.031036e-01, 4.031202e-01, 4.031369e-01, 4.031535e-01, 4.031702e-01, 4.031868e-01, 4.032035e-01, 4.032201e-01, 4.032367e-01, 4.032534e-01, 4.032700e-01, 4.032867e-01, 4.033034e-01, 4.033200e-01, 4.033366e-01, 4.033533e-01, 4.033699e-01, 4.033866e-01, 4.034032e-01, 4.034199e-01, 4.034365e-01, 4.034531e-01, 4.034698e-01, 4.034864e-01, 4.035031e-01, 4.035197e-01, 4.035363e-01, 4.035530e-01, 4.035696e-01, 4.035863e-01, 4.036029e-01, 4.036196e-01, 4.036362e-01, 4.036529e-01, 4.036695e-01, 4.036861e-01, 4.037028e-01, 4.037194e-01, 4.037361e-01, 4.037527e-01, 4.037693e-01, 4.037860e-01, 4.038026e-01, 4.038193e-01, 4.038359e-01, 4.038526e-01, 4.038692e-01, 4.038858e-01, 4.039025e-01, 4.039191e-01, 4.039357e-01, 4.039524e-01, 4.039690e-01, 4.039856e-01, 4.040022e-01, 4.040189e-01, 4.040355e-01, 4.040522e-01, 4.040688e-01, 4.040855e-01, 4.041021e-01, 4.041187e-01, 4.041354e-01, 4.041520e-01, 4.041686e-01, 4.041853e-01, 4.042019e-01, 4.042185e-01, 4.042352e-01, 4.042518e-01, 4.042684e-01, 4.042851e-01, 4.043017e-01, 4.043184e-01, 4.043350e-01, 4.043516e-01, 4.043682e-01, 4.043849e-01, 4.044015e-01, 4.044181e-01, 4.044348e-01, 4.044514e-01, 4.044680e-01, 4.044847e-01, 4.045013e-01, 4.045179e-01, 4.045346e-01, 4.045512e-01, 4.045678e-01, 4.045845e-01, 4.046011e-01, 4.046177e-01, 4.046343e-01, 4.046510e-01, 4.046676e-01, 4.046842e-01, 4.047008e-01, 4.047175e-01, 4.047341e-01, 4.047508e-01, 4.047674e-01, 4.047840e-01, 4.048006e-01, 4.048173e-01, 4.048339e-01, 4.048505e-01, 4.048671e-01, 4.048837e-01, 4.049004e-01, 4.049170e-01, 4.049337e-01, 4.049503e-01, 4.049669e-01, 4.049836e-01, 4.050002e-01, 4.050168e-01, 4.050334e-01, 4.050500e-01, 4.050666e-01, 4.050833e-01, 4.050999e-01, 4.051165e-01, 4.051332e-01, 4.051498e-01, 4.051664e-01, 4.051830e-01, 4.051996e-01, 4.052163e-01, 4.052329e-01, 4.052495e-01, 4.052662e-01, 4.052827e-01, 4.052994e-01, 4.053160e-01, 4.053326e-01, 4.053493e-01, 4.053659e-01, 4.053825e-01, 4.053991e-01, 4.054157e-01, 4.054324e-01, 4.054490e-01, 4.054656e-01, 4.054822e-01, 4.054988e-01, 4.055154e-01, 4.055321e-01, 4.055487e-01, 4.055653e-01, 4.055819e-01, 4.055986e-01, 4.056152e-01, 4.056318e-01, 4.056484e-01, 4.056650e-01, 4.056816e-01, 4.056983e-01, 4.057148e-01, 4.057315e-01, 4.057481e-01, 4.057647e-01, 4.057813e-01, 4.057980e-01, 4.058146e-01, 4.058312e-01, 4.058478e-01, 4.058644e-01, 4.058810e-01, 4.058977e-01, 4.059143e-01, 4.059309e-01, 4.059475e-01, 4.059641e-01, 4.059807e-01, 4.059973e-01, 4.060140e-01, 4.060306e-01, 4.060472e-01, 4.060638e-01, 4.060804e-01, 4.060971e-01, 4.061136e-01, 4.061302e-01, 4.061469e-01, 4.061635e-01, 4.061801e-01, 4.061967e-01, 4.062133e-01, 4.062299e-01, 4.062465e-01, 4.062631e-01, 4.062798e-01, 4.062964e-01, 4.063130e-01, 4.063296e-01, 4.063462e-01, 4.063628e-01, 4.063794e-01, 4.063960e-01, 4.064126e-01, 4.064292e-01, 4.064459e-01, 4.064625e-01, 4.064791e-01, 4.064957e-01, 4.065123e-01, 4.065289e-01, 4.065455e-01, 4.065621e-01, 4.065787e-01, 4.065953e-01, 4.066119e-01, 4.066285e-01, 4.066451e-01, 4.066617e-01, 4.066783e-01, 4.066950e-01, 4.067116e-01, 4.067282e-01, 4.067448e-01, 4.067614e-01, 4.067780e-01, 4.067946e-01, 4.068112e-01, 4.068278e-01, 4.068444e-01, 4.068610e-01, 4.068776e-01, 4.068942e-01, 4.069108e-01, 4.069274e-01, 4.069441e-01, 4.069607e-01, 4.069772e-01, 4.069938e-01, 4.070104e-01, 4.070270e-01, 4.070436e-01, 4.070603e-01, 4.070769e-01, 4.070935e-01, 4.071101e-01, 4.071267e-01, 4.071433e-01, 4.071599e-01, 4.071764e-01, 4.071930e-01, 4.072097e-01, 4.072263e-01, 4.072429e-01, 4.072595e-01, 4.072761e-01, 4.072927e-01, 4.073093e-01, 4.073259e-01, 4.073425e-01, 4.073591e-01, 4.073756e-01, 4.073922e-01, 4.074088e-01, 4.074254e-01, 4.074420e-01, 4.074586e-01, 4.074752e-01, 4.074918e-01, 4.075084e-01, 4.075250e-01, 4.075416e-01, 4.075582e-01, 4.075748e-01, 4.075914e-01, 4.076080e-01, 4.076246e-01, 4.076412e-01, 4.076578e-01, 4.076744e-01, 4.076910e-01, 4.077076e-01, 4.077242e-01, 4.077408e-01, 4.077574e-01, 4.077740e-01, 4.077905e-01, 4.078071e-01, 4.078237e-01, 4.078403e-01, 4.078569e-01, 4.078735e-01, 4.078901e-01, 4.079067e-01, 4.079233e-01, 4.079399e-01, 4.079565e-01, 4.079731e-01, 4.079897e-01, 4.080063e-01, 4.080229e-01, 4.080394e-01, 4.080560e-01, 4.080726e-01, 4.080892e-01, 4.081058e-01, 4.081224e-01, 4.081390e-01, 4.081556e-01, 4.081721e-01, 4.081887e-01, 4.082053e-01, 4.082219e-01, 4.082385e-01, 4.082551e-01, 4.082717e-01, 4.082883e-01, 4.083049e-01, 4.083215e-01, 4.083380e-01, 4.083546e-01, 4.083712e-01, 4.083878e-01, 4.084044e-01, 4.084210e-01, 4.084376e-01, 4.084541e-01, 4.084707e-01, 4.084873e-01, 4.085039e-01, 4.085205e-01, 4.085371e-01, 4.085536e-01, 4.085702e-01, 4.085868e-01, 4.086034e-01, 4.086200e-01, 4.086366e-01, 4.086531e-01, 4.086697e-01, 4.086863e-01, 4.087029e-01, 4.087195e-01, 4.087361e-01, 4.087527e-01, 4.087692e-01, 4.087858e-01, 4.088024e-01, 4.088190e-01, 4.088356e-01, 4.088522e-01, 4.088687e-01, 4.088853e-01, 4.089019e-01, 4.089185e-01, 4.089351e-01, 4.089516e-01, 4.089682e-01, 4.089848e-01, 4.090014e-01, 4.090180e-01, 4.090345e-01, 4.090511e-01, 4.090677e-01, 4.090843e-01, 4.091009e-01, 4.091174e-01, 4.091340e-01, 4.091506e-01, 4.091671e-01, 4.091837e-01, 4.092003e-01, 4.092169e-01, 4.092335e-01, 4.092501e-01, 4.092666e-01, 4.092832e-01, 4.092998e-01, 4.093163e-01, 4.093329e-01, 4.093495e-01, 4.093661e-01, 4.093826e-01, 4.093992e-01, 4.094158e-01, 4.094324e-01, 4.094490e-01, 4.094656e-01, 4.094821e-01, 4.094987e-01, 4.095152e-01, 4.095318e-01, 4.095484e-01, 4.095649e-01, 4.095815e-01, 4.095981e-01, 4.096147e-01, 4.096313e-01, 4.096479e-01, 4.096644e-01, 4.096810e-01, 4.096975e-01, 4.097141e-01, 4.097307e-01, 4.097472e-01, 4.097638e-01, 4.097804e-01, 4.097970e-01, 4.098136e-01, 4.098301e-01, 4.098467e-01, 4.098632e-01, 4.098798e-01, 4.098964e-01, 4.099129e-01, 4.099295e-01, 4.099461e-01, 4.099627e-01, 4.099793e-01, 4.099958e-01, 4.100124e-01, 4.100290e-01, 4.100455e-01, 4.100621e-01, 4.100786e-01, 4.100952e-01, 4.101118e-01, 4.101283e-01, 4.101449e-01, 4.101615e-01, 4.101780e-01, 4.101946e-01, 4.102112e-01, 4.102277e-01, 4.102443e-01, 4.102609e-01, 4.102774e-01, 4.102940e-01, 4.103106e-01, 4.103271e-01, 4.103437e-01, 4.103602e-01, 4.103768e-01, 4.103934e-01, 4.104099e-01, 4.104265e-01, 4.104431e-01, 4.104596e-01, 4.104762e-01, 4.104927e-01, 4.105093e-01, 4.105259e-01, 4.105425e-01, 4.105590e-01, 4.105756e-01, 4.105921e-01, 4.106087e-01, 4.106252e-01, 4.106418e-01, 4.106584e-01, 4.106749e-01, 4.106915e-01, 4.107081e-01, 4.107246e-01, 4.107412e-01, 4.107577e-01, 4.107743e-01, 4.107908e-01, 4.108074e-01, 4.108240e-01, 4.108405e-01, 4.108571e-01, 4.108737e-01, 4.108902e-01, 4.109068e-01, 4.109233e-01, 4.109399e-01, 4.109564e-01, 4.109730e-01, 4.109896e-01, 4.110061e-01, 4.110227e-01, 4.110392e-01, 4.110558e-01, 4.110723e-01, 4.110889e-01, 4.111054e-01, 4.111220e-01, 4.111385e-01, 4.111551e-01, 4.111716e-01, 4.111882e-01, 4.112048e-01, 4.112213e-01, 4.112379e-01, 4.112544e-01, 4.112710e-01, 4.112875e-01, 4.113041e-01, 4.113206e-01, 4.113372e-01, 4.113537e-01, 4.113703e-01, 4.113868e-01, 4.114034e-01, 4.114200e-01, 4.114365e-01, 4.114531e-01, 4.114696e-01, 4.114861e-01, 4.115027e-01, 4.115193e-01, 4.115358e-01, 4.115524e-01, 4.115689e-01, 4.115855e-01, 4.116020e-01, 4.116186e-01, 4.116351e-01, 4.116516e-01, 4.116682e-01, 4.116848e-01, 4.117013e-01, 4.117179e-01, 4.117344e-01, 4.117510e-01, 4.117675e-01, 4.117840e-01, 4.118006e-01, 4.118171e-01, 4.118337e-01, 4.118502e-01, 4.118668e-01, 4.118833e-01, 4.118999e-01, 4.119164e-01, 4.119330e-01, 4.119495e-01, 4.119661e-01, 4.119826e-01, 4.119991e-01, 4.120157e-01, 4.120322e-01, 4.120488e-01, 4.120653e-01, 4.120819e-01, 4.120984e-01, 4.121150e-01, 4.121315e-01, 4.121480e-01, 4.121646e-01, 4.121811e-01, 4.121977e-01, 4.122142e-01, 4.122308e-01, 4.122473e-01, 4.122639e-01, 4.122804e-01, 4.122969e-01, 4.123135e-01, 4.123300e-01, 4.123465e-01, 4.123631e-01, 4.123797e-01, 4.123962e-01, 4.124127e-01, 4.124293e-01, 4.124458e-01, 4.124623e-01, 4.124789e-01, 4.124954e-01, 4.125119e-01, 4.125285e-01, 4.125450e-01, 4.125616e-01, 4.125781e-01, 4.125946e-01, 4.126112e-01, 4.126277e-01, 4.126442e-01, 4.126608e-01, 4.126773e-01, 4.126939e-01, 4.127104e-01, 4.127270e-01, 4.127435e-01, 4.127600e-01, 4.127766e-01, 4.127931e-01, 4.128096e-01, 4.128262e-01, 4.128427e-01, 4.128592e-01, 4.128758e-01, 4.128923e-01, 4.129089e-01, 4.129254e-01, 4.129419e-01, 4.129585e-01, 4.129750e-01, 4.129915e-01, 4.130080e-01, 4.130246e-01, 4.130411e-01, 4.130577e-01, 4.130742e-01, 4.130907e-01, 4.131073e-01, 4.131238e-01, 4.131403e-01, 4.131568e-01, 4.131734e-01, 4.131899e-01, 4.132065e-01, 4.132230e-01, 4.132395e-01, 4.132560e-01, 4.132726e-01, 4.132891e-01, 4.133056e-01, 4.133222e-01, 4.133387e-01, 4.133552e-01, 4.133717e-01, 4.133883e-01, 4.134048e-01, 4.134213e-01, 4.134379e-01, 4.134544e-01, 4.134709e-01, 4.134874e-01, 4.135040e-01, 4.135205e-01, 4.135370e-01, 4.135536e-01, 4.135701e-01, 4.135866e-01, 4.136031e-01, 4.136196e-01, 4.136362e-01, 4.136527e-01, 4.136692e-01, 4.136858e-01, 4.137023e-01, 4.137188e-01, 4.137354e-01, 4.137519e-01, 4.137684e-01, 4.137849e-01, 4.138014e-01, 4.138180e-01, 4.138345e-01, 4.138510e-01, 4.138676e-01, 4.138841e-01, 4.139006e-01, 4.139171e-01, 4.139336e-01, 4.139501e-01, 4.139667e-01, 4.139832e-01, 4.139997e-01, 4.140162e-01, 4.140328e-01, 4.140493e-01, 4.140658e-01, 4.140823e-01, 4.140988e-01, 4.141154e-01, 4.141319e-01, 4.141484e-01, 4.141649e-01, 4.141815e-01, 4.141980e-01, 4.142145e-01, 4.142310e-01, 4.142476e-01, 4.142641e-01, 4.142806e-01, 4.142971e-01, 4.143136e-01, 4.143302e-01, 4.143467e-01, 4.143632e-01, 4.143797e-01, 4.143962e-01, 4.144127e-01, 4.144292e-01, 4.144458e-01, 4.144623e-01, 4.144788e-01, 4.144953e-01, 4.145118e-01, 4.145283e-01, 4.145449e-01, 4.145614e-01, 4.145779e-01, 4.145944e-01, 4.146109e-01, 4.146274e-01, 4.146439e-01, 4.146605e-01, 4.146770e-01, 4.146935e-01, 4.147100e-01, 4.147265e-01, 4.147430e-01, 4.147595e-01, 4.147761e-01, 4.147926e-01, 4.148091e-01, 4.148256e-01, 4.148421e-01, 4.148586e-01, 4.148751e-01, 4.148916e-01, 4.149081e-01, 4.149247e-01, 4.149412e-01, 4.149577e-01, 4.149742e-01, 4.149908e-01, 4.150073e-01, 4.150238e-01, 4.150403e-01, 4.150568e-01, 4.150733e-01, 4.150898e-01, 4.151063e-01, 4.151228e-01, 4.151393e-01, 4.151558e-01, 4.151723e-01, 4.151888e-01, 4.152053e-01, 4.152218e-01, 4.152384e-01, 4.152549e-01, 4.152714e-01, 4.152879e-01, 4.153044e-01, 4.153209e-01, 4.153374e-01, 4.153539e-01, 4.153704e-01, 4.153869e-01, 4.154034e-01, 4.154199e-01, 4.154364e-01, 4.154529e-01, 4.154694e-01, 4.154859e-01, 4.155025e-01, 4.155190e-01, 4.155355e-01, 4.155520e-01, 4.155685e-01, 4.155850e-01, 4.156015e-01, 4.156180e-01, 4.156345e-01, 4.156510e-01, 4.156675e-01, 4.156840e-01, 4.157005e-01, 4.157170e-01, 4.157335e-01, 4.157500e-01, 4.157665e-01, 4.157830e-01, 4.157995e-01, 4.158160e-01, 4.158325e-01, 4.158490e-01, 4.158655e-01, 4.158821e-01, 4.158986e-01, 4.159150e-01, 4.159315e-01, 4.159480e-01, 4.159645e-01, 4.159810e-01, 4.159975e-01, 4.160140e-01, 4.160306e-01, 4.160470e-01, 4.160635e-01, 4.160800e-01, 4.160965e-01, 4.161130e-01, 4.161295e-01, 4.161460e-01, 4.161625e-01, 4.161790e-01, 4.161955e-01, 4.162120e-01, 4.162285e-01, 4.162450e-01, 4.162615e-01, 4.162780e-01, 4.162945e-01, 4.163110e-01, 4.163275e-01, 4.163440e-01, 4.163604e-01, 4.163769e-01, 4.163935e-01, 4.164099e-01, 4.164265e-01, 4.164430e-01, 4.164594e-01, 4.164760e-01, 4.164924e-01, 4.165089e-01, 4.165254e-01, 4.165419e-01, 4.165584e-01, 4.165749e-01, 4.165914e-01, 4.166079e-01, 4.166244e-01, 4.166409e-01, 4.166573e-01, 4.166738e-01, 4.166903e-01, 4.167068e-01, 4.167233e-01, 4.167398e-01, 4.167563e-01, 4.167728e-01, 4.167893e-01, 4.168057e-01, 4.168223e-01, 4.168387e-01, 4.168552e-01, 4.168717e-01, 4.168882e-01, 4.169047e-01, 4.169212e-01, 4.169377e-01, 4.169542e-01, 4.169706e-01, 4.169872e-01, 4.170036e-01, 4.170201e-01, 4.170366e-01, 4.170531e-01, 4.170696e-01, 4.170861e-01, 4.171025e-01, 4.171191e-01, 4.171355e-01, 4.171520e-01, 4.171685e-01, 4.171850e-01, 4.172015e-01, 4.172180e-01, 4.172345e-01, 4.172509e-01, 4.172674e-01, 4.172839e-01, 4.173004e-01, 4.173169e-01, 4.173334e-01, 4.173498e-01, 4.173663e-01, 4.173828e-01, 4.173993e-01, 4.174158e-01, 4.174322e-01, 4.174488e-01, 4.174652e-01, 4.174817e-01, 4.174982e-01, 4.175147e-01, 4.175311e-01, 4.175476e-01, 4.175641e-01, 4.175806e-01, 4.175971e-01, 4.176136e-01, 4.176300e-01, 4.176465e-01, 4.176630e-01, 4.176795e-01, 4.176960e-01, 4.177125e-01, 4.177289e-01, 4.177454e-01, 4.177619e-01, 4.177784e-01, 4.177948e-01, 4.178113e-01, 4.178278e-01, 4.178443e-01, 4.178607e-01, 4.178772e-01, 4.178937e-01, 4.179102e-01, 4.179267e-01, 4.179431e-01, 4.179596e-01, 4.179761e-01, 4.179926e-01, 4.180090e-01, 4.180256e-01, 4.180420e-01, 4.180585e-01, 4.180749e-01, 4.180914e-01, 4.181079e-01, 4.181244e-01, 4.181409e-01, 4.181573e-01, 4.181738e-01, 4.181903e-01, 4.182068e-01, 4.182232e-01, 4.182397e-01, 4.182562e-01, 4.182726e-01, 4.182891e-01, 4.183056e-01, 4.183221e-01, 4.183386e-01, 4.183550e-01, 4.183715e-01, 4.183879e-01, 4.184044e-01, 4.184209e-01, 4.184374e-01, 4.184538e-01, 4.184703e-01, 4.184868e-01, 4.185033e-01, 4.185197e-01, 4.185362e-01, 4.185527e-01, 4.185691e-01, 4.185856e-01, 4.186021e-01, 4.186185e-01, 4.186350e-01, 4.186515e-01, 4.186679e-01, 4.186844e-01, 4.187009e-01, 4.187174e-01, 4.187338e-01, 4.187503e-01, 4.187667e-01, 4.187832e-01, 4.187997e-01, 4.188161e-01, 4.188326e-01, 4.188491e-01, 4.188656e-01, 4.188820e-01, 4.188985e-01, 4.189149e-01, 4.189314e-01, 4.189479e-01, 4.189644e-01, 4.189808e-01, 4.189973e-01, 4.190138e-01, 4.190302e-01, 4.190467e-01, 4.190632e-01, 4.190796e-01, 4.190961e-01, 4.191126e-01, 4.191290e-01, 4.191455e-01, 4.191619e-01, 4.191784e-01, 4.191948e-01, 4.192113e-01, 4.192278e-01, 4.192443e-01, 4.192607e-01, 4.192772e-01, 4.192936e-01, 4.193101e-01, 4.193265e-01, 4.193430e-01, 4.193595e-01, 4.193760e-01, 4.193924e-01, 4.194089e-01, 4.194253e-01, 4.194418e-01, 4.194582e-01, 4.194747e-01, 4.194911e-01, 4.195076e-01, 4.195241e-01, 4.195406e-01, 4.195570e-01, 4.195735e-01, 4.195899e-01, 4.196064e-01, 4.196228e-01, 4.196393e-01, 4.196557e-01, 4.196722e-01, 4.196887e-01, 4.197051e-01, 4.197215e-01, 4.197380e-01, 4.197545e-01, 4.197710e-01, 4.197874e-01, 4.198039e-01, 4.198203e-01, 4.198368e-01, 4.198532e-01, 4.198697e-01, 4.198861e-01, 4.199026e-01, 4.199190e-01, 4.199355e-01, 4.199520e-01, 4.199684e-01, 4.199848e-01, 4.200013e-01, 4.200177e-01, 4.200342e-01, 4.200507e-01, 4.200671e-01, 4.200836e-01, 4.201000e-01, 4.201165e-01, 4.201329e-01, 4.201494e-01, 4.201658e-01, 4.201823e-01, 4.201988e-01, 4.202152e-01, 4.202316e-01, 4.202481e-01, 4.202645e-01, 4.202810e-01, 4.202974e-01, 4.203139e-01, 4.203303e-01, 4.203468e-01, 4.203632e-01, 4.203797e-01, 4.203961e-01, 4.204126e-01, 4.204291e-01, 4.204455e-01, 4.204619e-01, 4.204784e-01, 4.204948e-01, 4.205113e-01, 4.205277e-01, 4.205442e-01, 4.205606e-01, 4.205771e-01, 4.205935e-01, 4.206100e-01, 4.206264e-01, 4.206429e-01, 4.206593e-01, 4.206758e-01, 4.206922e-01, 4.207087e-01, 4.207251e-01, 4.207415e-01, 4.207579e-01, 4.207744e-01, 4.207909e-01, 4.208073e-01, 4.208238e-01, 4.208402e-01, 4.208566e-01, 4.208731e-01, 4.208895e-01, 4.209060e-01, 4.209224e-01, 4.209388e-01, 4.209553e-01, 4.209718e-01, 4.209882e-01, 4.210046e-01, 4.210211e-01, 4.210375e-01, 4.210539e-01, 4.210704e-01, 4.210868e-01, 4.211033e-01, 4.211197e-01, 4.211361e-01, 4.211526e-01, 4.211690e-01, 4.211855e-01, 4.212019e-01, 4.212184e-01, 4.212348e-01, 4.212512e-01, 4.212677e-01, 4.212841e-01, 4.213006e-01, 4.213170e-01, 4.213335e-01, 4.213499e-01, 4.213663e-01, 4.213828e-01, 4.213992e-01, 4.214156e-01, 4.214320e-01, 4.214485e-01, 4.214649e-01, 4.214814e-01, 4.214978e-01, 4.215142e-01, 4.215307e-01, 4.215471e-01, 4.215636e-01, 4.215800e-01, 4.215964e-01, 4.216129e-01, 4.216293e-01, 4.216457e-01, 4.216622e-01, 4.216786e-01, 4.216951e-01, 4.217115e-01, 4.217279e-01, 4.217443e-01, 4.217608e-01, 4.217772e-01, 4.217936e-01, 4.218101e-01, 4.218265e-01, 4.218430e-01, 4.218594e-01, 4.218758e-01, 4.218922e-01, 4.219086e-01, 4.219251e-01, 4.219415e-01, 4.219580e-01, 4.219744e-01, 4.219908e-01, 4.220072e-01, 4.220237e-01, 4.220401e-01, 4.220566e-01, 4.220730e-01, 4.220894e-01, 4.221058e-01, 4.221223e-01, 4.221387e-01, 4.221551e-01, 4.221716e-01, 4.221880e-01, 4.222044e-01, 4.222209e-01, 4.222373e-01, 4.222537e-01, 4.222701e-01, 4.222865e-01, 4.223030e-01, 4.223194e-01, 4.223358e-01, 4.223523e-01, 4.223687e-01, 4.223851e-01, 4.224015e-01, 4.224180e-01, 4.224344e-01, 4.224508e-01, 4.224673e-01, 4.224837e-01, 4.225001e-01, 4.225165e-01, 4.225329e-01, 4.225494e-01, 4.225658e-01, 4.225822e-01, 4.225987e-01, 4.226151e-01, 4.226315e-01, 4.226479e-01, 4.226643e-01, 4.226808e-01, 4.226972e-01, 4.227136e-01, 4.227301e-01, 4.227465e-01, 4.227629e-01, 4.227793e-01, 4.227957e-01, 4.228121e-01, 4.228286e-01, 4.228450e-01, 4.228614e-01, 4.228778e-01, 4.228942e-01, 4.229107e-01, 4.229271e-01, 4.229435e-01, 4.229600e-01, 4.229764e-01, 4.229927e-01, 4.230092e-01, 4.230256e-01, 4.230420e-01, 4.230585e-01, 4.230749e-01, 4.230913e-01, 4.231077e-01, 4.231241e-01, 4.231405e-01, 4.231569e-01, 4.231734e-01, 4.231898e-01, 4.232062e-01, 4.232226e-01, 4.232390e-01, 4.232554e-01, 4.232719e-01, 4.232883e-01, 4.233047e-01, 4.233211e-01, 4.233375e-01, 4.233539e-01, 4.233704e-01, 4.233868e-01, 4.234032e-01, 4.234196e-01, 4.234360e-01, 4.234525e-01, 4.234688e-01, 4.234852e-01, 4.235017e-01, 4.235181e-01, 4.235345e-01, 4.235509e-01, 4.235674e-01, 4.235838e-01, 4.236001e-01, 4.236166e-01, 4.236330e-01, 4.236494e-01, 4.236658e-01, 4.236822e-01, 4.236987e-01, 4.237150e-01, 4.237314e-01, 4.237479e-01, 4.237643e-01, 4.237807e-01, 4.237971e-01, 4.238135e-01, 4.238299e-01, 4.238463e-01, 4.238627e-01, 4.238791e-01, 4.238956e-01, 4.239120e-01, 4.239284e-01, 4.239448e-01, 4.239612e-01, 4.239776e-01, 4.239940e-01, 4.240104e-01, 4.240268e-01, 4.240432e-01, 4.240596e-01, 4.240761e-01, 4.240924e-01, 4.241089e-01, 4.241253e-01, 4.241417e-01, 4.241581e-01, 4.241745e-01, 4.241909e-01, 4.242073e-01, 4.242237e-01, 4.242401e-01, 4.242565e-01, 4.242730e-01, 4.242893e-01, 4.243057e-01, 4.243221e-01, 4.243385e-01, 4.243549e-01, 4.243714e-01, 4.243878e-01, 4.244042e-01, 4.244205e-01, 4.244370e-01, 4.244533e-01, 4.244698e-01, 4.244862e-01, 4.245026e-01, 4.245190e-01, 4.245354e-01, 4.245518e-01, 4.245682e-01, 4.245846e-01, 4.246010e-01, 4.246174e-01, 4.246338e-01, 4.246502e-01, 4.246666e-01, 4.246830e-01, 4.246994e-01, 4.247158e-01, 4.247322e-01, 4.247486e-01, 4.247650e-01, 4.247814e-01, 4.247978e-01, 4.248142e-01, 4.248306e-01, 4.248470e-01, 4.248634e-01, 4.248798e-01, 4.248962e-01, 4.249126e-01, 4.249290e-01, 4.249454e-01, 4.249618e-01, 4.249782e-01, 4.249946e-01, 4.250109e-01, 4.250273e-01, 4.250438e-01, 4.250602e-01, 4.250765e-01, 4.250930e-01, 4.251093e-01, 4.251257e-01, 4.251421e-01, 4.251585e-01, 4.251749e-01, 4.251913e-01, 4.252077e-01, 4.252241e-01, 4.252405e-01, 4.252569e-01, 4.252733e-01, 4.252897e-01, 4.253061e-01, 4.253225e-01, 4.253388e-01, 4.253552e-01, 4.253716e-01, 4.253880e-01, 4.254044e-01, 4.254208e-01, 4.254372e-01, 4.254536e-01, 4.254700e-01, 4.254864e-01, 4.255028e-01, 4.255192e-01, 4.255356e-01, 4.255519e-01, 4.255683e-01, 4.255847e-01, 4.256011e-01, 4.256175e-01, 4.256339e-01, 4.256503e-01, 4.256667e-01, 4.256831e-01, 4.256994e-01, 4.257158e-01, 4.257322e-01, 4.257486e-01, 4.257650e-01, 4.257814e-01, 4.257978e-01, 4.258142e-01, 4.258305e-01, 4.258469e-01, 4.258633e-01, 4.258797e-01, 4.258961e-01, 4.259125e-01, 4.259289e-01, 4.259453e-01, 4.259616e-01, 4.259780e-01, 4.259944e-01, 4.260108e-01, 4.260272e-01, 4.260436e-01, 4.260600e-01, 4.260764e-01, 4.260927e-01, 4.261091e-01, 4.261255e-01, 4.261419e-01, 4.261582e-01, 4.261746e-01, 4.261910e-01, 4.262074e-01, 4.262238e-01, 4.262402e-01, 4.262565e-01, 4.262729e-01, 4.262893e-01, 4.263057e-01, 4.263221e-01, 4.263385e-01, 4.263548e-01, 4.263712e-01, 4.263876e-01, 4.264040e-01, 4.264204e-01, 4.264368e-01, 4.264531e-01, 4.264695e-01, 4.264859e-01, 4.265023e-01, 4.265186e-01, 4.265350e-01, 4.265514e-01, 4.265678e-01, 4.265842e-01, 4.266005e-01, 4.266169e-01, 4.266333e-01, 4.266497e-01, 4.266661e-01, 4.266825e-01, 4.266988e-01, 4.267152e-01, 4.267316e-01, 4.267479e-01, 4.267643e-01, 4.267807e-01, 4.267971e-01, 4.268135e-01, 4.268298e-01, 4.268462e-01, 4.268626e-01, 4.268790e-01, 4.268953e-01, 4.269117e-01, 4.269281e-01, 4.269445e-01, 4.269608e-01, 4.269772e-01, 4.269936e-01, 4.270100e-01, 4.270263e-01, 4.270427e-01, 4.270591e-01, 4.270754e-01, 4.270918e-01, 4.271082e-01, 4.271246e-01, 4.271409e-01, 4.271573e-01, 4.271737e-01, 4.271901e-01, 4.272065e-01, 4.272228e-01, 4.272392e-01, 4.272555e-01, 4.272719e-01, 4.272883e-01, 4.273047e-01, 4.273210e-01, 4.273374e-01, 4.273537e-01, 4.273701e-01, 4.273865e-01, 4.274029e-01, 4.274192e-01, 4.274356e-01, 4.274520e-01, 4.274683e-01, 4.274847e-01, 4.275011e-01, 4.275174e-01, 4.275338e-01, 4.275502e-01, 4.275666e-01, 4.275829e-01, 4.275993e-01, 4.276157e-01, 4.276320e-01, 4.276484e-01, 4.276648e-01, 4.276811e-01, 4.276975e-01, 4.277138e-01, 4.277302e-01, 4.277466e-01, 4.277630e-01, 4.277793e-01, 4.277957e-01, 4.278120e-01, 4.278284e-01, 4.278448e-01, 4.278612e-01, 4.278775e-01, 4.278939e-01, 4.279102e-01, 4.279266e-01, 4.279430e-01, 4.279594e-01, 4.279757e-01, 4.279921e-01, 4.280084e-01, 4.280248e-01, 4.280411e-01, 4.280575e-01, 4.280739e-01, 4.280902e-01, 4.281066e-01, 4.281229e-01, 4.281393e-01, 4.281557e-01, 4.281721e-01, 4.281884e-01, 4.282048e-01, 4.282211e-01, 4.282375e-01, 4.282538e-01, 4.282702e-01, 4.282866e-01, 4.283029e-01, 4.283193e-01, 4.283356e-01, 4.283520e-01, 4.283684e-01, 4.283847e-01, 4.284011e-01, 4.284174e-01, 4.284338e-01, 4.284501e-01, 4.284665e-01, 4.284829e-01, 4.284992e-01, 4.285156e-01, 4.285319e-01, 4.285483e-01, 4.285646e-01, 4.285810e-01, 4.285974e-01, 4.286137e-01, 4.286301e-01, 4.286464e-01, 4.286627e-01, 4.286791e-01, 4.286955e-01, 4.287119e-01, 4.287282e-01, 4.287445e-01, 4.287609e-01, 4.287772e-01, 4.287936e-01, 4.288100e-01, 4.288263e-01, 4.288427e-01, 4.288590e-01, 4.288754e-01, 4.288917e-01, 4.289081e-01, 4.289244e-01, 4.289408e-01, 4.289571e-01, 4.289735e-01, 4.289898e-01, 4.290062e-01, 4.290226e-01, 4.290389e-01, 4.290552e-01, 4.290716e-01, 4.290879e-01, 4.291043e-01, 4.291207e-01, 4.291370e-01, 4.291533e-01, 4.291697e-01, 4.291860e-01, 4.292024e-01, 4.292187e-01, 4.292351e-01, 4.292515e-01, 4.292678e-01, 4.292841e-01, 4.293005e-01, 4.293168e-01, 4.293332e-01, 4.293495e-01, 4.293659e-01, 4.293822e-01, 4.293986e-01, 4.294149e-01, 4.294313e-01, 4.294476e-01, 4.294640e-01, 4.294803e-01, 4.294966e-01, 4.295130e-01, 4.295293e-01, 4.295457e-01, 4.295620e-01, 4.295784e-01, 4.295947e-01, 4.296111e-01, 4.296274e-01, 4.296438e-01, 4.296601e-01, 4.296764e-01, 4.296928e-01, 4.297091e-01, 4.297255e-01, 4.297418e-01, 4.297582e-01, 4.297745e-01, 4.297908e-01, 4.298072e-01, 4.298235e-01, 4.298398e-01, 4.298562e-01, 4.298725e-01, 4.298889e-01, 4.299052e-01, 4.299216e-01, 4.299379e-01, 4.299543e-01, 4.299706e-01, 4.299869e-01, 4.300033e-01, 4.300196e-01, 4.300359e-01, 4.300523e-01, 4.300686e-01, 4.300850e-01, 4.301013e-01, 4.301176e-01, 4.301340e-01, 4.301503e-01, 4.301667e-01, 4.301830e-01, 4.301993e-01, 4.302157e-01, 4.302320e-01, 4.302483e-01, 4.302647e-01, 4.302810e-01, 4.302974e-01, 4.303137e-01, 4.303300e-01, 4.303464e-01, 4.303627e-01, 4.303791e-01, 4.303954e-01, 4.304117e-01, 4.304280e-01, 4.304444e-01, 4.304607e-01, 4.304771e-01, 4.304934e-01, 4.305097e-01, 4.305260e-01, 4.305424e-01, 4.305587e-01, 4.305751e-01, 4.305914e-01, 4.306077e-01, 4.306240e-01, 4.306404e-01, 4.306567e-01, 4.306731e-01, 4.306894e-01, 4.307057e-01, 4.307220e-01, 4.307384e-01, 4.307547e-01, 4.307711e-01, 4.307874e-01, 4.308037e-01, 4.308200e-01, 4.308363e-01, 4.308527e-01, 4.308690e-01, 4.308854e-01, 4.309017e-01, 4.309180e-01, 4.309343e-01, 4.309507e-01, 4.309670e-01, 4.309833e-01, 4.309997e-01, 4.310160e-01, 4.310323e-01, 4.310486e-01, 4.310650e-01, 4.310813e-01, 4.310977e-01, 4.311139e-01, 4.311303e-01, 4.311466e-01, 4.311630e-01, 4.311793e-01, 4.311956e-01, 4.312119e-01, 4.312283e-01, 4.312446e-01, 4.312609e-01, 4.312772e-01, 4.312935e-01, 4.313099e-01, 4.313262e-01, 4.313425e-01, 4.313588e-01, 4.313752e-01, 4.313915e-01, 4.314078e-01, 4.314241e-01, 4.314405e-01, 4.314568e-01, 4.314731e-01, 4.314894e-01, 4.315058e-01, 4.315221e-01, 4.315384e-01, 4.315547e-01, 4.315711e-01, 4.315874e-01, 4.316037e-01, 4.316200e-01, 4.316363e-01, 4.316527e-01, 4.316690e-01, 4.316853e-01, 4.317017e-01, 4.317179e-01, 4.317343e-01, 4.317506e-01, 4.317669e-01, 4.317832e-01, 4.317996e-01, 4.318159e-01, 4.318322e-01, 4.318485e-01, 4.318648e-01, 4.318812e-01, 4.318975e-01, 4.319138e-01, 4.319301e-01, 4.319464e-01, 4.319627e-01, 4.319791e-01, 4.319954e-01, 4.320117e-01, 4.320280e-01, 4.320443e-01, 4.320606e-01, 4.320770e-01, 4.320933e-01, 4.321096e-01, 4.321259e-01, 4.321422e-01, 4.321585e-01, 4.321749e-01, 4.321912e-01, 4.322075e-01, 4.322238e-01, 4.322401e-01, 4.322564e-01, 4.322728e-01, 4.322891e-01, 4.323053e-01, 4.323217e-01, 4.323380e-01, 4.323543e-01, 4.323706e-01, 4.323869e-01, 4.324032e-01, 4.324195e-01, 4.324359e-01, 4.324522e-01, 4.324685e-01, 4.324848e-01, 4.325011e-01, 4.325174e-01, 4.325337e-01, 4.325500e-01, 4.325664e-01, 4.325827e-01, 4.325990e-01, 4.326153e-01, 4.326316e-01, 4.326479e-01, 4.326642e-01, 4.326805e-01, 4.326969e-01, 4.327132e-01, 4.327295e-01, 4.327458e-01, 4.327621e-01, 4.327784e-01, 4.327947e-01, 4.328110e-01, 4.328273e-01, 4.328436e-01, 4.328600e-01, 4.328763e-01, 4.328925e-01, 4.329088e-01, 4.329252e-01, 4.329415e-01, 4.329578e-01, 4.329741e-01, 4.329904e-01, 4.330067e-01, 4.330230e-01, 4.330393e-01, 4.330556e-01, 4.330719e-01, 4.330882e-01, 4.331045e-01, 4.331208e-01, 4.331371e-01, 4.331535e-01, 4.331697e-01, 4.331860e-01, 4.332024e-01, 4.332187e-01, 4.332350e-01, 4.332513e-01, 4.332676e-01, 4.332839e-01, 4.333002e-01, 4.333165e-01, 4.333328e-01, 4.333491e-01, 4.333654e-01, 4.333817e-01, 4.333980e-01, 4.334143e-01, 4.334306e-01, 4.334469e-01, 4.334632e-01, 4.334795e-01, 4.334958e-01, 4.335121e-01, 4.335284e-01, 4.335447e-01, 4.335610e-01, 4.335773e-01, 4.335936e-01, 4.336099e-01, 4.336262e-01, 4.336425e-01, 4.336588e-01, 4.336751e-01, 4.336914e-01, 4.337077e-01, 4.337240e-01, 4.337403e-01, 4.337566e-01, 4.337729e-01, 4.337892e-01, 4.338055e-01, 4.338218e-01, 4.338381e-01, 4.338543e-01, 4.338706e-01, 4.338869e-01, 4.339032e-01, 4.339195e-01, 4.339358e-01, 4.339521e-01, 4.339684e-01, 4.339847e-01, 4.340010e-01, 4.340173e-01, 4.340336e-01, 4.340499e-01, 4.340662e-01, 4.340825e-01, 4.340988e-01, 4.341151e-01, 4.341314e-01, 4.341477e-01, 4.341640e-01, 4.341803e-01, 4.341966e-01, 4.342129e-01, 4.342291e-01, 4.342454e-01, 4.342617e-01, 4.342780e-01, 4.342943e-01, 4.343106e-01, 4.343269e-01, 4.343432e-01, 4.343595e-01, 4.343758e-01, 4.343920e-01, 4.344083e-01, 4.344246e-01, 4.344409e-01, 4.344572e-01, 4.344735e-01, 4.344898e-01, 4.345061e-01, 4.345223e-01, 4.345386e-01, 4.345549e-01, 4.345712e-01, 4.345875e-01, 4.346038e-01, 4.346201e-01, 4.346364e-01, 4.346527e-01, 4.346690e-01, 4.346853e-01, 4.347015e-01, 4.347178e-01, 4.347341e-01, 4.347504e-01, 4.347667e-01, 4.347829e-01, 4.347992e-01, 4.348155e-01, 4.348318e-01, 4.348481e-01, 4.348644e-01, 4.348807e-01, 4.348969e-01, 4.349132e-01, 4.349295e-01, 4.349458e-01, 4.349621e-01, 4.349783e-01, 4.349946e-01, 4.350109e-01, 4.350272e-01, 4.350435e-01, 4.350598e-01, 4.350761e-01, 4.350923e-01, 4.351086e-01, 4.351249e-01, 4.351412e-01, 4.351575e-01, 4.351737e-01, 4.351901e-01, 4.352063e-01, 4.352226e-01, 4.352389e-01, 4.352551e-01, 4.352714e-01, 4.352877e-01, 4.353040e-01, 4.353203e-01, 4.353365e-01, 4.353528e-01, 4.353691e-01, 4.353854e-01, 4.354017e-01, 4.354180e-01, 4.354342e-01, 4.354505e-01, 4.354668e-01, 4.354831e-01, 4.354994e-01, 4.355156e-01, 4.355319e-01, 4.355482e-01, 4.355645e-01, 4.355808e-01, 4.355970e-01, 4.356133e-01, 4.356295e-01, 4.356458e-01, 4.356621e-01, 4.356784e-01, 4.356947e-01, 4.357109e-01, 4.357272e-01, 4.357435e-01, 4.357598e-01, 4.357761e-01, 4.357923e-01, 4.358086e-01, 4.358249e-01, 4.358411e-01, 4.358574e-01, 4.358737e-01, 4.358900e-01, 4.359062e-01, 4.359225e-01, 4.359388e-01, 4.359551e-01, 4.359713e-01, 4.359876e-01, 4.360039e-01, 4.360201e-01, 4.360364e-01, 4.360527e-01, 4.360690e-01, 4.360852e-01, 4.361015e-01, 4.361178e-01, 4.361340e-01, 4.361503e-01, 4.361666e-01, 4.361829e-01, 4.361991e-01, 4.362154e-01, 4.362317e-01, 4.362479e-01, 4.362642e-01, 4.362805e-01, 4.362968e-01, 4.363130e-01, 4.363293e-01, 4.363456e-01, 4.363618e-01, 4.363781e-01, 4.363944e-01, 4.364106e-01, 4.364269e-01, 4.364432e-01, 4.364594e-01, 4.364757e-01, 4.364920e-01, 4.365082e-01, 4.365245e-01, 4.365408e-01, 4.365570e-01, 4.365733e-01, 4.365896e-01, 4.366058e-01, 4.366221e-01, 4.366384e-01, 4.366546e-01, 4.366709e-01, 4.366871e-01, 4.367034e-01, 4.367197e-01, 4.367359e-01, 4.367522e-01, 4.367685e-01, 4.367847e-01, 4.368010e-01, 4.368173e-01, 4.368335e-01, 4.368498e-01, 4.368660e-01, 4.368823e-01, 4.368986e-01, 4.369148e-01, 4.369311e-01, 4.369473e-01, 4.369636e-01, 4.369799e-01, 4.369961e-01, 4.370124e-01, 4.370286e-01, 4.370449e-01, 4.370612e-01, 4.370774e-01, 4.370937e-01, 4.371099e-01, 4.371262e-01, 4.371425e-01, 4.371587e-01, 4.371750e-01, 4.371912e-01, 4.372075e-01, 4.372238e-01, 4.372400e-01, 4.372563e-01, 4.372725e-01, 4.372888e-01, 4.373051e-01, 4.373213e-01, 4.373375e-01, 4.373538e-01, 4.373701e-01, 4.373864e-01, 4.374026e-01, 4.374189e-01, 4.374351e-01, 4.374514e-01, 4.374676e-01, 4.374839e-01, 4.375001e-01, 4.375164e-01, 4.375326e-01, 4.375489e-01, 4.375651e-01, 4.375814e-01, 4.375977e-01, 4.376139e-01, 4.376302e-01, 4.376464e-01, 4.376627e-01, 4.376789e-01, 4.376952e-01, 4.377114e-01, 4.377277e-01, 4.377440e-01, 4.377602e-01, 4.377765e-01, 4.377927e-01, 4.378090e-01, 4.378252e-01, 4.378415e-01, 4.378577e-01, 4.378740e-01, 4.378902e-01, 4.379065e-01, 4.379227e-01, 4.379389e-01, 4.379552e-01, 4.379714e-01, 4.379877e-01, 4.380040e-01, 4.380202e-01, 4.380365e-01, 4.380527e-01, 4.380690e-01, 4.380852e-01, 4.381015e-01, 4.381177e-01, 4.381340e-01, 4.381502e-01, 4.381664e-01, 4.381827e-01, 4.381989e-01, 4.382152e-01, 4.382314e-01, 4.382477e-01, 4.382640e-01, 4.382802e-01, 4.382964e-01, 4.383126e-01, 4.383289e-01, 4.383452e-01, 4.383614e-01, 4.383777e-01, 4.383939e-01, 4.384101e-01, 4.384264e-01, 4.384426e-01, 4.384589e-01, 4.384751e-01, 4.384913e-01, 4.385076e-01, 4.385239e-01, 4.385401e-01, 4.385564e-01, 4.385726e-01, 4.385888e-01, 4.386051e-01, 4.386213e-01, 4.386375e-01, 4.386538e-01, 4.386700e-01, 4.386863e-01, 4.387026e-01, 4.387188e-01, 4.387350e-01, 4.387513e-01, 4.387675e-01, 4.387837e-01, 4.388000e-01, 4.388162e-01, 4.388324e-01, 4.388487e-01, 4.388649e-01, 4.388812e-01, 4.388974e-01, 4.389136e-01, 4.389299e-01, 4.389461e-01, 4.389624e-01, 4.389786e-01, 4.389948e-01, 4.390111e-01, 4.390273e-01, 4.390436e-01, 4.390598e-01, 4.390760e-01, 4.390922e-01, 4.391085e-01, 4.391248e-01, 4.391410e-01, 4.391572e-01, 4.391735e-01, 4.391897e-01, 4.392059e-01, 4.392222e-01, 4.392384e-01, 4.392546e-01, 4.392709e-01, 4.392871e-01, 4.393033e-01, 4.393196e-01, 4.393358e-01, 4.393520e-01, 4.393683e-01, 4.393845e-01, 4.394008e-01, 4.394170e-01, 4.394332e-01, 4.394495e-01, 4.394657e-01, 4.394819e-01, 4.394981e-01, 4.395144e-01, 4.395306e-01, 4.395469e-01, 4.395631e-01, 4.395793e-01, 4.395955e-01, 4.396118e-01, 4.396280e-01, 4.396442e-01, 4.396605e-01, 4.396767e-01, 4.396929e-01, 4.397092e-01, 4.397254e-01, 4.397416e-01, 4.397578e-01, 4.397741e-01, 4.397903e-01, 4.398066e-01, 4.398228e-01, 4.398390e-01, 4.398552e-01, 4.398715e-01, 4.398877e-01, 4.399039e-01, 4.399201e-01, 4.399363e-01, 4.399526e-01, 4.399688e-01, 4.399851e-01, 4.400013e-01, 4.400175e-01, 4.400337e-01, 4.400499e-01, 4.400662e-01, 4.400824e-01, 4.400986e-01, 4.401149e-01, 4.401311e-01, 4.401473e-01, 4.401636e-01, 4.401797e-01, 4.401960e-01, 4.402122e-01, 4.402284e-01, 4.402447e-01, 4.402609e-01, 4.402771e-01, 4.402933e-01, 4.403096e-01, 4.403258e-01, 4.403420e-01, 4.403582e-01, 4.403744e-01, 4.403907e-01, 4.404069e-01, 4.404231e-01, 4.404393e-01, 4.404556e-01, 4.404718e-01, 4.404880e-01, 4.405042e-01, 4.405204e-01, 4.405366e-01, 4.405529e-01, 4.405691e-01, 4.405853e-01, 4.406015e-01, 4.406178e-01, 4.406340e-01, 4.406502e-01, 4.406664e-01, 4.406827e-01, 4.406989e-01, 4.407151e-01, 4.407313e-01, 4.407476e-01, 4.407638e-01, 4.407800e-01, 4.407962e-01, 4.408124e-01, 4.408287e-01, 4.408448e-01, 4.408610e-01, 4.408773e-01, 4.408935e-01, 4.409097e-01, 4.409259e-01, 4.409421e-01, 4.409584e-01, 4.409746e-01, 4.409908e-01, 4.410070e-01, 4.410232e-01, 4.410394e-01, 4.410557e-01, 4.410719e-01, 4.410881e-01, 4.411043e-01, 4.411205e-01, 4.411367e-01, 4.411530e-01, 4.411692e-01, 4.411854e-01, 4.412016e-01, 4.412178e-01, 4.412340e-01, 4.412502e-01, 4.412664e-01, 4.412826e-01, 4.412989e-01, 4.413151e-01, 4.413313e-01, 4.413475e-01, 4.413637e-01, 4.413799e-01, 4.413961e-01, 4.414124e-01, 4.414285e-01, 4.414448e-01, 4.414610e-01, 4.414772e-01, 4.414934e-01, 4.415096e-01, 4.415258e-01, 4.415420e-01, 4.415582e-01, 4.415745e-01, 4.415906e-01, 4.416068e-01, 4.416231e-01, 4.416393e-01, 4.416555e-01, 4.416717e-01, 4.416879e-01, 4.417041e-01, 4.417203e-01, 4.417365e-01, 4.417527e-01, 4.417689e-01, 4.417852e-01, 4.418014e-01, 4.418176e-01, 4.418338e-01, 4.418500e-01, 4.418662e-01, 4.418824e-01, 4.418986e-01, 4.419148e-01, 4.419310e-01, 4.419472e-01, 4.419634e-01, 4.419796e-01, 4.419958e-01, 4.420120e-01, 4.420283e-01, 4.420444e-01, 4.420606e-01, 4.420768e-01, 4.420930e-01, 4.421093e-01, 4.421255e-01, 4.421417e-01, 4.421578e-01, 4.421740e-01, 4.421903e-01, 4.422065e-01, 4.422227e-01, 4.422389e-01, 4.422550e-01, 4.422713e-01, 4.422875e-01, 4.423037e-01, 4.423199e-01, 4.423361e-01, 4.423523e-01, 4.423685e-01, 4.423847e-01, 4.424009e-01, 4.424171e-01, 4.424333e-01, 4.424495e-01, 4.424657e-01, 4.424819e-01, 4.424981e-01, 4.425143e-01, 4.425305e-01, 4.425467e-01, 4.425629e-01, 4.425791e-01, 4.425953e-01, 4.426115e-01, 4.426277e-01, 4.426439e-01, 4.426601e-01, 4.426762e-01, 4.426925e-01, 4.427087e-01, 4.427249e-01, 4.427410e-01, 4.427572e-01, 4.427735e-01, 4.427896e-01, 4.428058e-01, 4.428220e-01, 4.428382e-01, 4.428544e-01, 4.428706e-01, 4.428868e-01, 4.429030e-01, 4.429192e-01, 4.429354e-01, 4.429516e-01, 4.429678e-01, 4.429840e-01, 4.430002e-01, 4.430164e-01, 4.430326e-01, 4.430488e-01, 4.430649e-01, 4.430811e-01, 4.430974e-01, 4.431135e-01, 4.431297e-01, 4.431459e-01, 4.431621e-01, 4.431783e-01, 4.431945e-01, 4.432107e-01, 4.432268e-01, 4.432431e-01, 4.432592e-01, 4.432754e-01, 4.432916e-01, 4.433078e-01, 4.433240e-01, 4.433402e-01, 4.433564e-01, 4.433726e-01, 4.433888e-01, 4.434049e-01, 4.434212e-01, 4.434373e-01, 4.434535e-01, 4.434697e-01, 4.434859e-01, 4.435021e-01, 4.435183e-01, 4.435344e-01, 4.435506e-01, 4.435668e-01, 4.435830e-01, 4.435992e-01, 4.436154e-01, 4.436316e-01, 4.436478e-01, 4.436640e-01, 4.436802e-01, 4.436963e-01, 4.437125e-01, 4.437287e-01, 4.437449e-01, 4.437611e-01, 4.437772e-01, 4.437934e-01, 4.438096e-01, 4.438258e-01, 4.438420e-01, 4.438581e-01, 4.438744e-01, 4.438905e-01, 4.439067e-01, 4.439229e-01, 4.439391e-01, 4.439553e-01, 4.439715e-01, 4.439876e-01, 4.440038e-01, 4.440200e-01, 4.440362e-01, 4.440524e-01, 4.440685e-01, 4.440847e-01, 4.441009e-01, 4.441171e-01, 4.441333e-01, 4.441495e-01, 4.441656e-01, 4.441818e-01, 4.441980e-01, 4.442142e-01, 4.442303e-01, 4.442465e-01, 4.442627e-01, 4.442789e-01, 4.442951e-01, 4.443112e-01, 4.443274e-01, 4.443436e-01, 4.443598e-01, 4.443760e-01, 4.443921e-01, 4.444083e-01, 4.444245e-01, 4.444407e-01, 4.444568e-01, 4.444730e-01, 4.444892e-01, 4.445054e-01, 4.445215e-01, 4.445378e-01, 4.445539e-01, 4.445701e-01, 4.445862e-01, 4.446024e-01, 4.446186e-01, 4.446348e-01, 4.446509e-01, 4.446671e-01, 4.446833e-01, 4.446995e-01, 4.447156e-01, 4.447318e-01, 4.447480e-01, 4.447642e-01, 4.447804e-01, 4.447965e-01, 4.448127e-01, 4.448289e-01, 4.448450e-01, 4.448612e-01, 4.448774e-01, 4.448936e-01, 4.449098e-01, 4.449259e-01, 4.449421e-01, 4.449582e-01, 4.449744e-01, 4.449906e-01, 4.450067e-01, 4.450229e-01, 4.450391e-01, 4.450553e-01, 4.450715e-01, 4.450876e-01, 4.451038e-01, 4.451199e-01, 4.451361e-01, 4.451523e-01, 4.451684e-01, 4.451846e-01, 4.452008e-01, 4.452170e-01, 4.452331e-01, 4.452493e-01, 4.452655e-01, 4.452817e-01, 4.452978e-01, 4.453140e-01, 4.453301e-01, 4.453463e-01, 4.453625e-01, 4.453787e-01, 4.453948e-01, 4.454110e-01, 4.454271e-01, 4.454433e-01, 4.454595e-01, 4.454756e-01, 4.454918e-01, 4.455080e-01, 4.455242e-01, 4.455403e-01, 4.455565e-01, 4.455726e-01, 4.455888e-01, 4.456050e-01, 4.456211e-01, 4.456373e-01, 4.456534e-01, 4.456696e-01, 4.456858e-01, 4.457019e-01, 4.457181e-01, 4.457343e-01, 4.457504e-01, 4.457666e-01, 4.457828e-01, 4.457989e-01, 4.458151e-01, 4.458312e-01, 4.458474e-01, 4.458635e-01, 4.458797e-01, 4.458959e-01, 4.459121e-01, 4.459282e-01, 4.459443e-01, 4.459605e-01, 4.459767e-01, 4.459929e-01, 4.460090e-01, 4.460252e-01, 4.460413e-01, 4.460575e-01, 4.460736e-01, 4.460898e-01, 4.461060e-01, 4.461221e-01, 4.461383e-01, 4.461544e-01, 4.461706e-01, 4.461868e-01, 4.462029e-01, 4.462191e-01, 4.462352e-01, 4.462514e-01, 4.462675e-01, 4.462837e-01, 4.462999e-01, 4.463160e-01, 4.463322e-01, 4.463483e-01, 4.463645e-01, 4.463806e-01, 4.463968e-01, 4.464130e-01, 4.464291e-01, 4.464453e-01, 4.464614e-01, 4.464776e-01, 4.464937e-01, 4.465099e-01, 4.465261e-01, 4.465422e-01, 4.465583e-01, 4.465745e-01, 4.465907e-01, 4.466068e-01, 4.466229e-01, 4.466391e-01, 4.466552e-01, 4.466714e-01, 4.466876e-01, 4.467037e-01, 4.467199e-01, 4.467360e-01, 4.467522e-01, 4.467683e-01, 4.467845e-01, 4.468006e-01, 4.468168e-01, 4.468329e-01, 4.468490e-01, 4.468652e-01, 4.468814e-01, 4.468975e-01, 4.469137e-01, 4.469298e-01, 4.469460e-01, 4.469621e-01, 4.469783e-01, 4.469944e-01, 4.470105e-01, 4.470267e-01, 4.470429e-01, 4.470590e-01, 4.470751e-01, 4.470913e-01, 4.471075e-01, 4.471236e-01, 4.471398e-01, 4.471559e-01, 4.471720e-01, 4.471882e-01, 4.472043e-01, 4.472204e-01, 4.472366e-01, 4.472528e-01, 4.472689e-01, 4.472850e-01, 4.473012e-01, 4.473173e-01, 4.473335e-01, 4.473496e-01, 4.473658e-01, 4.473819e-01, 4.473981e-01, 4.474142e-01, 4.474304e-01, 4.474465e-01, 4.474626e-01, 4.474788e-01, 4.474950e-01, 4.475111e-01, 4.475272e-01, 4.475434e-01, 4.475595e-01, 4.475757e-01, 4.475918e-01, 4.476079e-01, 4.476241e-01, 4.476402e-01, 4.476564e-01, 4.476725e-01, 4.476886e-01, 4.477048e-01, 4.477209e-01, 4.477370e-01, 4.477532e-01, 4.477693e-01, 4.477855e-01, 4.478016e-01, 4.478177e-01, 4.478339e-01, 4.478500e-01, 4.478662e-01, 4.478823e-01, 4.478984e-01, 4.479146e-01, 4.479308e-01, 4.479469e-01, 4.479630e-01, 4.479792e-01, 4.479953e-01, 4.480114e-01, 4.480276e-01, 4.480437e-01, 4.480598e-01, 4.480760e-01, 4.480921e-01, 4.481082e-01, 4.481243e-01, 4.481405e-01, 4.481567e-01, 4.481728e-01, 4.481889e-01, 4.482051e-01, 4.482212e-01, 4.482373e-01, 4.482535e-01, 4.482696e-01, 4.482857e-01, 4.483019e-01, 4.483180e-01, 4.483341e-01, 4.483503e-01, 4.483664e-01, 4.483826e-01, 4.483987e-01, 4.484148e-01, 4.484309e-01, 4.484470e-01, 4.484632e-01, 4.484793e-01, 4.484954e-01, 4.485116e-01, 4.485277e-01, 4.485439e-01, 4.485600e-01, 4.485761e-01, 4.485922e-01, 4.486084e-01, 4.486245e-01, 4.486406e-01, 4.486568e-01, 4.486729e-01, 4.486890e-01, 4.487051e-01, 4.487213e-01, 4.487374e-01, 4.487536e-01, 4.487697e-01, 4.487858e-01, 4.488019e-01, 4.488181e-01, 4.488342e-01, 4.488503e-01, 4.488664e-01, 4.488826e-01, 4.488987e-01, 4.489148e-01, 4.489309e-01, 4.489471e-01, 4.489632e-01, 4.489793e-01, 4.489954e-01, 4.490116e-01, 4.490277e-01, 4.490438e-01, 4.490599e-01, 4.490761e-01, 4.490922e-01, 4.491083e-01, 4.491244e-01, 4.491406e-01, 4.491567e-01, 4.491729e-01, 4.491890e-01, 4.492051e-01, 4.492212e-01, 4.492373e-01, 4.492535e-01, 4.492696e-01, 4.492857e-01, 4.493018e-01, 4.493180e-01, 4.493341e-01, 4.493502e-01, 4.493663e-01, 4.493824e-01, 4.493985e-01, 4.494147e-01, 4.494308e-01, 4.494469e-01, 4.494630e-01, 4.494792e-01, 4.494953e-01, 4.495114e-01, 4.495275e-01, 4.495437e-01, 4.495598e-01, 4.495759e-01, 4.495920e-01, 4.496081e-01, 4.496243e-01, 4.496403e-01, 4.496565e-01, 4.496726e-01, 4.496887e-01, 4.497048e-01, 4.497209e-01, 4.497371e-01, 4.497532e-01, 4.497693e-01, 4.497854e-01, 4.498015e-01, 4.498177e-01, 4.498338e-01, 4.498499e-01, 4.498660e-01, 4.498821e-01, 4.498982e-01, 4.499144e-01, 4.499305e-01, 4.499466e-01, 4.499627e-01, 4.499788e-01, 4.499949e-01, 4.500110e-01, 4.500272e-01, 4.500433e-01, 4.500594e-01, 4.500755e-01, 4.500916e-01, 4.501078e-01, 4.501239e-01, 4.501399e-01, 4.501561e-01, 4.501722e-01, 4.501883e-01, 4.502044e-01, 4.502205e-01, 4.502366e-01, 4.502528e-01, 4.502689e-01, 4.502850e-01, 4.503011e-01, 4.503172e-01, 4.503333e-01, 4.503494e-01, 4.503655e-01, 4.503816e-01, 4.503978e-01, 4.504139e-01, 4.504299e-01, 4.504461e-01, 4.504622e-01, 4.504783e-01, 4.504944e-01, 4.505105e-01, 4.505267e-01, 4.505427e-01, 4.505589e-01, 4.505750e-01, 4.505911e-01, 4.506072e-01, 4.506233e-01, 4.506394e-01, 4.506555e-01, 4.506716e-01, 4.506877e-01, 4.507038e-01, 4.507199e-01, 4.507360e-01, 4.507522e-01, 4.507682e-01, 4.507844e-01, 4.508004e-01, 4.508166e-01, 4.508327e-01, 4.508488e-01, 4.508649e-01, 4.508810e-01, 4.508971e-01, 4.509132e-01, 4.509293e-01, 4.509454e-01, 4.509615e-01, 4.509776e-01, 4.509937e-01, 4.510098e-01, 4.510259e-01, 4.510421e-01, 4.510581e-01, 4.510742e-01, 4.510903e-01, 4.511065e-01, 4.511225e-01, 4.511386e-01, 4.511547e-01, 4.511709e-01, 4.511869e-01, 4.512030e-01, 4.512191e-01, 4.512353e-01, 4.512514e-01, 4.512675e-01, 4.512835e-01, 4.512997e-01, 4.513158e-01, 4.513319e-01, 4.513479e-01, 4.513641e-01, 4.513802e-01, 4.513963e-01, 4.514123e-01, 4.514284e-01, 4.514446e-01, 4.514607e-01, 4.514768e-01, 4.514928e-01, 4.515090e-01, 4.515251e-01, 4.515411e-01, 4.515572e-01, 4.515733e-01, 4.515895e-01, 4.516056e-01, 4.516216e-01, 4.516377e-01, 4.516538e-01, 4.516700e-01, 4.516860e-01, 4.517021e-01, 4.517182e-01, 4.517343e-01, 4.517504e-01, 4.517665e-01, 4.517826e-01, 4.517987e-01, 4.518148e-01, 4.518309e-01, 4.518470e-01, 4.518631e-01, 4.518792e-01, 4.518952e-01, 4.519114e-01, 4.519275e-01, 4.519435e-01, 4.519597e-01, 4.519757e-01, 4.519918e-01, 4.520079e-01, 4.520240e-01, 4.520401e-01, 4.520562e-01, 4.520723e-01, 4.520884e-01, 4.521045e-01, 4.521205e-01, 4.521367e-01, 4.521528e-01, 4.521688e-01, 4.521849e-01, 4.522010e-01, 4.522171e-01, 4.522332e-01, 4.522493e-01, 4.522654e-01, 4.522815e-01, 4.522976e-01, 4.523136e-01, 4.523297e-01, 4.523458e-01, 4.523619e-01, 4.523780e-01, 4.523941e-01, 4.524102e-01, 4.524263e-01, 4.524424e-01, 4.524584e-01, 4.524745e-01, 4.524906e-01, 4.525067e-01, 4.525228e-01, 4.525389e-01, 4.525550e-01, 4.525711e-01, 4.525871e-01, 4.526032e-01, 4.526193e-01, 4.526354e-01, 4.526515e-01, 4.526676e-01, 4.526837e-01, 4.526998e-01, 4.527158e-01, 4.527319e-01, 4.527480e-01, 4.527641e-01, 4.527802e-01, 4.527962e-01, 4.528123e-01, 4.528284e-01, 4.528445e-01, 4.528606e-01, 4.528767e-01, 4.528928e-01, 4.529088e-01, 4.529249e-01, 4.529410e-01, 4.529571e-01, 4.529732e-01, 4.529892e-01, 4.530053e-01, 4.530214e-01, 4.530375e-01, 4.530536e-01, 4.530696e-01, 4.530857e-01, 4.531018e-01, 4.531179e-01, 4.531339e-01, 4.531500e-01, 4.531661e-01, 4.531822e-01, 4.531983e-01, 4.532143e-01, 4.532304e-01, 4.532465e-01, 4.532626e-01, 4.532787e-01, 4.532948e-01, 4.533108e-01, 4.533269e-01, 4.533430e-01, 4.533591e-01, 4.533752e-01, 4.533912e-01, 4.534073e-01, 4.534234e-01, 4.534394e-01, 4.534555e-01, 4.534716e-01, 4.534877e-01, 4.535038e-01, 4.535199e-01, 4.535359e-01, 4.535520e-01, 4.535680e-01, 4.535841e-01, 4.536002e-01, 4.536163e-01, 4.536324e-01, 4.536484e-01, 4.536645e-01, 4.536805e-01, 4.536966e-01, 4.537127e-01, 4.537288e-01, 4.537449e-01, 4.537610e-01, 4.537770e-01, 4.537931e-01, 4.538092e-01, 4.538252e-01, 4.538413e-01, 4.538574e-01, 4.538734e-01, 4.538895e-01, 4.539056e-01, 4.539217e-01, 4.539378e-01, 4.539538e-01, 4.539699e-01, 4.539860e-01, 4.540020e-01, 4.540181e-01, 4.540341e-01, 4.540502e-01, 4.540663e-01, 4.540823e-01, 4.540984e-01, 4.541145e-01, 4.541306e-01, 4.541466e-01, 4.541627e-01, 4.541788e-01, 4.541949e-01, 4.542109e-01, 4.542270e-01, 4.542431e-01, 4.542591e-01, 4.542752e-01, 4.542913e-01, 4.543073e-01, 4.543234e-01, 4.543395e-01, 4.543555e-01, 4.543716e-01, 4.543877e-01, 4.544038e-01, 4.544198e-01, 4.544359e-01, 4.544519e-01, 4.544680e-01, 4.544841e-01, 4.545001e-01, 4.545162e-01, 4.545323e-01, 4.545483e-01, 4.545644e-01, 4.545805e-01, 4.545965e-01, 4.546126e-01, 4.546286e-01, 4.546447e-01, 4.546608e-01, 4.546768e-01, 4.546929e-01, 4.547089e-01, 4.547250e-01, 4.547411e-01, 4.547571e-01, 4.547732e-01, 4.547893e-01, 4.548053e-01, 4.548213e-01, 4.548374e-01, 4.548535e-01, 4.548696e-01, 4.548856e-01, 4.549017e-01, 4.549178e-01, 4.549338e-01, 4.549499e-01, 4.549659e-01, 4.549820e-01, 4.549980e-01, 4.550141e-01, 4.550301e-01, 4.550462e-01, 4.550623e-01, 4.550783e-01, 4.550944e-01, 4.551105e-01, 4.551265e-01, 4.551426e-01, 4.551586e-01, 4.551747e-01, 4.551907e-01, 4.552068e-01, 4.552228e-01, 4.552389e-01, 4.552550e-01, 4.552710e-01, 4.552871e-01, 4.553031e-01, 4.553192e-01, 4.553353e-01, 4.553513e-01, 4.553674e-01, 4.553834e-01, 4.553995e-01, 4.554155e-01, 4.554316e-01, 4.554476e-01, 4.554637e-01, 4.554797e-01, 4.554958e-01, 4.555118e-01, 4.555279e-01, 4.555439e-01, 4.555600e-01, 4.555761e-01, 4.555921e-01, 4.556082e-01, 4.556242e-01, 4.556403e-01, 4.556563e-01, 4.556724e-01, 4.556884e-01, 4.557045e-01, 4.557205e-01, 4.557366e-01, 4.557526e-01, 4.557687e-01, 4.557847e-01, 4.558008e-01, 4.558168e-01, 4.558329e-01, 4.558489e-01, 4.558650e-01, 4.558810e-01, 4.558971e-01, 4.559132e-01, 4.559292e-01, 4.559452e-01, 4.559613e-01, 4.559774e-01, 4.559934e-01, 4.560094e-01, 4.560255e-01, 4.560415e-01, 4.560576e-01, 4.560736e-01, 4.560896e-01, 4.561057e-01, 4.561218e-01, 4.561378e-01, 4.561538e-01, 4.561699e-01, 4.561860e-01, 4.562020e-01, 4.562180e-01, 4.562341e-01, 4.562501e-01, 4.562662e-01, 4.562822e-01, 4.562983e-01, 4.563143e-01, 4.563303e-01, 4.563464e-01, 4.563625e-01, 4.563785e-01, 4.563945e-01, 4.564106e-01, 4.564266e-01, 4.564427e-01, 4.564587e-01, 4.564748e-01, 4.564908e-01, 4.565068e-01, 4.565229e-01, 4.565389e-01, 4.565549e-01, 4.565710e-01, 4.565870e-01, 4.566031e-01, 4.566191e-01, 4.566352e-01, 4.566512e-01, 4.566672e-01, 4.566833e-01, 4.566993e-01, 4.567154e-01, 4.567314e-01, 4.567474e-01, 4.567635e-01, 4.567795e-01, 4.567955e-01, 4.568116e-01, 4.568276e-01, 4.568437e-01, 4.568597e-01, 4.568757e-01, 4.568918e-01, 4.569078e-01, 4.569238e-01, 4.569399e-01, 4.569560e-01, 4.569720e-01, 4.569880e-01, 4.570040e-01, 4.570201e-01, 4.570361e-01, 4.570521e-01, 4.570682e-01, 4.570842e-01, 4.571003e-01, 4.571163e-01, 4.571323e-01, 4.571484e-01, 4.571644e-01, 4.571804e-01, 4.571965e-01, 4.572125e-01, 4.572286e-01, 4.572446e-01, 4.572606e-01, 4.572767e-01, 4.572927e-01, 4.573087e-01, 4.573247e-01, 4.573408e-01, 4.573568e-01, 4.573728e-01, 4.573889e-01, 4.574049e-01, 4.574210e-01, 4.574370e-01, 4.574530e-01, 4.574690e-01, 4.574851e-01, 4.575011e-01, 4.575171e-01, 4.575332e-01, 4.575492e-01, 4.575652e-01, 4.575813e-01, 4.575973e-01, 4.576133e-01, 4.576294e-01, 4.576454e-01, 4.576614e-01, 4.576774e-01, 4.576935e-01, 4.577095e-01, 4.577256e-01, 4.577416e-01, 4.577576e-01, 4.577736e-01, 4.577897e-01, 4.578057e-01, 4.578217e-01, 4.578377e-01, 4.578538e-01, 4.578698e-01, 4.578858e-01, 4.579018e-01, 4.579179e-01, 4.579339e-01, 4.579499e-01, 4.579659e-01, 4.579820e-01, 4.579980e-01, 4.580140e-01, 4.580300e-01, 4.580461e-01, 4.580621e-01, 4.580781e-01, 4.580941e-01, 4.581102e-01, 4.581262e-01, 4.581422e-01, 4.581583e-01, 4.581743e-01, 4.581903e-01, 4.582063e-01, 4.582224e-01, 4.582384e-01, 4.582544e-01, 4.582704e-01, 4.582864e-01, 4.583025e-01, 4.583185e-01, 4.583345e-01, 4.583505e-01, 4.583666e-01, 4.583826e-01, 4.583986e-01, 4.584146e-01, 4.584306e-01, 4.584467e-01, 4.584627e-01, 4.584787e-01, 4.584948e-01, 4.585107e-01, 4.585268e-01, 4.585428e-01, 4.585588e-01, 4.585748e-01, 4.585908e-01, 4.586069e-01, 4.586229e-01, 4.586389e-01, 4.586549e-01, 4.586709e-01, 4.586870e-01, 4.587030e-01, 4.587190e-01, 4.587350e-01, 4.587510e-01, 4.587670e-01, 4.587831e-01, 4.587991e-01, 4.588151e-01, 4.588311e-01, 4.588471e-01, 4.588632e-01, 4.588792e-01, 4.588952e-01, 4.589112e-01, 4.589272e-01, 4.589432e-01, 4.589593e-01, 4.589753e-01, 4.589913e-01, 4.590073e-01, 4.590233e-01, 4.590393e-01, 4.590553e-01, 4.590714e-01, 4.590873e-01, 4.591034e-01, 4.591194e-01, 4.591354e-01, 4.591514e-01, 4.591675e-01, 4.591835e-01, 4.591994e-01, 4.592155e-01, 4.592315e-01, 4.592475e-01, 4.592635e-01, 4.592795e-01, 4.592955e-01, 4.593115e-01, 4.593276e-01, 4.593436e-01, 4.593596e-01, 4.593756e-01, 4.593916e-01, 4.594076e-01, 4.594236e-01, 4.594396e-01, 4.594556e-01, 4.594716e-01, 4.594876e-01, 4.595037e-01, 4.595197e-01, 4.595357e-01, 4.595517e-01, 4.595677e-01, 4.595837e-01, 4.595997e-01, 4.596157e-01, 4.596317e-01, 4.596477e-01, 4.596637e-01, 4.596798e-01, 4.596958e-01, 4.597118e-01, 4.597278e-01, 4.597438e-01, 4.597598e-01, 4.597758e-01, 4.597918e-01, 4.598078e-01, 4.598238e-01, 4.598398e-01, 4.598558e-01, 4.598719e-01, 4.598878e-01, 4.599038e-01, 4.599198e-01, 4.599358e-01, 4.599518e-01, 4.599679e-01, 4.599839e-01, 4.599999e-01, 4.600159e-01, 4.600319e-01, 4.600479e-01, 4.600639e-01, 4.600798e-01, 4.600959e-01, 4.601119e-01, 4.601279e-01, 4.601439e-01, 4.601599e-01, 4.601759e-01, 4.601919e-01, 4.602079e-01, 4.602239e-01, 4.602399e-01, 4.602559e-01, 4.602719e-01, 4.602879e-01, 4.603039e-01, 4.603199e-01, 4.603359e-01, 4.603519e-01, 4.603679e-01, 4.603839e-01, 4.603999e-01, 4.604159e-01, 4.604319e-01, 4.604479e-01, 4.604639e-01, 4.604799e-01, 4.604959e-01, 4.605119e-01, 4.605279e-01, 4.605439e-01, 4.605599e-01, 4.605759e-01, 4.605919e-01, 4.606079e-01, 4.606239e-01, 4.606399e-01, 4.606559e-01, 4.606719e-01, 4.606879e-01, 4.607038e-01, 4.607199e-01, 4.607359e-01, 4.607518e-01, 4.607678e-01, 4.607838e-01, 4.607998e-01, 4.608158e-01, 4.608318e-01, 4.608478e-01, 4.608638e-01, 4.608798e-01, 4.608958e-01, 4.609118e-01, 4.609278e-01, 4.609438e-01, 4.609598e-01, 4.609758e-01, 4.609918e-01, 4.610077e-01, 4.610237e-01, 4.610398e-01, 4.610557e-01, 4.610717e-01, 4.610877e-01, 4.611037e-01, 4.611197e-01, 4.611357e-01, 4.611517e-01, 4.611677e-01, 4.611836e-01, 4.611996e-01, 4.612156e-01, 4.612316e-01, 4.612476e-01, 4.612636e-01, 4.612796e-01, 4.612956e-01, 4.613115e-01, 4.613276e-01, 4.613436e-01, 4.613595e-01, 4.613755e-01, 4.613915e-01, 4.614075e-01, 4.614235e-01, 4.614395e-01, 4.614555e-01, 4.614715e-01, 4.614874e-01, 4.615034e-01, 4.615194e-01, 4.615354e-01, 4.615514e-01, 4.615674e-01, 4.615834e-01, 4.615993e-01, 4.616153e-01, 4.616313e-01, 4.616473e-01, 4.616633e-01, 4.616793e-01, 4.616953e-01, 4.617113e-01, 4.617272e-01, 4.617432e-01, 4.617592e-01, 4.617752e-01, 4.617912e-01, 4.618072e-01, 4.618231e-01, 4.618391e-01, 4.618551e-01, 4.618711e-01, 4.618871e-01, 4.619030e-01, 4.619190e-01, 4.619350e-01, 4.619510e-01, 4.619670e-01, 4.619830e-01, 4.619989e-01, 4.620149e-01, 4.620309e-01, 4.620469e-01, 4.620629e-01, 4.620789e-01, 4.620948e-01, 4.621108e-01, 4.621268e-01, 4.621427e-01, 4.621587e-01, 4.621747e-01, 4.621907e-01, 4.622067e-01, 4.622227e-01, 4.622386e-01, 4.622546e-01, 4.622706e-01, 4.622866e-01, 4.623026e-01, 4.623185e-01, 4.623345e-01, 4.623505e-01, 4.623665e-01, 4.623824e-01, 4.623984e-01, 4.624144e-01, 4.624304e-01, 4.624463e-01, 4.624623e-01, 4.624783e-01, 4.624943e-01, 4.625103e-01, 4.625262e-01, 4.625422e-01, 4.625582e-01, 4.625742e-01, 4.625901e-01, 4.626061e-01, 4.626221e-01, 4.626381e-01, 4.626541e-01, 4.626700e-01, 4.626860e-01, 4.627019e-01, 4.627180e-01, 4.627339e-01, 4.627499e-01, 4.627658e-01, 4.627818e-01, 4.627978e-01, 4.628138e-01, 4.628297e-01, 4.628457e-01, 4.628617e-01, 4.628777e-01, 4.628936e-01, 4.629096e-01, 4.629256e-01, 4.629415e-01, 4.629575e-01, 4.629735e-01, 4.629894e-01, 4.630054e-01, 4.630214e-01, 4.630374e-01, 4.630533e-01, 4.630693e-01, 4.630853e-01, 4.631012e-01, 4.631172e-01, 4.631332e-01, 4.631492e-01, 4.631651e-01, 4.631811e-01, 4.631971e-01, 4.632130e-01, 4.632290e-01, 4.632449e-01, 4.632609e-01, 4.632769e-01, 4.632929e-01, 4.633088e-01, 4.633248e-01, 4.633408e-01, 4.633567e-01, 4.633727e-01, 4.633887e-01, 4.634046e-01, 4.634206e-01, 4.634366e-01, 4.634525e-01, 4.634685e-01, 4.634845e-01, 4.635004e-01, 4.635164e-01, 4.635324e-01, 4.635483e-01, 4.635643e-01, 4.635803e-01, 4.635962e-01, 4.636122e-01, 4.636281e-01, 4.636441e-01, 4.636601e-01, 4.636760e-01, 4.636920e-01, 4.637080e-01, 4.637239e-01, 4.637399e-01, 4.637558e-01, 4.637718e-01, 4.637878e-01, 4.638037e-01, 4.638197e-01, 4.638357e-01, 4.638516e-01, 4.638676e-01, 4.638835e-01, 4.638995e-01, 4.639155e-01, 4.639314e-01, 4.639474e-01, 4.639633e-01, 4.639793e-01, 4.639952e-01, 4.640112e-01, 4.640272e-01, 4.640431e-01, 4.640591e-01, 4.640751e-01, 4.640910e-01, 4.641070e-01, 4.641229e-01, 4.641389e-01, 4.641549e-01, 4.641708e-01, 4.641868e-01, 4.642027e-01, 4.642187e-01, 4.642346e-01, 4.642506e-01, 4.642665e-01, 4.642825e-01, 4.642985e-01, 4.643144e-01, 4.643304e-01, 4.643463e-01, 4.643623e-01, 4.643782e-01, 4.643942e-01, 4.644101e-01, 4.644261e-01, 4.644420e-01, 4.644580e-01, 4.644740e-01, 4.644899e-01, 4.645059e-01, 4.645218e-01, 4.645378e-01, 4.645537e-01, 4.645697e-01, 4.645856e-01, 4.646016e-01, 4.646176e-01, 4.646335e-01, 4.646494e-01, 4.646654e-01, 4.646813e-01, 4.646973e-01, 4.647132e-01, 4.647292e-01, 4.647451e-01, 4.647611e-01, 4.647771e-01, 4.647930e-01, 4.648089e-01, 4.648249e-01, 4.648409e-01, 4.648568e-01, 4.648727e-01, 4.648887e-01, 4.649047e-01, 4.649206e-01, 4.649366e-01, 4.649525e-01, 4.649685e-01, 4.649844e-01, 4.650004e-01, 4.650163e-01, 4.650322e-01, 4.650482e-01, 4.650641e-01, 4.650801e-01, 4.650960e-01, 4.651120e-01, 4.651279e-01, 4.651439e-01, 4.651598e-01, 4.651757e-01, 4.651917e-01, 4.652077e-01, 4.652236e-01, 4.652396e-01, 4.652555e-01, 4.652714e-01, 4.652874e-01, 4.653033e-01, 4.653193e-01, 4.653352e-01, 4.653512e-01, 4.653671e-01, 4.653831e-01, 4.653990e-01, 4.654149e-01, 4.654309e-01, 4.654468e-01, 4.654628e-01, 4.654787e-01, 4.654947e-01, 4.655106e-01, 4.655266e-01, 4.655425e-01, 4.655584e-01, 4.655744e-01, 4.655903e-01, 4.656063e-01, 4.656222e-01, 4.656381e-01, 4.656541e-01, 4.656700e-01, 4.656860e-01, 4.657019e-01, 4.657179e-01, 4.657338e-01, 4.657497e-01, 4.657657e-01, 4.657816e-01, 4.657975e-01, 4.658135e-01, 4.658294e-01, 4.658454e-01, 4.658613e-01, 4.658772e-01, 4.658932e-01, 4.659091e-01, 4.659250e-01, 4.659410e-01, 4.659569e-01, 4.659729e-01, 4.659888e-01, 4.660048e-01, 4.660207e-01, 4.660366e-01, 4.660526e-01, 4.660685e-01, 4.660844e-01, 4.661004e-01, 4.661163e-01, 4.661322e-01, 4.661482e-01, 4.661641e-01, 4.661801e-01, 4.661960e-01, 4.662119e-01, 4.662279e-01, 4.662438e-01, 4.662597e-01, 4.662757e-01, 4.662916e-01, 4.663075e-01, 4.663235e-01, 4.663394e-01, 4.663553e-01, 4.663712e-01, 4.663872e-01, 4.664031e-01, 4.664190e-01, 4.664350e-01, 4.664509e-01, 4.664669e-01, 4.664828e-01, 4.664987e-01, 4.665146e-01, 4.665306e-01, 4.665465e-01, 4.665624e-01, 4.665784e-01, 4.665943e-01, 4.666102e-01, 4.666262e-01, 4.666421e-01, 4.666580e-01, 4.666739e-01, 4.666899e-01, 4.667058e-01, 4.667217e-01, 4.667377e-01, 4.667536e-01, 4.667695e-01, 4.667855e-01, 4.668014e-01, 4.668173e-01, 4.668332e-01, 4.668492e-01, 4.668651e-01, 4.668810e-01, 4.668970e-01, 4.669129e-01, 4.669288e-01, 4.669447e-01, 4.669607e-01, 4.669766e-01, 4.669925e-01, 4.670084e-01, 4.670244e-01, 4.670403e-01, 4.670562e-01, 4.670722e-01, 4.670881e-01, 4.671040e-01, 4.671199e-01, 4.671358e-01, 4.671518e-01, 4.671677e-01, 4.671836e-01, 4.671996e-01, 4.672154e-01, 4.672314e-01, 4.672473e-01, 4.672632e-01, 4.672791e-01, 4.672951e-01, 4.673110e-01, 4.673269e-01, 4.673429e-01, 4.673588e-01, 4.673747e-01, 4.673906e-01, 4.674065e-01, 4.674225e-01, 4.674384e-01, 4.674543e-01, 4.674702e-01, 4.674862e-01, 4.675021e-01, 4.675180e-01, 4.675339e-01, 4.675498e-01, 4.675657e-01, 4.675817e-01, 4.675976e-01, 4.676135e-01, 4.676294e-01, 4.676453e-01, 4.676613e-01, 4.676772e-01, 4.676931e-01, 4.677090e-01, 4.677249e-01, 4.677409e-01, 4.677568e-01, 4.677727e-01, 4.677886e-01, 4.678046e-01, 4.678205e-01, 4.678364e-01, 4.678523e-01, 4.678682e-01, 4.678841e-01, 4.679000e-01, 4.679160e-01, 4.679319e-01, 4.679478e-01, 4.679637e-01, 4.679796e-01, 4.679955e-01, 4.680114e-01, 4.680274e-01, 4.680433e-01, 4.680592e-01, 4.680751e-01, 4.680910e-01, 4.681069e-01, 4.681228e-01, 4.681388e-01, 4.681547e-01, 4.681706e-01, 4.681865e-01, 4.682024e-01, 4.682183e-01, 4.682342e-01, 4.682502e-01, 4.682661e-01, 4.682820e-01, 4.682979e-01, 4.683138e-01, 4.683297e-01, 4.683456e-01, 4.683615e-01, 4.683774e-01, 4.683934e-01, 4.684093e-01, 4.684252e-01, 4.684411e-01, 4.684570e-01, 4.684729e-01, 4.684888e-01, 4.685047e-01, 4.685206e-01, 4.685366e-01, 4.685525e-01, 4.685684e-01, 4.685843e-01, 4.686002e-01, 4.686161e-01, 4.686320e-01, 4.686479e-01, 4.686638e-01, 4.686797e-01, 4.686956e-01, 4.687116e-01, 4.687274e-01, 4.687434e-01, 4.687593e-01, 4.687752e-01, 4.687911e-01, 4.688070e-01, 4.688229e-01, 4.688388e-01, 4.688547e-01, 4.688706e-01, 4.688865e-01, 4.689024e-01, 4.689183e-01, 4.689342e-01, 4.689501e-01, 4.689660e-01, 4.689820e-01, 4.689978e-01, 4.690138e-01, 4.690297e-01, 4.690455e-01, 4.690614e-01, 4.690773e-01, 4.690933e-01, 4.691092e-01, 4.691251e-01, 4.691410e-01, 4.691569e-01, 4.691727e-01, 4.691887e-01, 4.692046e-01, 4.692205e-01, 4.692364e-01, 4.692523e-01, 4.692682e-01, 4.692841e-01, 4.693000e-01, 4.693159e-01, 4.693318e-01, 4.693477e-01, 4.693636e-01, 4.693795e-01, 4.693954e-01, 4.694113e-01, 4.694272e-01, 4.694431e-01, 4.694590e-01, 4.694749e-01, 4.694908e-01, 4.695067e-01, 4.695226e-01, 4.695385e-01, 4.695544e-01, 4.695703e-01, 4.695862e-01, 4.696021e-01, 4.696180e-01, 4.696339e-01, 4.696498e-01, 4.696656e-01, 4.696816e-01, 4.696975e-01, 4.697133e-01, 4.697292e-01, 4.697452e-01, 4.697610e-01, 4.697769e-01, 4.697928e-01, 4.698088e-01, 4.698246e-01, 4.698405e-01, 4.698564e-01, 4.698723e-01, 4.698882e-01, 4.699041e-01, 4.699200e-01, 4.699359e-01, 4.699518e-01, 4.699677e-01, 4.699836e-01, 4.699995e-01, 4.700153e-01, 4.700313e-01, 4.700471e-01, 4.700630e-01, 4.700789e-01, 4.700948e-01, 4.701107e-01, 4.701266e-01, 4.701425e-01, 4.701584e-01, 4.701743e-01, 4.701902e-01, 4.702061e-01, 4.702219e-01, 4.702379e-01, 4.702537e-01, 4.702696e-01, 4.702855e-01, 4.703014e-01, 4.703173e-01, 4.703332e-01, 4.703491e-01, 4.703649e-01, 4.703808e-01, 4.703967e-01, 4.704126e-01, 4.704285e-01, 4.704444e-01, 4.704603e-01, 4.704762e-01, 4.704921e-01, 4.705079e-01, 4.705239e-01, 4.705397e-01, 4.705556e-01, 4.705715e-01, 4.705874e-01, 4.706033e-01, 4.706192e-01, 4.706350e-01, 4.706509e-01, 4.706668e-01, 4.706827e-01, 4.706986e-01, 4.707145e-01, 4.707304e-01, 4.707462e-01, 4.707621e-01, 4.707780e-01, 4.707939e-01, 4.708098e-01, 4.708257e-01, 4.708416e-01, 4.708574e-01, 4.708733e-01, 4.708892e-01, 4.709051e-01, 4.709210e-01, 4.709369e-01, 4.709527e-01, 4.709686e-01, 4.709845e-01, 4.710004e-01, 4.710163e-01, 4.710321e-01, 4.710480e-01, 4.710639e-01, 4.710798e-01, 4.710957e-01, 4.711116e-01, 4.711274e-01, 4.711433e-01, 4.711592e-01, 4.711751e-01, 4.711910e-01, 4.712068e-01, 4.712227e-01, 4.712386e-01, 4.712545e-01, 4.712704e-01, 4.712862e-01, 4.713021e-01, 4.713180e-01, 4.713338e-01, 4.713497e-01, 4.713656e-01, 4.713815e-01, 4.713974e-01, 4.714133e-01, 4.714291e-01, 4.714450e-01, 4.714609e-01, 4.714768e-01, 4.714926e-01, 4.715085e-01, 4.715244e-01, 4.715403e-01, 4.715561e-01, 4.715720e-01, 4.715879e-01, 4.716038e-01, 4.716196e-01, 4.716356e-01, 4.716514e-01, 4.716673e-01, 4.716831e-01, 4.716990e-01, 4.717149e-01, 4.717308e-01, 4.717467e-01, 4.717625e-01, 4.717784e-01, 4.717943e-01, 4.718102e-01, 4.718260e-01, 4.718419e-01, 4.718578e-01, 4.718736e-01, 4.718895e-01, 4.719054e-01, 4.719213e-01, 4.719371e-01, 4.719530e-01, 4.719689e-01, 4.719847e-01, 4.720006e-01, 4.720165e-01, 4.720324e-01, 4.720482e-01, 4.720641e-01, 4.720800e-01, 4.720958e-01, 4.721117e-01, 4.721276e-01, 4.721434e-01, 4.721593e-01, 4.721752e-01, 4.721910e-01, 4.722069e-01, 4.722228e-01, 4.722387e-01, 4.722545e-01, 4.722704e-01, 4.722863e-01, 4.723021e-01, 4.723180e-01, 4.723339e-01, 4.723497e-01, 4.723656e-01, 4.723815e-01, 4.723974e-01, 4.724132e-01, 4.724291e-01, 4.724450e-01, 4.724608e-01, 4.724767e-01, 4.724925e-01, 4.725084e-01, 4.725243e-01, 4.725401e-01, 4.725560e-01, 4.725718e-01, 4.725877e-01, 4.726036e-01, 4.726195e-01, 4.726353e-01, 4.726512e-01, 4.726671e-01, 4.726829e-01, 4.726988e-01, 4.727147e-01, 4.727305e-01, 4.727463e-01, 4.727622e-01, 4.727781e-01, 4.727939e-01, 4.728098e-01, 4.728257e-01, 4.728415e-01, 4.728574e-01, 4.728733e-01, 4.728891e-01, 4.729050e-01, 4.729209e-01, 4.729367e-01, 4.729525e-01, 4.729684e-01, 4.729843e-01, 4.730001e-01, 4.730160e-01, 4.730319e-01, 4.730477e-01, 4.730636e-01, 4.730794e-01, 4.730953e-01, 4.731112e-01, 4.731270e-01, 4.731429e-01, 4.731587e-01, 4.731746e-01, 4.731904e-01, 4.732063e-01, 4.732222e-01, 4.732381e-01, 4.732539e-01, 4.732697e-01, 4.732856e-01, 4.733015e-01, 4.733173e-01, 4.733332e-01, 4.733490e-01, 4.733649e-01, 4.733807e-01, 4.733966e-01, 4.734124e-01, 4.734283e-01, 4.734442e-01, 4.734600e-01, 4.734759e-01, 4.734917e-01, 4.735076e-01, 4.735234e-01, 4.735393e-01, 4.735551e-01, 4.735710e-01, 4.735869e-01, 4.736027e-01, 4.736185e-01, 4.736344e-01, 4.736503e-01, 4.736661e-01, 4.736820e-01, 4.736978e-01, 4.737137e-01, 4.737295e-01, 4.737454e-01, 4.737613e-01, 4.737771e-01, 4.737929e-01, 4.738088e-01, 4.738246e-01, 4.738405e-01, 4.738564e-01, 4.738722e-01, 4.738880e-01, 4.739039e-01, 4.739197e-01, 4.739356e-01, 4.739514e-01, 4.739673e-01, 4.739831e-01, 4.739990e-01, 4.740148e-01, 4.740307e-01, 4.740465e-01, 4.740624e-01, 4.740782e-01, 4.740941e-01, 4.741099e-01, 4.741258e-01, 4.741416e-01, 4.741575e-01, 4.741733e-01, 4.741891e-01, 4.742050e-01, 4.742209e-01, 4.742367e-01, 4.742526e-01, 4.742684e-01, 4.742843e-01, 4.743001e-01, 4.743159e-01, 4.743318e-01, 4.743476e-01, 4.743635e-01, 4.743793e-01, 4.743952e-01, 4.744110e-01, 4.744269e-01, 4.744427e-01, 4.744585e-01, 4.744744e-01, 4.744903e-01, 4.745061e-01, 4.745219e-01, 4.745378e-01, 4.745536e-01, 4.745694e-01, 4.745853e-01, 4.746011e-01, 4.746170e-01, 4.746328e-01, 4.746486e-01, 4.746645e-01, 4.746803e-01, 4.746962e-01, 4.747120e-01, 4.747279e-01, 4.747437e-01, 4.747596e-01, 4.747754e-01, 4.747912e-01, 4.748071e-01, 4.748229e-01, 4.748388e-01, 4.748546e-01, 4.748704e-01, 4.748863e-01, 4.749021e-01, 4.749180e-01, 4.749338e-01, 4.749496e-01, 4.749655e-01, 4.749813e-01, 4.749971e-01, 4.750130e-01, 4.750288e-01, 4.750447e-01, 4.750605e-01, 4.750763e-01, 4.750922e-01, 4.751080e-01, 4.751238e-01, 4.751397e-01, 4.751555e-01, 4.751713e-01, 4.751872e-01, 4.752030e-01, 4.752189e-01, 4.752347e-01, 4.752505e-01, 4.752664e-01, 4.752822e-01, 4.752980e-01, 4.753139e-01, 4.753297e-01, 4.753456e-01, 4.753614e-01, 4.753772e-01, 4.753930e-01, 4.754089e-01, 4.754247e-01, 4.754405e-01, 4.754564e-01, 4.754722e-01, 4.754880e-01, 4.755039e-01, 4.755197e-01, 4.755355e-01, 4.755514e-01, 4.755672e-01, 4.755830e-01, 4.755989e-01, 4.756147e-01, 4.756305e-01, 4.756463e-01, 4.756622e-01, 4.756781e-01, 4.756939e-01, 4.757097e-01, 4.757255e-01, 4.757413e-01, 4.757572e-01, 4.757730e-01, 4.757888e-01, 4.758047e-01, 4.758205e-01, 4.758363e-01, 4.758521e-01, 4.758680e-01, 4.758838e-01, 4.758996e-01, 4.759155e-01, 4.759313e-01, 4.759471e-01, 4.759629e-01, 4.759788e-01, 4.759946e-01, 4.760104e-01, 4.760263e-01, 4.760421e-01, 4.760579e-01, 4.760737e-01, 4.760896e-01, 4.761054e-01, 4.761212e-01, 4.761370e-01, 4.761529e-01, 4.761687e-01, 4.761845e-01, 4.762003e-01, 4.762162e-01, 4.762320e-01, 4.762478e-01, 4.762636e-01, 4.762795e-01, 4.762953e-01, 4.763111e-01, 4.763269e-01, 4.763428e-01, 4.763586e-01, 4.763744e-01, 4.763902e-01, 4.764060e-01, 4.764219e-01, 4.764377e-01, 4.764535e-01, 4.764693e-01, 4.764852e-01, 4.765010e-01, 4.765168e-01, 4.765326e-01, 4.765484e-01, 4.765643e-01, 4.765801e-01, 4.765959e-01, 4.766117e-01, 4.766276e-01, 4.766434e-01, 4.766592e-01, 4.766750e-01, 4.766909e-01, 4.767067e-01, 4.767225e-01, 4.767383e-01, 4.767541e-01, 4.767699e-01, 4.767857e-01, 4.768016e-01, 4.768174e-01, 4.768332e-01, 4.768490e-01, 4.768648e-01, 4.768807e-01, 4.768965e-01, 4.769123e-01, 4.769281e-01, 4.769439e-01, 4.769597e-01, 4.769756e-01, 4.769914e-01, 4.770072e-01, 4.770230e-01, 4.770388e-01, 4.770546e-01, 4.770705e-01, 4.770863e-01, 4.771021e-01, 4.771179e-01, 4.771337e-01, 4.771495e-01, 4.771653e-01, 4.771812e-01, 4.771970e-01, 4.772128e-01, 4.772286e-01, 4.772444e-01, 4.772602e-01, 4.772761e-01, 4.772919e-01, 4.773077e-01, 4.773235e-01, 4.773393e-01, 4.773551e-01, 4.773709e-01, 4.773867e-01, 4.774026e-01, 4.774183e-01, 4.774342e-01, 4.774500e-01, 4.774658e-01, 4.774816e-01, 4.774974e-01, 4.775132e-01, 4.775290e-01, 4.775448e-01, 4.775606e-01, 4.775765e-01, 4.775923e-01, 4.776081e-01, 4.776239e-01, 4.776397e-01, 4.776555e-01, 4.776713e-01, 4.776872e-01, 4.777029e-01, 4.777187e-01, 4.777346e-01, 4.777504e-01, 4.777662e-01, 4.777820e-01, 4.777978e-01, 4.778136e-01, 4.778294e-01, 4.778452e-01, 4.778610e-01, 4.778768e-01, 4.778926e-01, 4.779084e-01, 4.779242e-01, 4.779401e-01, 4.779559e-01, 4.779716e-01, 4.779875e-01, 4.780032e-01, 4.780191e-01, 4.780349e-01, 4.780507e-01, 4.780665e-01, 4.780823e-01, 4.780981e-01, 4.781139e-01, 4.781297e-01, 4.781455e-01, 4.781613e-01, 4.781771e-01, 4.781929e-01, 4.782087e-01, 4.782245e-01, 4.782403e-01, 4.782561e-01, 4.782719e-01, 4.782878e-01, 4.783035e-01, 4.783193e-01, 4.783351e-01, 4.783510e-01, 4.783667e-01, 4.783826e-01, 4.783983e-01, 4.784141e-01, 4.784299e-01, 4.784458e-01, 4.784615e-01, 4.784774e-01, 4.784932e-01, 4.785089e-01, 4.785247e-01, 4.785406e-01, 4.785563e-01, 4.785721e-01, 4.785880e-01, 4.786037e-01, 4.786195e-01, 4.786353e-01, 4.786511e-01, 4.786669e-01, 4.786828e-01, 4.786985e-01, 4.787143e-01, 4.787301e-01, 4.787459e-01, 4.787617e-01, 4.787775e-01, 4.787933e-01, 4.788091e-01, 4.788249e-01, 4.788407e-01, 4.788565e-01, 4.788723e-01, 4.788881e-01, 4.789039e-01, 4.789197e-01, 4.789355e-01, 4.789512e-01, 4.789671e-01, 4.789829e-01, 4.789986e-01, 4.790145e-01, 4.790303e-01, 4.790460e-01, 4.790618e-01, 4.790776e-01, 4.790934e-01, 4.791092e-01, 4.791250e-01, 4.791408e-01, 4.791566e-01, 4.791724e-01, 4.791882e-01, 4.792040e-01, 4.792198e-01, 4.792356e-01, 4.792513e-01, 4.792672e-01, 4.792829e-01, 4.792987e-01, 4.793145e-01, 4.793303e-01, 4.793461e-01, 4.793619e-01, 4.793777e-01, 4.793935e-01, 4.794092e-01, 4.794250e-01, 4.794408e-01, 4.794566e-01, 4.794724e-01, 4.794882e-01, 4.795040e-01, 4.795198e-01, 4.795356e-01, 4.795513e-01, 4.795671e-01, 4.795829e-01, 4.795987e-01, 4.796145e-01, 4.796303e-01, 4.796461e-01, 4.796619e-01, 4.796777e-01, 4.796934e-01, 4.797092e-01, 4.797250e-01, 4.797408e-01, 4.797566e-01, 4.797724e-01, 4.797882e-01, 4.798039e-01, 4.798197e-01, 4.798355e-01, 4.798513e-01, 4.798671e-01, 4.798828e-01, 4.798987e-01, 4.799145e-01, 4.799302e-01, 4.799460e-01, 4.799618e-01, 4.799776e-01, 4.799933e-01, 4.800091e-01, 4.800249e-01, 4.800407e-01, 4.800565e-01, 4.800723e-01, 4.800881e-01, 4.801039e-01, 4.801196e-01, 4.801354e-01, 4.801512e-01, 4.801670e-01, 4.801827e-01, 4.801985e-01, 4.802143e-01, 4.802301e-01, 4.802459e-01, 4.802616e-01, 4.802774e-01, 4.802932e-01, 4.803090e-01, 4.803247e-01, 4.803405e-01, 4.803563e-01, 4.803721e-01, 4.803879e-01, 4.804037e-01, 4.804194e-01, 4.804352e-01, 4.804510e-01, 4.804668e-01, 4.804825e-01, 4.804983e-01, 4.805141e-01, 4.805299e-01, 4.805457e-01, 4.805614e-01, 4.805772e-01, 4.805930e-01, 4.806088e-01, 4.806246e-01, 4.806404e-01, 4.806561e-01, 4.806719e-01, 4.806877e-01, 4.807034e-01, 4.807192e-01, 4.807350e-01, 4.807508e-01, 4.807665e-01, 4.807823e-01, 4.807981e-01, 4.808139e-01, 4.808297e-01, 4.808454e-01, 4.808612e-01, 4.808770e-01, 4.808927e-01, 4.809085e-01, 4.809243e-01, 4.809401e-01, 4.809558e-01, 4.809716e-01, 4.809874e-01, 4.810031e-01, 4.810189e-01, 4.810347e-01, 4.810505e-01, 4.810662e-01, 4.810820e-01, 4.810978e-01, 4.811136e-01, 4.811293e-01, 4.811451e-01, 4.811608e-01, 4.811766e-01, 4.811924e-01, 4.812082e-01, 4.812239e-01, 4.812397e-01, 4.812555e-01, 4.812713e-01, 4.812870e-01, 4.813028e-01, 4.813186e-01, 4.813343e-01, 4.813501e-01, 4.813659e-01, 4.813816e-01, 4.813974e-01, 4.814132e-01, 4.814289e-01, 4.814447e-01, 4.814605e-01, 4.814762e-01, 4.814920e-01, 4.815078e-01, 4.815236e-01, 4.815393e-01, 4.815551e-01, 4.815709e-01, 4.815866e-01, 4.816024e-01, 4.816181e-01, 4.816339e-01, 4.816497e-01, 4.816654e-01, 4.816812e-01, 4.816970e-01, 4.817127e-01, 4.817285e-01, 4.817443e-01, 4.817600e-01, 4.817758e-01, 4.817916e-01, 4.818073e-01, 4.818231e-01, 4.818389e-01, 4.818546e-01, 4.818704e-01, 4.818861e-01, 4.819019e-01, 4.819176e-01, 4.819334e-01, 4.819492e-01, 4.819649e-01, 4.819807e-01, 4.819965e-01, 4.820122e-01, 4.820280e-01, 4.820438e-01, 4.820595e-01, 4.820753e-01, 4.820910e-01, 4.821068e-01, 4.821225e-01, 4.821383e-01, 4.821541e-01, 4.821698e-01, 4.821856e-01, 4.822013e-01, 4.822171e-01, 4.822329e-01, 4.822486e-01, 4.822644e-01, 4.822802e-01, 4.822959e-01, 4.823117e-01, 4.823274e-01, 4.823432e-01, 4.823589e-01, 4.823747e-01, 4.823904e-01, 4.824062e-01, 4.824220e-01, 4.824377e-01, 4.824535e-01, 4.824693e-01, 4.824850e-01, 4.825008e-01, 4.825165e-01, 4.825322e-01, 4.825480e-01, 4.825638e-01, 4.825795e-01, 4.825953e-01, 4.826111e-01, 4.826268e-01, 4.826425e-01, 4.826583e-01, 4.826740e-01, 4.826898e-01, 4.827056e-01, 4.827213e-01, 4.827371e-01, 4.827528e-01, 4.827686e-01, 4.827843e-01, 4.828001e-01, 4.828158e-01, 4.828316e-01, 4.828474e-01, 4.828631e-01, 4.828788e-01, 4.828946e-01, 4.829103e-01, 4.829261e-01, 4.829419e-01, 4.829576e-01, 4.829733e-01, 4.829891e-01, 4.830048e-01, 4.830206e-01, 4.830364e-01, 4.830521e-01, 4.830678e-01, 4.830836e-01, 4.830993e-01, 4.831151e-01, 4.831309e-01, 4.831466e-01, 4.831623e-01, 4.831781e-01, 4.831938e-01, 4.832096e-01, 4.832253e-01, 4.832411e-01, 4.832568e-01, 4.832726e-01, 4.832883e-01, 4.833041e-01, 4.833198e-01, 4.833356e-01, 4.833513e-01, 4.833671e-01, 4.833828e-01, 4.833986e-01, 4.834143e-01, 4.834301e-01, 4.834458e-01, 4.834616e-01, 4.834773e-01, 4.834930e-01, 4.835088e-01, 4.835245e-01, 4.835403e-01, 4.835560e-01, 4.835717e-01, 4.835875e-01, 4.836033e-01, 4.836190e-01, 4.836347e-01, 4.836505e-01, 4.836662e-01, 4.836820e-01, 4.836977e-01, 4.837134e-01, 4.837292e-01, 4.837449e-01, 4.837607e-01, 4.837764e-01, 4.837922e-01, 4.838079e-01, 4.838237e-01, 4.838394e-01, 4.838551e-01, 4.838709e-01, 4.838866e-01, 4.839023e-01, 4.839181e-01, 4.839339e-01, 4.839496e-01, 4.839653e-01, 4.839811e-01, 4.839968e-01, 4.840125e-01, 4.840283e-01, 4.840440e-01, 4.840598e-01, 4.840755e-01, 4.840912e-01, 4.841070e-01, 4.841227e-01, 4.841384e-01, 4.841542e-01, 4.841699e-01, 4.841857e-01, 4.842014e-01, 4.842172e-01, 4.842329e-01, 4.842486e-01, 4.842644e-01, 4.842801e-01, 4.842958e-01, 4.843116e-01, 4.843273e-01, 4.843431e-01, 4.843588e-01, 4.843745e-01, 4.843903e-01, 4.844060e-01, 4.844217e-01, 4.844374e-01, 4.844531e-01, 4.844689e-01, 4.844846e-01, 4.845004e-01, 4.845161e-01, 4.845318e-01, 4.845476e-01, 4.845633e-01, 4.845791e-01, 4.845948e-01, 4.846105e-01, 4.846263e-01, 4.846420e-01, 4.846577e-01, 4.846734e-01, 4.846891e-01, 4.847049e-01, 4.847206e-01, 4.847364e-01, 4.847521e-01, 4.847679e-01, 4.847836e-01, 4.847993e-01, 4.848150e-01, 4.848307e-01, 4.848465e-01, 4.848622e-01, 4.848779e-01, 4.848937e-01, 4.849094e-01, 4.849251e-01, 4.849409e-01, 4.849566e-01, 4.849723e-01, 4.849881e-01, 4.850038e-01, 4.850195e-01, 4.850352e-01, 4.850510e-01, 4.850667e-01, 4.850824e-01, 4.850981e-01, 4.851139e-01, 4.851296e-01, 4.851453e-01, 4.851611e-01, 4.851768e-01, 4.851925e-01, 4.852082e-01, 4.852240e-01, 4.852397e-01, 4.852554e-01, 4.852712e-01, 4.852869e-01, 4.853026e-01, 4.853183e-01, 4.853340e-01, 4.853498e-01, 4.853655e-01, 4.853812e-01, 4.853970e-01, 4.854127e-01, 4.854284e-01, 4.854441e-01, 4.854599e-01, 4.854755e-01, 4.854913e-01, 4.855070e-01, 4.855227e-01, 4.855385e-01, 4.855542e-01, 4.855699e-01, 4.855856e-01, 4.856014e-01, 4.856171e-01, 4.856328e-01, 4.856485e-01, 4.856642e-01, 4.856800e-01, 4.856957e-01, 4.857114e-01, 4.857271e-01, 4.857429e-01, 4.857585e-01, 4.857743e-01, 4.857900e-01, 4.858057e-01, 4.858215e-01, 4.858372e-01, 4.858529e-01, 4.858686e-01, 4.858843e-01, 4.859000e-01, 4.859158e-01, 4.859315e-01, 4.859472e-01, 4.859629e-01, 4.859786e-01, 4.859943e-01, 4.860101e-01, 4.860258e-01, 4.860415e-01, 4.860573e-01, 4.860729e-01, 4.860887e-01, 4.861044e-01, 4.861201e-01, 4.861358e-01, 4.861515e-01, 4.861673e-01, 4.861830e-01, 4.861987e-01, 4.862144e-01, 4.862301e-01, 4.862458e-01, 4.862615e-01, 4.862773e-01, 4.862930e-01, 4.863087e-01, 4.863244e-01, 4.863401e-01, 4.863558e-01, 4.863715e-01, 4.863872e-01, 4.864030e-01, 4.864187e-01, 4.864344e-01, 4.864501e-01, 4.864658e-01, 4.864815e-01, 4.864973e-01, 4.865130e-01, 4.865287e-01, 4.865444e-01, 4.865601e-01, 4.865758e-01, 4.865915e-01, 4.866072e-01, 4.866229e-01, 4.866387e-01, 4.866544e-01, 4.866700e-01, 4.866858e-01, 4.867015e-01, 4.867172e-01, 4.867329e-01, 4.867486e-01, 4.867643e-01, 4.867800e-01, 4.867957e-01, 4.868115e-01, 4.868272e-01, 4.868428e-01, 4.868586e-01, 4.868743e-01, 4.868900e-01, 4.869057e-01, 4.869214e-01, 4.869371e-01, 4.869528e-01, 4.869685e-01, 4.869843e-01, 4.870000e-01, 4.870157e-01, 4.870313e-01, 4.870471e-01, 4.870628e-01, 4.870785e-01, 4.870942e-01, 4.871099e-01, 4.871256e-01, 4.871413e-01, 4.871570e-01, 4.871727e-01, 4.871884e-01, 4.872041e-01, 4.872198e-01, 4.872355e-01, 4.872512e-01, 4.872670e-01, 4.872827e-01, 4.872983e-01, 4.873140e-01, 4.873298e-01, 4.873455e-01, 4.873612e-01, 4.873769e-01, 4.873925e-01, 4.874083e-01, 4.874240e-01, 4.874397e-01, 4.874554e-01, 4.874711e-01, 4.874868e-01, 4.875025e-01, 4.875182e-01, 4.875339e-01, 4.875496e-01, 4.875653e-01, 4.875810e-01, 4.875967e-01, 4.876124e-01, 4.876281e-01, 4.876438e-01, 4.876595e-01, 4.876752e-01, 4.876909e-01, 4.877066e-01, 4.877223e-01, 4.877380e-01, 4.877537e-01, 4.877694e-01, 4.877851e-01, 4.878008e-01, 4.878165e-01, 4.878322e-01, 4.878479e-01, 4.878636e-01, 4.878793e-01, 4.878950e-01, 4.879107e-01, 4.879264e-01, 4.879421e-01, 4.879578e-01, 4.879735e-01, 4.879892e-01, 4.880049e-01, 4.880205e-01, 4.880362e-01, 4.880519e-01, 4.880676e-01, 4.880833e-01, 4.880990e-01, 4.881147e-01, 4.881304e-01, 4.881461e-01, 4.881618e-01, 4.881775e-01, 4.881932e-01, 4.882089e-01, 4.882246e-01, 4.882402e-01, 4.882559e-01, 4.882717e-01, 4.882873e-01, 4.883030e-01, 4.883187e-01, 4.883344e-01, 4.883501e-01, 4.883658e-01, 4.883815e-01, 4.883972e-01, 4.884129e-01, 4.884286e-01, 4.884443e-01, 4.884600e-01, 4.884757e-01, 4.884914e-01, 4.885070e-01, 4.885227e-01, 4.885384e-01, 4.885541e-01, 4.885698e-01, 4.885855e-01, 4.886011e-01, 4.886169e-01, 4.886326e-01, 4.886482e-01, 4.886639e-01, 4.886796e-01, 4.886953e-01, 4.887110e-01, 4.887267e-01, 4.887424e-01, 4.887581e-01, 4.887737e-01, 4.887894e-01, 4.888051e-01, 4.888208e-01, 4.888365e-01, 4.888522e-01, 4.888678e-01, 4.888836e-01, 4.888993e-01, 4.889149e-01, 4.889306e-01, 4.889463e-01, 4.889620e-01, 4.889777e-01, 4.889934e-01, 4.890091e-01, 4.890247e-01, 4.890404e-01, 4.890561e-01, 4.890718e-01, 4.890875e-01, 4.891031e-01, 4.891188e-01, 4.891345e-01, 4.891502e-01, 4.891659e-01, 4.891815e-01, 4.891973e-01, 4.892130e-01, 4.892286e-01, 4.892443e-01, 4.892600e-01, 4.892757e-01, 4.892914e-01, 4.893070e-01, 4.893227e-01, 4.893384e-01, 4.893540e-01, 4.893698e-01, 4.893855e-01, 4.894011e-01, 4.894168e-01, 4.894325e-01, 4.894482e-01, 4.894638e-01, 4.894795e-01, 4.894952e-01, 4.895109e-01, 4.895266e-01, 4.895422e-01, 4.895580e-01, 4.895736e-01, 4.895893e-01, 4.896050e-01, 4.896206e-01, 4.896363e-01, 4.896520e-01, 4.896677e-01, 4.896834e-01, 4.896990e-01, 4.897147e-01, 4.897304e-01, 4.897461e-01, 4.897617e-01, 4.897774e-01, 4.897931e-01, 4.898088e-01, 4.898244e-01, 4.898401e-01, 4.898558e-01, 4.898715e-01, 4.898871e-01, 4.899028e-01, 4.899185e-01, 4.899341e-01, 4.899499e-01, 4.899656e-01, 4.899812e-01, 4.899969e-01, 4.900125e-01, 4.900282e-01, 4.900439e-01, 4.900596e-01, 4.900752e-01, 4.900909e-01, 4.901066e-01, 4.901223e-01, 4.901380e-01, 4.901536e-01, 4.901693e-01, 4.901850e-01, 4.902006e-01, 4.902163e-01, 4.902320e-01, 4.902476e-01, 4.902633e-01, 4.902790e-01, 4.902947e-01, 4.903103e-01, 4.903260e-01, 4.903417e-01, 4.903573e-01, 4.903730e-01, 4.903887e-01, 4.904044e-01, 4.904200e-01, 4.904357e-01, 4.904514e-01, 4.904670e-01, 4.904827e-01, 4.904984e-01, 4.905140e-01, 4.905297e-01, 4.905454e-01, 4.905610e-01, 4.905767e-01, 4.905924e-01, 4.906080e-01, 4.906237e-01, 4.906394e-01, 4.906551e-01, 4.906707e-01, 4.906864e-01, 4.907021e-01, 4.907177e-01, 4.907334e-01, 4.907491e-01, 4.907647e-01, 4.907804e-01, 4.907961e-01, 4.908117e-01, 4.908274e-01, 4.908430e-01, 4.908587e-01, 4.908744e-01, 4.908900e-01, 4.909057e-01, 4.909214e-01, 4.909370e-01, 4.909527e-01, 4.909684e-01, 4.909840e-01, 4.909997e-01, 4.910154e-01, 4.910310e-01, 4.910467e-01, 4.910623e-01, 4.910780e-01, 4.910937e-01, 4.911093e-01, 4.911250e-01, 4.911407e-01, 4.911563e-01, 4.911720e-01, 4.911877e-01, 4.912033e-01, 4.912190e-01, 4.912346e-01, 4.912503e-01, 4.912660e-01, 4.912816e-01, 4.912972e-01, 4.913130e-01, 4.913286e-01, 4.913442e-01, 4.913599e-01, 4.913755e-01, 4.913912e-01, 4.914069e-01, 4.914225e-01, 4.914382e-01, 4.914538e-01, 4.914695e-01, 4.914852e-01, 4.915008e-01, 4.915165e-01, 4.915321e-01, 4.915478e-01, 4.915635e-01, 4.915791e-01, 4.915948e-01, 4.916104e-01, 4.916261e-01, 4.916417e-01, 4.916574e-01, 4.916731e-01, 4.916887e-01, 4.917044e-01, 4.917200e-01, 4.917357e-01, 4.917513e-01, 4.917670e-01, 4.917827e-01, 4.917983e-01, 4.918140e-01, 4.918296e-01, 4.918453e-01, 4.918609e-01, 4.918766e-01, 4.918922e-01, 4.919079e-01, 4.919235e-01, 4.919392e-01, 4.919548e-01, 4.919705e-01, 4.919862e-01, 4.920018e-01, 4.920175e-01, 4.920331e-01, 4.920488e-01, 4.920644e-01, 4.920801e-01, 4.920957e-01, 4.921114e-01, 4.921270e-01, 4.921427e-01, 4.921583e-01, 4.921740e-01, 4.921896e-01, 4.922053e-01, 4.922209e-01, 4.922366e-01, 4.922522e-01, 4.922679e-01, 4.922835e-01, 4.922992e-01, 4.923148e-01, 4.923305e-01, 4.923461e-01, 4.923618e-01, 4.923774e-01, 4.923931e-01, 4.924087e-01, 4.924244e-01, 4.924400e-01, 4.924556e-01, 4.924713e-01, 4.924869e-01, 4.925026e-01, 4.925182e-01, 4.925339e-01, 4.925495e-01, 4.925652e-01, 4.925808e-01, 4.925965e-01, 4.926122e-01, 4.926278e-01, 4.926434e-01, 4.926591e-01, 4.926747e-01, 4.926904e-01, 4.927060e-01, 4.927216e-01, 4.927373e-01, 4.927529e-01, 4.927686e-01, 4.927842e-01, 4.927998e-01, 4.928155e-01, 4.928312e-01, 4.928468e-01, 4.928624e-01, 4.928781e-01, 4.928937e-01, 4.929094e-01, 4.929250e-01, 4.929407e-01, 4.929563e-01, 4.929719e-01, 4.929876e-01, 4.930032e-01, 4.930189e-01, 4.930345e-01, 4.930501e-01, 4.930658e-01, 4.930815e-01, 4.930971e-01, 4.931127e-01, 4.931284e-01, 4.931440e-01, 4.931597e-01, 4.931753e-01, 4.931909e-01, 4.932066e-01, 4.932222e-01, 4.932378e-01, 4.932535e-01, 4.932691e-01, 4.932848e-01, 4.933004e-01, 4.933160e-01, 4.933317e-01, 4.933473e-01, 4.933629e-01, 4.933786e-01, 4.933942e-01, 4.934098e-01, 4.934255e-01, 4.934411e-01, 4.934568e-01, 4.934724e-01, 4.934880e-01, 4.935037e-01, 4.935193e-01, 4.935350e-01, 4.935506e-01, 4.935662e-01, 4.935819e-01, 4.935975e-01, 4.936131e-01, 4.936288e-01, 4.936444e-01, 4.936600e-01, 4.936757e-01, 4.936913e-01, 4.937069e-01, 4.937226e-01, 4.937382e-01, 4.937539e-01, 4.937695e-01, 4.937851e-01, 4.938007e-01, 4.938164e-01, 4.938320e-01, 4.938476e-01, 4.938633e-01, 4.938789e-01, 4.938945e-01, 4.939102e-01, 4.939258e-01, 4.939414e-01, 4.939570e-01, 4.939727e-01, 4.939883e-01, 4.940040e-01, 4.940196e-01, 4.940352e-01, 4.940509e-01, 4.940665e-01, 4.940821e-01, 4.940977e-01, 4.941134e-01, 4.941290e-01, 4.941446e-01, 4.941602e-01, 4.941759e-01, 4.941915e-01, 4.942071e-01, 4.942228e-01, 4.942384e-01, 4.942540e-01, 4.942697e-01, 4.942853e-01, 4.943009e-01, 4.943165e-01, 4.943322e-01, 4.943478e-01, 4.943634e-01, 4.943790e-01, 4.943947e-01, 4.944103e-01, 4.944259e-01, 4.944416e-01, 4.944572e-01, 4.944728e-01, 4.944884e-01, 4.945040e-01, 4.945197e-01, 4.945353e-01, 4.945509e-01, 4.945666e-01, 4.945821e-01, 4.945978e-01, 4.946134e-01, 4.946291e-01, 4.946447e-01, 4.946603e-01, 4.946759e-01, 4.946916e-01, 4.947071e-01, 4.947228e-01, 4.947384e-01, 4.947540e-01, 4.947697e-01, 4.947853e-01, 4.948009e-01, 4.948165e-01, 4.948321e-01, 4.948478e-01, 4.948634e-01, 4.948790e-01, 4.948947e-01, 4.949103e-01, 4.949259e-01, 4.949415e-01, 4.949571e-01, 4.949727e-01, 4.949884e-01, 4.950040e-01, 4.950196e-01, 4.950352e-01, 4.950508e-01, 4.950665e-01, 4.950821e-01, 4.950977e-01, 4.951133e-01, 4.951289e-01, 4.951445e-01, 4.951602e-01, 4.951758e-01, 4.951914e-01, 4.952070e-01, 4.952227e-01, 4.952383e-01, 4.952539e-01, 4.952695e-01, 4.952851e-01, 4.953007e-01, 4.953164e-01, 4.953320e-01, 4.953476e-01, 4.953632e-01, 4.953788e-01, 4.953944e-01, 4.954101e-01, 4.954256e-01, 4.954413e-01, 4.954569e-01, 4.954725e-01, 4.954881e-01, 4.955037e-01, 4.955193e-01, 4.955350e-01, 4.955506e-01, 4.955662e-01, 4.955818e-01, 4.955974e-01, 4.956130e-01, 4.956286e-01, 4.956443e-01, 4.956599e-01, 4.956755e-01, 4.956911e-01, 4.957067e-01, 4.957223e-01, 4.957379e-01, 4.957535e-01, 4.957692e-01, 4.957848e-01, 4.958004e-01, 4.958160e-01, 4.958316e-01, 4.958472e-01, 4.958628e-01, 4.958784e-01, 4.958940e-01, 4.959097e-01, 4.959252e-01, 4.959409e-01, 4.959565e-01, 4.959721e-01, 4.959877e-01, 4.960033e-01, 4.960189e-01, 4.960346e-01, 4.960501e-01, 4.960658e-01, 4.960814e-01, 4.960970e-01, 4.961126e-01, 4.961282e-01, 4.961438e-01, 4.961594e-01, 4.961750e-01, 4.961906e-01, 4.962062e-01, 4.962218e-01, 4.962375e-01, 4.962530e-01, 4.962687e-01, 4.962843e-01, 4.962999e-01, 4.963155e-01, 4.963311e-01, 4.963467e-01, 4.963623e-01, 4.963779e-01, 4.963935e-01, 4.964091e-01, 4.964247e-01, 4.964403e-01, 4.964559e-01, 4.964715e-01, 4.964871e-01, 4.965027e-01, 4.965183e-01, 4.965340e-01, 4.965495e-01, 4.965652e-01, 4.965808e-01, 4.965963e-01, 4.966120e-01, 4.966275e-01, 4.966432e-01, 4.966588e-01, 4.966744e-01, 4.966900e-01, 4.967056e-01, 4.967211e-01, 4.967368e-01, 4.967524e-01, 4.967680e-01, 4.967836e-01, 4.967992e-01, 4.968148e-01, 4.968304e-01, 4.968460e-01, 4.968616e-01, 4.968772e-01, 4.968928e-01, 4.969084e-01, 4.969240e-01, 4.969396e-01, 4.969552e-01, 4.969708e-01, 4.969864e-01, 4.970019e-01, 4.970176e-01, 4.970332e-01, 4.970488e-01, 4.970644e-01, 4.970799e-01, 4.970956e-01, 4.971112e-01, 4.971268e-01, 4.971423e-01, 4.971579e-01, 4.971735e-01, 4.971892e-01, 4.972047e-01, 4.972203e-01, 4.972359e-01, 4.972515e-01, 4.972671e-01, 4.972827e-01, 4.972983e-01, 4.973139e-01, 4.973295e-01, 4.973451e-01, 4.973607e-01, 4.973763e-01, 4.973919e-01, 4.974075e-01, 4.974231e-01, 4.974387e-01, 4.974543e-01, 4.974698e-01, 4.974854e-01, 4.975010e-01, 4.975166e-01, 4.975322e-01, 4.975478e-01, 4.975634e-01, 4.975790e-01, 4.975946e-01, 4.976102e-01, 4.976258e-01, 4.976414e-01, 4.976569e-01, 4.976726e-01, 4.976881e-01, 4.977037e-01, 4.977193e-01, 4.977349e-01, 4.977505e-01, 4.977661e-01, 4.977817e-01, 4.977973e-01, 4.978129e-01, 4.978285e-01, 4.978440e-01, 4.978596e-01, 4.978752e-01, 4.978908e-01, 4.979064e-01, 4.979220e-01, 4.979376e-01, 4.979531e-01, 4.979688e-01, 4.979843e-01, 4.979999e-01, 4.980155e-01, 4.980311e-01, 4.980467e-01, 4.980623e-01, 4.980779e-01, 4.980935e-01, 4.981090e-01, 4.981246e-01, 4.981402e-01, 4.981558e-01, 4.981714e-01, 4.981869e-01, 4.982026e-01, 4.982181e-01, 4.982337e-01, 4.982493e-01, 4.982649e-01, 4.982805e-01, 4.982961e-01, 4.983116e-01, 4.983272e-01, 4.983428e-01, 4.983584e-01, 4.983740e-01, 4.983895e-01, 4.984052e-01, 4.984207e-01, 4.984363e-01, 4.984519e-01, 4.984675e-01, 4.984831e-01, 4.984986e-01, 4.985142e-01, 4.985298e-01, 4.985454e-01, 4.985610e-01, 4.985766e-01, 4.985921e-01, 4.986077e-01, 4.986233e-01, 4.986389e-01, 4.986545e-01, 4.986701e-01, 4.986856e-01, 4.987012e-01, 4.987168e-01, 4.987324e-01, 4.987479e-01, 4.987635e-01, 4.987791e-01, 4.987946e-01, 4.988103e-01, 4.988258e-01, 4.988414e-01, 4.988570e-01, 4.988726e-01, 4.988881e-01, 4.989038e-01, 4.989193e-01, 4.989349e-01, 4.989505e-01, 4.989660e-01, 4.989816e-01, 4.989972e-01, 4.990128e-01, 4.990284e-01, 4.990439e-01, 4.990595e-01, 4.990751e-01, 4.990906e-01, 4.991063e-01, 4.991218e-01, 4.991374e-01, 4.991529e-01, 4.991685e-01, 4.991841e-01, 4.991997e-01, 4.992152e-01, 4.992308e-01, 4.992464e-01, 4.992620e-01, 4.992775e-01, 4.992931e-01, 4.993087e-01, 4.993243e-01, 4.993398e-01, 4.993554e-01, 4.993710e-01, 4.993866e-01, 4.994021e-01, 4.994177e-01, 4.994333e-01, 4.994488e-01, 4.994645e-01, 4.994800e-01, 4.994956e-01, 4.995112e-01, 4.995267e-01, 4.995423e-01, 4.995578e-01, 4.995734e-01, 4.995890e-01, 4.996046e-01, 4.996201e-01, 4.996357e-01, 4.996513e-01, 4.996668e-01, 4.996824e-01, 4.996980e-01, 4.997136e-01, 4.997291e-01, 4.997447e-01, 4.997603e-01, 4.997758e-01, 4.997914e-01, 4.998069e-01, 4.998225e-01, 4.998381e-01, 4.998537e-01, 4.998693e-01, 4.998848e-01, 4.999004e-01, 4.999160e-01, 4.999315e-01, 4.999471e-01, 4.999626e-01, 4.999782e-01, 4.999938e-01, 5.000094e-01, 5.000249e-01, 5.000405e-01, 5.000560e-01, 5.000716e-01, 5.000871e-01, 5.001027e-01, 5.001183e-01, 5.001339e-01, 5.001494e-01, 5.001650e-01, 5.001805e-01, 5.001961e-01, 5.002117e-01, 5.002272e-01, 5.002428e-01, 5.002584e-01, 5.002739e-01, 5.002895e-01, 5.003051e-01, 5.003206e-01, 5.003362e-01, 5.003517e-01, 5.003673e-01, 5.003829e-01, 5.003985e-01, 5.004140e-01, 5.004296e-01, 5.004451e-01, 5.004607e-01, 5.004762e-01, 5.004918e-01, 5.005074e-01, 5.005229e-01, 5.005385e-01, 5.005540e-01, 5.005696e-01, 5.005852e-01, 5.006008e-01, 5.006163e-01, 5.006319e-01, 5.006474e-01, 5.006629e-01, 5.006785e-01, 5.006941e-01, 5.007097e-01, 5.007252e-01, 5.007408e-01, 5.007563e-01, 5.007719e-01, 5.007874e-01, 5.008030e-01, 5.008186e-01, 5.008341e-01, 5.008497e-01, 5.008652e-01, 5.008808e-01, 5.008963e-01, 5.009119e-01, 5.009274e-01, 5.009430e-01, 5.009586e-01, 5.009741e-01, 5.009897e-01, 5.010052e-01, 5.010208e-01, 5.010363e-01, 5.010519e-01, 5.010675e-01, 5.010830e-01, 5.010985e-01, 5.011141e-01, 5.011297e-01, 5.011452e-01, 5.011607e-01, 5.011763e-01, 5.011919e-01, 5.012074e-01, 5.012230e-01, 5.012385e-01, 5.012541e-01, 5.012696e-01, 5.012852e-01, 5.013008e-01, 5.013162e-01, 5.013318e-01, 5.013474e-01, 5.013630e-01, 5.013785e-01, 5.013940e-01, 5.014096e-01, 5.014251e-01, 5.014407e-01, 5.014563e-01, 5.014718e-01, 5.014874e-01, 5.015029e-01, 5.015184e-01, 5.015340e-01, 5.015495e-01, 5.015651e-01, 5.015807e-01, 5.015962e-01, 5.016117e-01, 5.016273e-01, 5.016428e-01, 5.016584e-01, 5.016739e-01, 5.016895e-01, 5.017051e-01, 5.017206e-01, 5.017361e-01, 5.017517e-01, 5.017672e-01, 5.017828e-01, 5.017983e-01, 5.018138e-01, 5.018294e-01, 5.018449e-01, 5.018605e-01, 5.018761e-01, 5.018916e-01, 5.019072e-01, 5.019227e-01, 5.019382e-01, 5.019538e-01, 5.019693e-01, 5.019848e-01, 5.020004e-01, 5.020159e-01, 5.020315e-01, 5.020470e-01, 5.020626e-01, 5.020781e-01, 5.020937e-01, 5.021092e-01, 5.021248e-01, 5.021403e-01, 5.021558e-01, 5.021714e-01, 5.021870e-01, 5.022025e-01, 5.022180e-01, 5.022336e-01, 5.022491e-01, 5.022646e-01, 5.022802e-01, 5.022957e-01, 5.023113e-01, 5.023268e-01, 5.023423e-01, 5.023579e-01, 5.023735e-01, 5.023890e-01, 5.024045e-01, 5.024201e-01, 5.024356e-01, 5.024511e-01, 5.024667e-01, 5.024822e-01, 5.024977e-01, 5.025133e-01, 5.025288e-01, 5.025443e-01, 5.025599e-01, 5.025755e-01, 5.025910e-01, 5.026065e-01, 5.026221e-01, 5.026376e-01, 5.026531e-01, 5.026687e-01, 5.026842e-01, 5.026997e-01, 5.027153e-01, 5.027308e-01, 5.027463e-01, 5.027619e-01, 5.027775e-01, 5.027930e-01, 5.028085e-01, 5.028241e-01, 5.028396e-01, 5.028551e-01, 5.028706e-01, 5.028862e-01, 5.029017e-01, 5.029172e-01, 5.029328e-01, 5.029483e-01, 5.029638e-01, 5.029794e-01, 5.029949e-01, 5.030105e-01, 5.030260e-01, 5.030415e-01, 5.030571e-01, 5.030726e-01, 5.030881e-01, 5.031036e-01, 5.031192e-01, 5.031347e-01, 5.031502e-01, 5.031658e-01, 5.031813e-01, 5.031968e-01, 5.032124e-01, 5.032279e-01, 5.032434e-01, 5.032590e-01, 5.032745e-01, 5.032901e-01, 5.033056e-01, 5.033211e-01, 5.033366e-01, 5.033522e-01, 5.033677e-01, 5.033832e-01, 5.033987e-01, 5.034143e-01, 5.034298e-01, 5.034453e-01, 5.034608e-01, 5.034764e-01, 5.034919e-01, 5.035074e-01, 5.035230e-01, 5.035385e-01, 5.035540e-01, 5.035695e-01, 5.035850e-01, 5.036007e-01, 5.036162e-01, 5.036317e-01, 5.036472e-01, 5.036627e-01, 5.036783e-01, 5.036938e-01, 5.037093e-01, 5.037248e-01, 5.037404e-01, 5.037559e-01, 5.037714e-01, 5.037869e-01, 5.038025e-01, 5.038180e-01, 5.038335e-01, 5.038490e-01, 5.038645e-01, 5.038801e-01, 5.038956e-01, 5.039111e-01, 5.039267e-01, 5.039422e-01, 5.039577e-01, 5.039732e-01, 5.039887e-01, 5.040043e-01, 5.040198e-01, 5.040353e-01, 5.040509e-01, 5.040663e-01, 5.040819e-01, 5.040974e-01, 5.041129e-01, 5.041285e-01, 5.041440e-01, 5.041595e-01, 5.041750e-01, 5.041905e-01, 5.042061e-01, 5.042216e-01, 5.042371e-01, 5.042526e-01, 5.042681e-01, 5.042837e-01, 5.042992e-01, 5.043147e-01, 5.043302e-01, 5.043457e-01, 5.043613e-01, 5.043768e-01, 5.043923e-01, 5.044078e-01, 5.044233e-01, 5.044388e-01, 5.044544e-01, 5.044699e-01, 5.044854e-01, 5.045009e-01, 5.045164e-01, 5.045320e-01, 5.045475e-01, 5.045630e-01, 5.045785e-01, 5.045940e-01, 5.046095e-01, 5.046250e-01, 5.046406e-01, 5.046561e-01, 5.046716e-01, 5.046871e-01, 5.047026e-01, 5.047181e-01, 5.047336e-01, 5.047492e-01, 5.047647e-01, 5.047802e-01, 5.047957e-01, 5.048112e-01, 5.048267e-01, 5.048423e-01, 5.048578e-01, 5.048733e-01, 5.048888e-01, 5.049043e-01, 5.049198e-01, 5.049353e-01, 5.049509e-01, 5.049663e-01, 5.049819e-01, 5.049974e-01, 5.050129e-01, 5.050284e-01, 5.050439e-01, 5.050594e-01, 5.050750e-01, 5.050905e-01, 5.051060e-01, 5.051215e-01, 5.051370e-01, 5.051525e-01, 5.051680e-01, 5.051835e-01, 5.051990e-01, 5.052146e-01, 5.052300e-01, 5.052456e-01, 5.052611e-01, 5.052766e-01, 5.052921e-01, 5.053076e-01, 5.053231e-01, 5.053386e-01, 5.053541e-01, 5.053697e-01, 5.053852e-01, 5.054007e-01, 5.054162e-01, 5.054317e-01, 5.054471e-01, 5.054627e-01, 5.054782e-01, 5.054937e-01, 5.055092e-01, 5.055248e-01, 5.055402e-01, 5.055557e-01, 5.055712e-01, 5.055867e-01, 5.056022e-01, 5.056177e-01, 5.056332e-01, 5.056488e-01, 5.056642e-01, 5.056798e-01, 5.056953e-01, 5.057108e-01, 5.057263e-01, 5.057418e-01, 5.057573e-01, 5.057728e-01, 5.057883e-01, 5.058038e-01, 5.058193e-01, 5.058348e-01, 5.058503e-01, 5.058658e-01, 5.058813e-01, 5.058968e-01, 5.059123e-01, 5.059278e-01, 5.059434e-01, 5.059588e-01, 5.059744e-01, 5.059898e-01, 5.060053e-01, 5.060208e-01, 5.060363e-01, 5.060518e-01, 5.060673e-01, 5.060828e-01, 5.060983e-01, 5.061138e-01, 5.061293e-01, 5.061449e-01, 5.061603e-01, 5.061759e-01, 5.061913e-01, 5.062069e-01, 5.062223e-01, 5.062379e-01, 5.062534e-01, 5.062689e-01, 5.062844e-01, 5.062998e-01, 5.063154e-01, 5.063308e-01, 5.063463e-01, 5.063618e-01, 5.063773e-01, 5.063928e-01, 5.064083e-01, 5.064238e-01, 5.064393e-01, 5.064548e-01, 5.064703e-01, 5.064858e-01, 5.065013e-01, 5.065168e-01, 5.065323e-01, 5.065477e-01, 5.065633e-01, 5.065787e-01, 5.065943e-01, 5.066097e-01, 5.066252e-01, 5.066408e-01, 5.066562e-01, 5.066717e-01, 5.066872e-01, 5.067027e-01, 5.067182e-01, 5.067337e-01, 5.067492e-01, 5.067647e-01, 5.067802e-01, 5.067957e-01, 5.068112e-01, 5.068267e-01, 5.068421e-01, 5.068577e-01, 5.068731e-01, 5.068886e-01, 5.069042e-01, 5.069196e-01, 5.069351e-01, 5.069506e-01, 5.069661e-01, 5.069816e-01, 5.069970e-01, 5.070126e-01, 5.070280e-01, 5.070435e-01, 5.070590e-01, 5.070745e-01, 5.070900e-01, 5.071055e-01, 5.071210e-01, 5.071365e-01, 5.071520e-01, 5.071675e-01, 5.071830e-01, 5.071985e-01, 5.072140e-01, 5.072294e-01, 5.072449e-01, 5.072604e-01, 5.072759e-01, 5.072914e-01, 5.073069e-01, 5.073223e-01, 5.073379e-01, 5.073533e-01, 5.073688e-01, 5.073843e-01, 5.073998e-01, 5.074153e-01, 5.074308e-01, 5.074462e-01, 5.074617e-01, 5.074772e-01, 5.074927e-01, 5.075082e-01, 5.075237e-01, 5.075392e-01, 5.075547e-01, 5.075701e-01, 5.075856e-01, 5.076011e-01, 5.076166e-01, 5.076321e-01, 5.076476e-01, 5.076630e-01, 5.076785e-01, 5.076940e-01, 5.077094e-01, 5.077250e-01, 5.077404e-01, 5.077559e-01, 5.077714e-01, 5.077869e-01, 5.078024e-01, 5.078179e-01, 5.078334e-01, 5.078488e-01, 5.078643e-01, 5.078798e-01, 5.078952e-01, 5.079108e-01, 5.079262e-01, 5.079417e-01, 5.079572e-01, 5.079727e-01, 5.079882e-01, 5.080037e-01, 5.080191e-01, 5.080346e-01, 5.080501e-01, 5.080656e-01, 5.080810e-01, 5.080965e-01, 5.081120e-01, 5.081275e-01, 5.081429e-01, 5.081584e-01, 5.081739e-01, 5.081894e-01, 5.082049e-01, 5.082203e-01, 5.082358e-01, 5.082513e-01, 5.082667e-01, 5.082822e-01, 5.082977e-01, 5.083132e-01, 5.083287e-01, 5.083442e-01, 5.083597e-01, 5.083751e-01, 5.083905e-01, 5.084060e-01, 5.084215e-01, 5.084370e-01, 5.084525e-01, 5.084680e-01, 5.084834e-01, 5.084989e-01, 5.085144e-01, 5.085298e-01, 5.085453e-01, 5.085608e-01, 5.085763e-01, 5.085917e-01, 5.086072e-01, 5.086227e-01, 5.086381e-01, 5.086536e-01, 5.086691e-01, 5.086846e-01, 5.087001e-01, 5.087155e-01, 5.087310e-01, 5.087465e-01, 5.087619e-01, 5.087774e-01, 5.087929e-01, 5.088084e-01, 5.088238e-01, 5.088393e-01, 5.088548e-01, 5.088702e-01, 5.088857e-01, 5.089012e-01, 5.089167e-01, 5.089321e-01, 5.089476e-01, 5.089631e-01, 5.089785e-01, 5.089940e-01, 5.090095e-01, 5.090250e-01, 5.090404e-01, 5.090559e-01, 5.090714e-01, 5.090868e-01, 5.091023e-01, 5.091177e-01, 5.091332e-01, 5.091487e-01, 5.091642e-01, 5.091796e-01, 5.091951e-01, 5.092106e-01, 5.092260e-01, 5.092415e-01, 5.092570e-01, 5.092725e-01, 5.092879e-01, 5.093033e-01, 5.093188e-01, 5.093343e-01, 5.093498e-01, 5.093652e-01, 5.093807e-01, 5.093961e-01, 5.094116e-01, 5.094271e-01, 5.094425e-01, 5.094580e-01, 5.094735e-01, 5.094889e-01, 5.095044e-01, 5.095199e-01, 5.095353e-01, 5.095508e-01, 5.095662e-01, 5.095817e-01, 5.095972e-01, 5.096127e-01, 5.096281e-01, 5.096436e-01, 5.096591e-01, 5.096745e-01, 5.096900e-01, 5.097054e-01, 5.097209e-01, 5.097364e-01, 5.097518e-01, 5.097673e-01, 5.097827e-01, 5.097982e-01, 5.098137e-01, 5.098291e-01, 5.098446e-01, 5.098600e-01, 5.098755e-01, 5.098909e-01, 5.099064e-01, 5.099219e-01, 5.099373e-01, 5.099528e-01, 5.099682e-01, 5.099837e-01, 5.099992e-01, 5.100147e-01, 5.100301e-01, 5.100455e-01, 5.100610e-01, 5.100765e-01, 5.100919e-01, 5.101074e-01, 5.101228e-01, 5.101383e-01, 5.101537e-01, 5.101692e-01, 5.101846e-01, 5.102001e-01, 5.102156e-01, 5.102310e-01, 5.102465e-01, 5.102620e-01, 5.102774e-01, 5.102929e-01, 5.103083e-01, 5.103238e-01, 5.103392e-01, 5.103547e-01, 5.103701e-01, 5.103856e-01, 5.104010e-01, 5.104164e-01, 5.104319e-01, 5.104474e-01, 5.104629e-01, 5.104783e-01, 5.104938e-01, 5.105092e-01, 5.105246e-01, 5.105401e-01, 5.105556e-01, 5.105711e-01, 5.105865e-01, 5.106019e-01, 5.106174e-01, 5.106328e-01, 5.106483e-01, 5.106637e-01, 5.106792e-01, 5.106947e-01, 5.107101e-01, 5.107255e-01, 5.107410e-01, 5.107564e-01, 5.107719e-01, 5.107874e-01, 5.108028e-01, 5.108182e-01, 5.108337e-01, 5.108491e-01, 5.108646e-01, 5.108801e-01, 5.108955e-01, 5.109109e-01, 5.109264e-01, 5.109419e-01, 5.109573e-01, 5.109727e-01, 5.109882e-01, 5.110036e-01, 5.110191e-01, 5.110345e-01, 5.110500e-01, 5.110654e-01, 5.110809e-01, 5.110963e-01, 5.111117e-01, 5.111272e-01, 5.111427e-01, 5.111581e-01, 5.111735e-01, 5.111890e-01, 5.112045e-01, 5.112199e-01, 5.112353e-01, 5.112507e-01, 5.112662e-01, 5.112817e-01, 5.112971e-01, 5.113125e-01, 5.113280e-01, 5.113435e-01, 5.113589e-01, 5.113744e-01, 5.113898e-01, 5.114052e-01, 5.114207e-01, 5.114361e-01, 5.114515e-01, 5.114670e-01, 5.114824e-01, 5.114979e-01, 5.115134e-01, 5.115288e-01, 5.115442e-01, 5.115597e-01, 5.115751e-01, 5.115905e-01, 5.116059e-01, 5.116214e-01, 5.116369e-01, 5.116523e-01, 5.116677e-01, 5.116832e-01, 5.116986e-01, 5.117140e-01, 5.117295e-01, 5.117450e-01, 5.117604e-01, 5.117759e-01, 5.117913e-01, 5.118067e-01, 5.118221e-01, 5.118375e-01, 5.118530e-01, 5.118684e-01, 5.118839e-01, 5.118993e-01, 5.119147e-01, 5.119302e-01, 5.119457e-01, 5.119611e-01, 5.119765e-01, 5.119920e-01, 5.120074e-01, 5.120229e-01, 5.120383e-01, 5.120537e-01, 5.120692e-01, 5.120846e-01, 5.121000e-01, 5.121154e-01, 5.121309e-01, 5.121463e-01, 5.121617e-01, 5.121772e-01, 5.121926e-01, 5.122080e-01, 5.122235e-01, 5.122389e-01, 5.122544e-01, 5.122698e-01, 5.122852e-01, 5.123007e-01, 5.123161e-01, 5.123315e-01, 5.123470e-01, 5.123624e-01, 5.123779e-01, 5.123932e-01, 5.124087e-01, 5.124241e-01, 5.124395e-01, 5.124550e-01, 5.124704e-01, 5.124859e-01, 5.125013e-01, 5.125167e-01, 5.125322e-01, 5.125476e-01, 5.125630e-01, 5.125784e-01, 5.125939e-01, 5.126093e-01, 5.126247e-01, 5.126402e-01, 5.126556e-01, 5.126711e-01, 5.126865e-01, 5.127019e-01, 5.127173e-01, 5.127327e-01, 5.127482e-01, 5.127636e-01, 5.127791e-01, 5.127945e-01, 5.128099e-01, 5.128253e-01, 5.128407e-01, 5.128562e-01, 5.128716e-01, 5.128871e-01, 5.129024e-01, 5.129179e-01, 5.129333e-01, 5.129488e-01, 5.129642e-01, 5.129796e-01, 5.129950e-01, 5.130104e-01, 5.130259e-01, 5.130413e-01, 5.130567e-01, 5.130721e-01, 5.130876e-01, 5.131030e-01, 5.131184e-01, 5.131338e-01, 5.131493e-01, 5.131647e-01, 5.131801e-01, 5.131955e-01, 5.132110e-01, 5.132264e-01, 5.132418e-01, 5.132573e-01, 5.132727e-01, 5.132881e-01, 5.133035e-01, 5.133190e-01, 5.133344e-01, 5.133498e-01, 5.133652e-01, 5.133806e-01, 5.133961e-01, 5.134115e-01, 5.134269e-01, 5.134423e-01, 5.134577e-01, 5.134732e-01, 5.134886e-01, 5.135040e-01, 5.135194e-01, 5.135348e-01, 5.135503e-01, 5.135657e-01, 5.135811e-01, 5.135965e-01, 5.136120e-01, 5.136274e-01, 5.136428e-01, 5.136582e-01, 5.136736e-01, 5.136890e-01, 5.137045e-01, 5.137199e-01, 5.137353e-01, 5.137507e-01, 5.137661e-01, 5.137815e-01, 5.137970e-01, 5.138124e-01, 5.138278e-01, 5.138432e-01, 5.138587e-01, 5.138741e-01, 5.138895e-01, 5.139049e-01, 5.139203e-01, 5.139357e-01, 5.139511e-01, 5.139666e-01, 5.139820e-01, 5.139974e-01, 5.140128e-01, 5.140283e-01, 5.140436e-01, 5.140591e-01, 5.140744e-01, 5.140899e-01, 5.141053e-01, 5.141207e-01, 5.141361e-01, 5.141516e-01, 5.141670e-01, 5.141824e-01, 5.141978e-01, 5.142132e-01, 5.142286e-01, 5.142440e-01, 5.142594e-01, 5.142748e-01, 5.142903e-01, 5.143057e-01, 5.143211e-01, 5.143365e-01, 5.143519e-01, 5.143673e-01, 5.143827e-01, 5.143982e-01, 5.144135e-01, 5.144290e-01, 5.144444e-01, 5.144598e-01, 5.144752e-01, 5.144906e-01, 5.145060e-01, 5.145214e-01, 5.145369e-01, 5.145523e-01, 5.145677e-01, 5.145831e-01, 5.145985e-01, 5.146139e-01, 5.146293e-01, 5.146447e-01, 5.146601e-01, 5.146756e-01, 5.146909e-01, 5.147064e-01, 5.147218e-01, 5.147371e-01, 5.147526e-01, 5.147680e-01, 5.147834e-01, 5.147988e-01, 5.148142e-01, 5.148296e-01, 5.148450e-01, 5.148604e-01, 5.148758e-01, 5.148913e-01, 5.149066e-01, 5.149220e-01, 5.149375e-01, 5.149528e-01, 5.149683e-01, 5.149837e-01, 5.149991e-01, 5.150145e-01, 5.150298e-01, 5.150453e-01, 5.150607e-01, 5.150761e-01, 5.150915e-01, 5.151069e-01, 5.151223e-01, 5.151377e-01, 5.151531e-01, 5.151685e-01, 5.151839e-01, 5.151993e-01, 5.152147e-01, 5.152301e-01, 5.152456e-01, 5.152609e-01, 5.152764e-01, 5.152918e-01, 5.153071e-01, 5.153226e-01, 5.153379e-01, 5.153534e-01, 5.153688e-01, 5.153841e-01, 5.153995e-01, 5.154150e-01, 5.154304e-01, 5.154458e-01, 5.154611e-01, 5.154765e-01, 5.154920e-01, 5.155074e-01, 5.155228e-01, 5.155382e-01, 5.155535e-01, 5.155690e-01, 5.155843e-01, 5.155997e-01, 5.156152e-01, 5.156305e-01, 5.156459e-01, 5.156614e-01, 5.156767e-01, 5.156921e-01, 5.157075e-01, 5.157229e-01, 5.157384e-01, 5.157537e-01, 5.157691e-01, 5.157845e-01, 5.157999e-01, 5.158153e-01, 5.158307e-01, 5.158461e-01, 5.158615e-01, 5.158769e-01, 5.158923e-01, 5.159077e-01, 5.159231e-01, 5.159385e-01, 5.159539e-01, 5.159693e-01, 5.159847e-01, 5.160000e-01, 5.160155e-01, 5.160308e-01, 5.160462e-01, 5.160616e-01, 5.160770e-01, 5.160924e-01, 5.161078e-01, 5.161232e-01, 5.161386e-01, 5.161540e-01, 5.161694e-01, 5.161847e-01, 5.162002e-01, 5.162156e-01, 5.162309e-01, 5.162463e-01, 5.162618e-01, 5.162771e-01, 5.162925e-01, 5.163079e-01, 5.163233e-01, 5.163387e-01, 5.163541e-01, 5.163695e-01, 5.163849e-01, 5.164003e-01, 5.164157e-01, 5.164310e-01, 5.164465e-01, 5.164618e-01, 5.164772e-01, 5.164926e-01, 5.165080e-01, 5.165234e-01, 5.165387e-01, 5.165542e-01, 5.165696e-01, 5.165849e-01, 5.166003e-01, 5.166157e-01, 5.166311e-01, 5.166464e-01, 5.166618e-01, 5.166773e-01, 5.166926e-01, 5.167080e-01, 5.167234e-01, 5.167388e-01, 5.167542e-01, 5.167695e-01, 5.167850e-01, 5.168003e-01, 5.168157e-01, 5.168311e-01, 5.168465e-01, 5.168619e-01, 5.168772e-01, 5.168927e-01, 5.169080e-01, 5.169234e-01, 5.169388e-01, 5.169542e-01, 5.169696e-01, 5.169849e-01, 5.170004e-01, 5.170158e-01, 5.170311e-01, 5.170465e-01, 5.170619e-01, 5.170773e-01, 5.170926e-01, 5.171080e-01, 5.171234e-01, 5.171388e-01, 5.171542e-01, 5.171695e-01, 5.171849e-01, 5.172004e-01, 5.172157e-01, 5.172310e-01, 5.172465e-01, 5.172619e-01, 5.172772e-01, 5.172926e-01, 5.173080e-01, 5.173234e-01, 5.173388e-01, 5.173541e-01, 5.173695e-01, 5.173849e-01, 5.174003e-01, 5.174156e-01, 5.174310e-01, 5.174464e-01, 5.174618e-01, 5.174772e-01, 5.174925e-01, 5.175079e-01, 5.175233e-01, 5.175387e-01, 5.175540e-01, 5.175694e-01, 5.175848e-01, 5.176002e-01, 5.176156e-01, 5.176309e-01, 5.176463e-01, 5.176617e-01, 5.176771e-01, 5.176924e-01, 5.177078e-01, 5.177232e-01, 5.177386e-01, 5.177540e-01, 5.177693e-01, 5.177847e-01, 5.178001e-01, 5.178155e-01, 5.178308e-01, 5.178462e-01, 5.178616e-01, 5.178769e-01, 5.178924e-01, 5.179077e-01, 5.179231e-01, 5.179384e-01, 5.179538e-01, 5.179692e-01, 5.179846e-01, 5.179999e-01, 5.180153e-01, 5.180307e-01, 5.180461e-01, 5.180615e-01, 5.180768e-01, 5.180922e-01, 5.181075e-01, 5.181229e-01, 5.181383e-01, 5.181537e-01, 5.181690e-01, 5.181844e-01, 5.181997e-01, 5.182152e-01, 5.182305e-01, 5.182459e-01, 5.182613e-01, 5.182766e-01, 5.182920e-01, 5.183074e-01, 5.183227e-01, 5.183381e-01, 5.183535e-01, 5.183688e-01, 5.183842e-01, 5.183996e-01, 5.184150e-01, 5.184304e-01, 5.184457e-01, 5.184610e-01, 5.184764e-01, 5.184918e-01, 5.185072e-01, 5.185226e-01, 5.185379e-01, 5.185533e-01, 5.185686e-01, 5.185840e-01, 5.185994e-01, 5.186148e-01, 5.186301e-01, 5.186455e-01, 5.186608e-01, 5.186762e-01, 5.186916e-01, 5.187069e-01, 5.187223e-01, 5.187377e-01, 5.187531e-01, 5.187684e-01, 5.187837e-01, 5.187991e-01, 5.188144e-01, 5.188299e-01, 5.188452e-01, 5.188606e-01, 5.188760e-01, 5.188913e-01, 5.189067e-01, 5.189220e-01, 5.189374e-01, 5.189527e-01, 5.189682e-01, 5.189835e-01, 5.189989e-01, 5.190142e-01, 5.190296e-01, 5.190449e-01, 5.190603e-01, 5.190757e-01, 5.190910e-01, 5.191064e-01, 5.191218e-01, 5.191371e-01, 5.191525e-01, 5.191678e-01, 5.191832e-01, 5.191985e-01, 5.192139e-01, 5.192292e-01, 5.192447e-01, 5.192600e-01, 5.192754e-01, 5.192907e-01, 5.193061e-01, 5.193214e-01, 5.193368e-01, 5.193521e-01, 5.193675e-01, 5.193829e-01, 5.193982e-01, 5.194136e-01, 5.194289e-01, 5.194443e-01, 5.194597e-01, 5.194750e-01, 5.194904e-01, 5.195057e-01, 5.195211e-01, 5.195364e-01, 5.195518e-01, 5.195671e-01, 5.195825e-01, 5.195978e-01, 5.196132e-01, 5.196286e-01, 5.196440e-01, 5.196593e-01, 5.196747e-01, 5.196900e-01, 5.197054e-01, 5.197207e-01, 5.197361e-01, 5.197514e-01, 5.197668e-01, 5.197821e-01, 5.197975e-01, 5.198128e-01, 5.198282e-01, 5.198435e-01, 5.198589e-01, 5.198742e-01, 5.198896e-01, 5.199050e-01, 5.199203e-01, 5.199357e-01, 5.199510e-01, 5.199664e-01, 5.199817e-01, 5.199971e-01, 5.200124e-01, 5.200278e-01, 5.200431e-01, 5.200585e-01, 5.200738e-01, 5.200891e-01, 5.201045e-01, 5.201198e-01, 5.201352e-01, 5.201505e-01, 5.201659e-01, 5.201812e-01, 5.201966e-01, 5.202119e-01, 5.202273e-01, 5.202426e-01, 5.202580e-01, 5.202734e-01, 5.202887e-01, 5.203041e-01, 5.203194e-01, 5.203348e-01, 5.203501e-01, 5.203655e-01, 5.203808e-01, 5.203962e-01, 5.204115e-01, 5.204269e-01, 5.204422e-01, 5.204576e-01, 5.204729e-01, 5.204883e-01, 5.205036e-01, 5.205190e-01, 5.205343e-01, 5.205496e-01, 5.205650e-01, 5.205803e-01, 5.205957e-01, 5.206110e-01, 5.206264e-01, 5.206417e-01, 5.206571e-01, 5.206724e-01, 5.206878e-01, 5.207031e-01, 5.207184e-01, 5.207338e-01, 5.207491e-01, 5.207645e-01, 5.207798e-01, 5.207952e-01, 5.208105e-01, 5.208258e-01, 5.208412e-01, 5.208565e-01, 5.208719e-01, 5.208872e-01, 5.209026e-01, 5.209179e-01, 5.209332e-01, 5.209486e-01, 5.209639e-01, 5.209793e-01, 5.209945e-01, 5.210099e-01, 5.210252e-01, 5.210406e-01, 5.210559e-01, 5.210713e-01, 5.210866e-01, 5.211020e-01, 5.211173e-01, 5.211326e-01, 5.211480e-01, 5.211633e-01, 5.211787e-01, 5.211940e-01, 5.212094e-01, 5.212247e-01, 5.212401e-01, 5.212554e-01, 5.212707e-01, 5.212860e-01, 5.213014e-01, 5.213167e-01, 5.213320e-01, 5.213474e-01, 5.213627e-01, 5.213781e-01, 5.213934e-01, 5.214087e-01, 5.214241e-01, 5.214394e-01, 5.214548e-01, 5.214701e-01, 5.214854e-01, 5.215008e-01, 5.215161e-01, 5.215314e-01, 5.215468e-01, 5.215621e-01, 5.215774e-01, 5.215927e-01, 5.216081e-01, 5.216234e-01, 5.216388e-01, 5.216541e-01, 5.216694e-01, 5.216848e-01, 5.217001e-01, 5.217154e-01, 5.217308e-01, 5.217462e-01, 5.217614e-01, 5.217768e-01, 5.217921e-01, 5.218074e-01, 5.218228e-01, 5.218381e-01, 5.218534e-01, 5.218688e-01, 5.218841e-01, 5.218995e-01, 5.219148e-01, 5.219301e-01, 5.219454e-01, 5.219608e-01, 5.219761e-01, 5.219914e-01, 5.220068e-01, 5.220221e-01, 5.220374e-01, 5.220527e-01, 5.220681e-01, 5.220834e-01, 5.220987e-01, 5.221140e-01, 5.221294e-01, 5.221447e-01, 5.221601e-01, 5.221754e-01, 5.221907e-01, 5.222061e-01, 5.222214e-01, 5.222367e-01, 5.222520e-01, 5.222673e-01, 5.222827e-01, 5.222980e-01, 5.223134e-01, 5.223286e-01, 5.223440e-01, 5.223593e-01, 5.223746e-01, 5.223899e-01, 5.224053e-01, 5.224206e-01, 5.224360e-01, 5.224513e-01, 5.224666e-01, 5.224819e-01, 5.224972e-01, 5.225126e-01, 5.225279e-01, 5.225433e-01, 5.225585e-01, 5.225739e-01, 5.225892e-01, 5.226045e-01, 5.226198e-01, 5.226352e-01, 5.226505e-01, 5.226658e-01, 5.226811e-01, 5.226964e-01, 5.227118e-01, 5.227271e-01, 5.227425e-01, 5.227577e-01, 5.227731e-01, 5.227884e-01, 5.228037e-01, 5.228190e-01, 5.228344e-01, 5.228497e-01, 5.228650e-01, 5.228803e-01, 5.228956e-01, 5.229110e-01, 5.229263e-01, 5.229416e-01, 5.229569e-01, 5.229722e-01, 5.229876e-01, 5.230029e-01, 5.230182e-01, 5.230335e-01, 5.230489e-01, 5.230641e-01, 5.230795e-01, 5.230948e-01, 5.231102e-01, 5.231254e-01, 5.231407e-01, 5.231561e-01, 5.231714e-01, 5.231867e-01, 5.232021e-01, 5.232174e-01, 5.232326e-01, 5.232480e-01, 5.232633e-01, 5.232787e-01, 5.232939e-01, 5.233092e-01, 5.233246e-01, 5.233399e-01, 5.233552e-01, 5.233705e-01, 5.233858e-01, 5.234011e-01, 5.234165e-01, 5.234318e-01, 5.234471e-01, 5.234624e-01, 5.234777e-01, 5.234931e-01, 5.235084e-01, 5.235236e-01, 5.235389e-01, 5.235543e-01, 5.235696e-01, 5.235849e-01, 5.236002e-01, 5.236155e-01, 5.236309e-01, 5.236462e-01, 5.236615e-01, 5.236768e-01, 5.236921e-01, 5.237074e-01, 5.237227e-01, 5.237380e-01, 5.237534e-01, 5.237687e-01, 5.237840e-01, 5.237993e-01, 5.238146e-01, 5.238299e-01, 5.238452e-01, 5.238605e-01, 5.238758e-01, 5.238912e-01, 5.239065e-01, 5.239218e-01, 5.239371e-01, 5.239524e-01, 5.239677e-01, 5.239830e-01, 5.239983e-01, 5.240136e-01, 5.240290e-01, 5.240443e-01, 5.240595e-01, 5.240749e-01, 5.240902e-01, 5.241055e-01, 5.241208e-01, 5.241361e-01, 5.241514e-01, 5.241668e-01, 5.241820e-01, 5.241973e-01, 5.242127e-01, 5.242280e-01, 5.242433e-01, 5.242586e-01, 5.242739e-01, 5.242892e-01, 5.243045e-01, 5.243198e-01, 5.243351e-01, 5.243504e-01, 5.243657e-01, 5.243810e-01, 5.243964e-01, 5.244116e-01, 5.244269e-01, 5.244422e-01, 5.244575e-01, 5.244728e-01, 5.244882e-01, 5.245035e-01, 5.245187e-01, 5.245340e-01, 5.245494e-01, 5.245647e-01, 5.245800e-01, 5.245953e-01, 5.246106e-01, 5.246259e-01, 5.246412e-01, 5.246565e-01, 5.246718e-01, 5.246871e-01, 5.247024e-01, 5.247177e-01, 5.247330e-01, 5.247483e-01, 5.247636e-01, 5.247789e-01, 5.247942e-01, 5.248095e-01, 5.248248e-01, 5.248401e-01, 5.248554e-01, 5.248707e-01, 5.248860e-01, 5.249013e-01, 5.249166e-01, 5.249319e-01, 5.249472e-01, 5.249625e-01, 5.249778e-01, 5.249931e-01, 5.250084e-01, 5.250237e-01, 5.250390e-01, 5.250543e-01, 5.250696e-01, 5.250849e-01, 5.251002e-01, 5.251155e-01, 5.251308e-01, 5.251461e-01, 5.251614e-01, 5.251766e-01, 5.251920e-01, 5.252073e-01, 5.252225e-01, 5.252379e-01, 5.252532e-01, 5.252684e-01, 5.252838e-01, 5.252990e-01, 5.253143e-01, 5.253296e-01, 5.253449e-01, 5.253602e-01, 5.253755e-01, 5.253908e-01, 5.254061e-01, 5.254214e-01, 5.254367e-01, 5.254520e-01, 5.254673e-01, 5.254826e-01, 5.254979e-01, 5.255132e-01, 5.255284e-01, 5.255437e-01, 5.255590e-01, 5.255743e-01, 5.255896e-01, 5.256049e-01, 5.256202e-01, 5.256355e-01, 5.256508e-01, 5.256661e-01, 5.256814e-01, 5.256966e-01, 5.257120e-01, 5.257273e-01, 5.257425e-01, 5.257578e-01, 5.257731e-01, 5.257884e-01, 5.258037e-01, 5.258190e-01, 5.258343e-01, 5.258496e-01, 5.258648e-01, 5.258802e-01, 5.258954e-01, 5.259107e-01, 5.259261e-01, 5.259413e-01, 5.259566e-01, 5.259719e-01, 5.259872e-01, 5.260025e-01, 5.260177e-01, 5.260330e-01, 5.260483e-01, 5.260636e-01, 5.260789e-01, 5.260942e-01, 5.261095e-01, 5.261248e-01, 5.261400e-01, 5.261554e-01, 5.261706e-01, 5.261859e-01, 5.262012e-01, 5.262164e-01, 5.262318e-01, 5.262470e-01, 5.262623e-01, 5.262776e-01, 5.262929e-01, 5.263082e-01, 5.263235e-01, 5.263388e-01, 5.263541e-01, 5.263693e-01, 5.263847e-01, 5.263999e-01, 5.264152e-01, 5.264305e-01, 5.264457e-01, 5.264611e-01, 5.264763e-01, 5.264916e-01, 5.265068e-01, 5.265222e-01, 5.265374e-01, 5.265527e-01, 5.265680e-01, 5.265833e-01, 5.265986e-01, 5.266138e-01, 5.266291e-01, 5.266444e-01, 5.266597e-01, 5.266750e-01, 5.266902e-01, 5.267056e-01, 5.267208e-01, 5.267361e-01, 5.267514e-01, 5.267667e-01, 5.267820e-01, 5.267972e-01, 5.268125e-01, 5.268278e-01, 5.268431e-01, 5.268583e-01, 5.268736e-01, 5.268889e-01, 5.269042e-01, 5.269195e-01, 5.269347e-01, 5.269500e-01, 5.269653e-01, 5.269806e-01, 5.269958e-01, 5.270111e-01, 5.270264e-01, 5.270417e-01, 5.270569e-01, 5.270722e-01, 5.270875e-01, 5.271028e-01, 5.271180e-01, 5.271333e-01, 5.271486e-01, 5.271639e-01, 5.271791e-01, 5.271944e-01, 5.272097e-01, 5.272250e-01, 5.272402e-01, 5.272555e-01, 5.272708e-01, 5.272861e-01, 5.273014e-01, 5.273166e-01, 5.273319e-01, 5.273471e-01, 5.273625e-01, 5.273777e-01, 5.273930e-01, 5.274083e-01, 5.274236e-01, 5.274388e-01, 5.274541e-01, 5.274694e-01, 5.274847e-01, 5.274999e-01, 5.275152e-01, 5.275305e-01, 5.275458e-01, 5.275610e-01, 5.275763e-01, 5.275916e-01, 5.276068e-01, 5.276221e-01, 5.276374e-01, 5.276526e-01, 5.276679e-01, 5.276832e-01, 5.276985e-01, 5.277137e-01, 5.277290e-01, 5.277442e-01, 5.277595e-01, 5.277748e-01, 5.277901e-01, 5.278053e-01, 5.278206e-01, 5.278358e-01, 5.278511e-01, 5.278664e-01, 5.278817e-01, 5.278969e-01, 5.279122e-01, 5.279275e-01, 5.279428e-01, 5.279580e-01, 5.279733e-01, 5.279886e-01, 5.280038e-01, 5.280191e-01, 5.280343e-01, 5.280496e-01, 5.280648e-01, 5.280801e-01, 5.280954e-01, 5.281106e-01, 5.281259e-01, 5.281412e-01, 5.281565e-01, 5.281717e-01, 5.281870e-01, 5.282023e-01, 5.282176e-01, 5.282328e-01, 5.282481e-01, 5.282633e-01, 5.282786e-01, 5.282938e-01, 5.283091e-01, 5.283244e-01, 5.283396e-01, 5.283549e-01, 5.283702e-01, 5.283855e-01, 5.284007e-01, 5.284160e-01, 5.284312e-01, 5.284465e-01, 5.284618e-01, 5.284770e-01, 5.284923e-01, 5.285075e-01, 5.285228e-01, 5.285380e-01, 5.285533e-01, 5.285686e-01, 5.285838e-01, 5.285991e-01, 5.286143e-01, 5.286296e-01, 5.286449e-01, 5.286601e-01, 5.286754e-01, 5.286906e-01, 5.287060e-01, 5.287212e-01, 5.287364e-01, 5.287517e-01, 5.287669e-01, 5.287822e-01, 5.287974e-01, 5.288127e-01, 5.288280e-01, 5.288432e-01, 5.288585e-01, 5.288737e-01, 5.288890e-01, 5.289043e-01, 5.289195e-01, 5.289348e-01, 5.289500e-01, 5.289653e-01, 5.289806e-01, 5.289958e-01, 5.290111e-01, 5.290263e-01, 5.290416e-01, 5.290568e-01, 5.290721e-01, 5.290874e-01, 5.291026e-01, 5.291179e-01, 5.291331e-01, 5.291483e-01, 5.291636e-01, 5.291789e-01, 5.291941e-01, 5.292094e-01, 5.292246e-01, 5.292399e-01, 5.292552e-01, 5.292704e-01, 5.292856e-01, 5.293009e-01, 5.293162e-01, 5.293314e-01, 5.293466e-01, 5.293619e-01, 5.293772e-01, 5.293924e-01, 5.294077e-01, 5.294229e-01, 5.294382e-01, 5.294535e-01, 5.294687e-01, 5.294839e-01, 5.294992e-01, 5.295144e-01, 5.295297e-01, 5.295449e-01, 5.295602e-01, 5.295754e-01, 5.295907e-01, 5.296059e-01, 5.296212e-01, 5.296364e-01, 5.296517e-01, 5.296669e-01, 5.296822e-01, 5.296975e-01, 5.297127e-01, 5.297279e-01, 5.297432e-01, 5.297584e-01, 5.297737e-01, 5.297890e-01, 5.298042e-01, 5.298194e-01, 5.298346e-01, 5.298499e-01, 5.298651e-01, 5.298804e-01, 5.298957e-01, 5.299109e-01, 5.299261e-01, 5.299414e-01, 5.299566e-01, 5.299719e-01, 5.299872e-01, 5.300024e-01, 5.300176e-01, 5.300329e-01, 5.300481e-01, 5.300633e-01, 5.300786e-01, 5.300938e-01, 5.301091e-01, 5.301244e-01, 5.301396e-01, 5.301548e-01, 5.301701e-01, 5.301853e-01, 5.302005e-01, 5.302158e-01, 5.302311e-01, 5.302463e-01, 5.302616e-01, 5.302768e-01, 5.302920e-01, 5.303072e-01, 5.303225e-01, 5.303378e-01, 5.303530e-01, 5.303682e-01, 5.303835e-01, 5.303987e-01, 5.304140e-01, 5.304292e-01, 5.304444e-01, 5.304597e-01, 5.304750e-01, 5.304902e-01, 5.305054e-01, 5.305206e-01, 5.305359e-01, 5.305511e-01, 5.305663e-01, 5.305816e-01, 5.305969e-01, 5.306121e-01, 5.306273e-01, 5.306426e-01, 5.306578e-01, 5.306730e-01, 5.306883e-01, 5.307035e-01, 5.307187e-01, 5.307340e-01, 5.307492e-01, 5.307645e-01, 5.307797e-01, 5.307950e-01, 5.308102e-01, 5.308254e-01, 5.308406e-01, 5.308559e-01, 5.308712e-01, 5.308864e-01, 5.309016e-01, 5.309169e-01, 5.309321e-01, 5.309473e-01, 5.309625e-01, 5.309778e-01, 5.309930e-01, 5.310082e-01, 5.310235e-01, 5.310387e-01, 5.310540e-01, 5.310692e-01, 5.310844e-01, 5.310997e-01, 5.311149e-01, 5.311301e-01, 5.311454e-01, 5.311606e-01, 5.311758e-01, 5.311911e-01, 5.312063e-01, 5.312215e-01, 5.312367e-01, 5.312520e-01, 5.312672e-01, 5.312824e-01, 5.312977e-01, 5.313129e-01, 5.313281e-01, 5.313433e-01, 5.313586e-01, 5.313739e-01, 5.313891e-01, 5.314043e-01, 5.314196e-01, 5.314348e-01, 5.314500e-01, 5.314652e-01, 5.314805e-01, 5.314957e-01, 5.315109e-01, 5.315261e-01, 5.315413e-01, 5.315566e-01, 5.315719e-01, 5.315871e-01, 5.316023e-01, 5.316175e-01, 5.316328e-01, 5.316480e-01, 5.316632e-01, 5.316784e-01, 5.316936e-01, 5.317089e-01, 5.317242e-01, 5.317394e-01, 5.317546e-01, 5.317698e-01, 5.317850e-01, 5.318002e-01, 5.318155e-01, 5.318307e-01, 5.318459e-01, 5.318612e-01, 5.318764e-01, 5.318916e-01, 5.319068e-01, 5.319220e-01, 5.319373e-01, 5.319525e-01, 5.319678e-01, 5.319830e-01, 5.319982e-01, 5.320134e-01, 5.320286e-01, 5.320439e-01, 5.320591e-01, 5.320743e-01, 5.320895e-01, 5.321048e-01, 5.321200e-01, 5.321352e-01, 5.321504e-01, 5.321656e-01, 5.321809e-01, 5.321961e-01, 5.322113e-01, 5.322266e-01, 5.322418e-01, 5.322570e-01, 5.322722e-01, 5.322874e-01, 5.323026e-01, 5.323179e-01, 5.323331e-01, 5.323483e-01, 5.323635e-01, 5.323787e-01, 5.323940e-01, 5.324092e-01, 5.324244e-01, 5.324396e-01, 5.324548e-01, 5.324700e-01, 5.324853e-01, 5.325005e-01, 5.325157e-01, 5.325310e-01, 5.325462e-01, 5.325614e-01, 5.325766e-01, 5.325918e-01, 5.326071e-01, 5.326223e-01, 5.326375e-01, 5.326527e-01, 5.326679e-01, 5.326831e-01, 5.326984e-01, 5.327135e-01, 5.327288e-01, 5.327440e-01, 5.327592e-01, 5.327744e-01, 5.327896e-01, 5.328048e-01, 5.328201e-01, 5.328353e-01, 5.328506e-01, 5.328657e-01, 5.328810e-01, 5.328962e-01, 5.329114e-01, 5.329266e-01, 5.329418e-01, 5.329570e-01, 5.329723e-01, 5.329874e-01, 5.330027e-01, 5.330179e-01, 5.330331e-01, 5.330483e-01, 5.330635e-01, 5.330787e-01, 5.330939e-01, 5.331091e-01, 5.331244e-01, 5.331396e-01, 5.331548e-01, 5.331700e-01, 5.331852e-01, 5.332004e-01, 5.332156e-01, 5.332309e-01, 5.332460e-01, 5.332613e-01, 5.332765e-01, 5.332917e-01, 5.333070e-01, 5.333221e-01, 5.333374e-01, 5.333526e-01, 5.333678e-01, 5.333830e-01, 5.333982e-01, 5.334134e-01, 5.334286e-01, 5.334438e-01, 5.334590e-01, 5.334742e-01, 5.334895e-01, 5.335046e-01, 5.335199e-01, 5.335351e-01, 5.335503e-01, 5.335655e-01, 5.335807e-01, 5.335959e-01, 5.336111e-01, 5.336263e-01, 5.336415e-01, 5.336567e-01, 5.336719e-01, 5.336872e-01, 5.337023e-01, 5.337175e-01, 5.337328e-01, 5.337479e-01, 5.337632e-01, 5.337784e-01, 5.337936e-01, 5.338088e-01, 5.338240e-01, 5.338392e-01, 5.338544e-01, 5.338696e-01, 5.338848e-01, 5.339000e-01, 5.339152e-01, 5.339304e-01, 5.339456e-01, 5.339608e-01, 5.339760e-01, 5.339913e-01, 5.340064e-01, 5.340217e-01, 5.340369e-01, 5.340521e-01, 5.340673e-01, 5.340825e-01, 5.340977e-01, 5.341129e-01, 5.341281e-01, 5.341433e-01, 5.341585e-01, 5.341737e-01, 5.341889e-01, 5.342041e-01, 5.342193e-01, 5.342345e-01, 5.342497e-01, 5.342649e-01, 5.342801e-01, 5.342953e-01, 5.343105e-01, 5.343257e-01, 5.343409e-01, 5.343561e-01, 5.343713e-01, 5.343865e-01, 5.344017e-01, 5.344169e-01, 5.344321e-01, 5.344473e-01, 5.344625e-01, 5.344777e-01, 5.344929e-01, 5.345080e-01, 5.345233e-01, 5.345384e-01, 5.345537e-01, 5.345688e-01, 5.345841e-01, 5.345992e-01, 5.346145e-01, 5.346296e-01, 5.346448e-01, 5.346600e-01, 5.346752e-01, 5.346904e-01, 5.347056e-01, 5.347208e-01, 5.347360e-01, 5.347512e-01, 5.347664e-01, 5.347816e-01, 5.347968e-01, 5.348120e-01, 5.348272e-01, 5.348424e-01, 5.348576e-01, 5.348728e-01, 5.348880e-01, 5.349032e-01, 5.349184e-01, 5.349336e-01, 5.349488e-01, 5.349640e-01, 5.349791e-01, 5.349944e-01, 5.350095e-01, 5.350247e-01, 5.350399e-01, 5.350551e-01, 5.350703e-01, 5.350855e-01, 5.351007e-01, 5.351159e-01, 5.351311e-01, 5.351462e-01, 5.351615e-01, 5.351766e-01, 5.351918e-01, 5.352070e-01, 5.352222e-01, 5.352374e-01, 5.352526e-01, 5.352678e-01, 5.352830e-01, 5.352982e-01, 5.353134e-01, 5.353286e-01, 5.353437e-01, 5.353589e-01, 5.353741e-01, 5.353893e-01, 5.354045e-01, 5.354196e-01, 5.354349e-01, 5.354500e-01, 5.354652e-01, 5.354804e-01, 5.354956e-01, 5.355108e-01, 5.355260e-01, 5.355412e-01, 5.355564e-01, 5.355716e-01, 5.355867e-01, 5.356019e-01, 5.356171e-01, 5.356323e-01, 5.356475e-01, 5.356627e-01, 5.356779e-01, 5.356930e-01, 5.357082e-01, 5.357234e-01, 5.357386e-01, 5.357538e-01, 5.357689e-01, 5.357842e-01, 5.357993e-01, 5.358145e-01, 5.358297e-01, 5.358449e-01, 5.358601e-01, 5.358753e-01, 5.358905e-01, 5.359057e-01, 5.359208e-01, 5.359360e-01, 5.359511e-01, 5.359663e-01, 5.359815e-01, 5.359967e-01, 5.360119e-01, 5.360271e-01, 5.360423e-01, 5.360575e-01, 5.360726e-01, 5.360878e-01, 5.361030e-01, 5.361181e-01, 5.361333e-01, 5.361485e-01, 5.361637e-01, 5.361789e-01, 5.361941e-01, 5.362093e-01, 5.362244e-01, 5.362396e-01, 5.362548e-01, 5.362700e-01, 5.362852e-01, 5.363004e-01, 5.363155e-01, 5.363307e-01, 5.363458e-01, 5.363610e-01, 5.363762e-01, 5.363914e-01, 5.364066e-01, 5.364218e-01, 5.364369e-01, 5.364521e-01, 5.364673e-01, 5.364825e-01, 5.364977e-01, 5.365128e-01, 5.365280e-01, 5.365432e-01, 5.365583e-01, 5.365735e-01, 5.365887e-01, 5.366039e-01, 5.366191e-01, 5.366343e-01, 5.366494e-01, 5.366646e-01, 5.366797e-01, 5.366949e-01, 5.367101e-01, 5.367253e-01, 5.367405e-01, 5.367557e-01, 5.367708e-01, 5.367860e-01, 5.368012e-01, 5.368163e-01, 5.368315e-01, 5.368467e-01, 5.368618e-01, 5.368770e-01, 5.368922e-01, 5.369074e-01, 5.369226e-01, 5.369378e-01, 5.369529e-01, 5.369681e-01, 5.369833e-01, 5.369984e-01, 5.370136e-01, 5.370288e-01, 5.370439e-01, 5.370591e-01, 5.370743e-01, 5.370894e-01, 5.371046e-01, 5.371198e-01, 5.371349e-01, 5.371501e-01, 5.371653e-01, 5.371805e-01, 5.371956e-01, 5.372108e-01, 5.372260e-01, 5.372412e-01, 5.372564e-01, 5.372715e-01, 5.372866e-01, 5.373018e-01, 5.373170e-01, 5.373322e-01, 5.373473e-01, 5.373625e-01, 5.373777e-01, 5.373929e-01, 5.374080e-01, 5.374232e-01, 5.374383e-01, 5.374535e-01, 5.374687e-01, 5.374838e-01, 5.374990e-01, 5.375142e-01, 5.375293e-01, 5.375445e-01, 5.375597e-01, 5.375748e-01, 5.375900e-01, 5.376052e-01, 5.376204e-01, 5.376355e-01, 5.376506e-01, 5.376658e-01, 5.376810e-01, 5.376961e-01, 5.377113e-01, 5.377265e-01, 5.377417e-01, 5.377568e-01, 5.377720e-01, 5.377871e-01, 5.378023e-01, 5.378175e-01, 5.378327e-01, 5.378478e-01, 5.378630e-01, 5.378782e-01, 5.378933e-01, 5.379084e-01, 5.379236e-01, 5.379388e-01, 5.379540e-01, 5.379691e-01, 5.379843e-01, 5.379995e-01, 5.380146e-01, 5.380297e-01, 5.380449e-01, 5.380601e-01, 5.380753e-01, 5.380903e-01, 5.381055e-01, 5.381207e-01, 5.381359e-01, 5.381510e-01, 5.381662e-01, 5.381814e-01, 5.381965e-01, 5.382116e-01, 5.382268e-01, 5.382420e-01, 5.382572e-01, 5.382723e-01, 5.382875e-01, 5.383027e-01, 5.383178e-01, 5.383329e-01, 5.383481e-01, 5.383633e-01, 5.383784e-01, 5.383936e-01, 5.384087e-01, 5.384239e-01, 5.384390e-01, 5.384542e-01, 5.384693e-01, 5.384845e-01, 5.384997e-01, 5.385149e-01, 5.385299e-01, 5.385451e-01, 5.385603e-01, 5.385755e-01, 5.385906e-01, 5.386057e-01, 5.386209e-01, 5.386361e-01, 5.386512e-01, 5.386664e-01, 5.386815e-01, 5.386967e-01, 5.387118e-01, 5.387270e-01, 5.387421e-01, 5.387573e-01, 5.387725e-01, 5.387876e-01, 5.388027e-01, 5.388179e-01, 5.388331e-01, 5.388482e-01, 5.388634e-01, 5.388785e-01, 5.388936e-01, 5.389088e-01, 5.389240e-01, 5.389391e-01, 5.389543e-01, 5.389694e-01, 5.389846e-01, 5.389997e-01, 5.390149e-01, 5.390300e-01, 5.390452e-01, 5.390604e-01, 5.390755e-01, 5.390906e-01, 5.391058e-01, 5.391209e-01, 5.391361e-01, 5.391513e-01, 5.391664e-01, 5.391815e-01, 5.391967e-01, 5.392118e-01, 5.392269e-01, 5.392421e-01, 5.392573e-01, 5.392724e-01, 5.392876e-01, 5.393027e-01, 5.393178e-01, 5.393330e-01, 5.393482e-01, 5.393633e-01, 5.393785e-01, 5.393936e-01, 5.394087e-01, 5.394239e-01, 5.394391e-01, 5.394542e-01, 5.394693e-01, 5.394844e-01, 5.394996e-01, 5.395148e-01, 5.395299e-01, 5.395451e-01, 5.395602e-01, 5.395753e-01, 5.395905e-01, 5.396056e-01, 5.396208e-01, 5.396360e-01, 5.396511e-01, 5.396662e-01, 5.396814e-01, 5.396965e-01, 5.397117e-01, 5.397268e-01, 5.397419e-01, 5.397571e-01, 5.397722e-01, 5.397874e-01, 5.398025e-01, 5.398176e-01, 5.398328e-01, 5.398480e-01, 5.398631e-01, 5.398782e-01, 5.398933e-01, 5.399085e-01, 5.399237e-01, 5.399388e-01, 5.399539e-01, 5.399691e-01, 5.399842e-01, 5.399994e-01, 5.400144e-01, 5.400296e-01, 5.400448e-01, 5.400599e-01, 5.400751e-01, 5.400902e-01, 5.401053e-01, 5.401205e-01, 5.401356e-01, 5.401507e-01, 5.401659e-01, 5.401810e-01, 5.401962e-01, 5.402113e-01, 5.402265e-01, 5.402416e-01, 5.402567e-01, 5.402718e-01, 5.402870e-01, 5.403021e-01, 5.403172e-01, 5.403324e-01, 5.403475e-01, 5.403627e-01, 5.403779e-01, 5.403929e-01, 5.404081e-01, 5.404232e-01, 5.404384e-01, 5.404535e-01, 5.404686e-01, 5.404838e-01, 5.404989e-01, 5.405141e-01, 5.405292e-01, 5.405443e-01, 5.405595e-01, 5.405746e-01, 5.405897e-01, 5.406048e-01, 5.406200e-01, 5.406351e-01, 5.406502e-01, 5.406654e-01, 5.406805e-01, 5.406957e-01, 5.407108e-01, 5.407259e-01, 5.407410e-01, 5.407562e-01, 5.407713e-01, 5.407864e-01, 5.408015e-01, 5.408167e-01, 5.408318e-01, 5.408469e-01, 5.408621e-01, 5.408772e-01, 5.408924e-01, 5.409075e-01, 5.409226e-01, 5.409378e-01, 5.409529e-01, 5.409680e-01, 5.409831e-01, 5.409983e-01, 5.410134e-01, 5.410285e-01, 5.410436e-01, 5.410588e-01, 5.410739e-01, 5.410891e-01, 5.411042e-01, 5.411193e-01, 5.411344e-01, 5.411496e-01, 5.411647e-01, 5.411798e-01, 5.411950e-01, 5.412101e-01, 5.412252e-01, 5.412403e-01, 5.412555e-01, 5.412706e-01, 5.412858e-01, 5.413008e-01, 5.413160e-01, 5.413311e-01, 5.413462e-01, 5.413613e-01, 5.413765e-01, 5.413916e-01, 5.414067e-01, 5.414218e-01, 5.414370e-01, 5.414521e-01, 5.414672e-01, 5.414823e-01, 5.414975e-01, 5.415126e-01, 5.415277e-01, 5.415428e-01, 5.415580e-01, 5.415731e-01, 5.415882e-01, 5.416033e-01, 5.416185e-01, 5.416336e-01, 5.416487e-01, 5.416638e-01, 5.416790e-01, 5.416941e-01, 5.417092e-01, 5.417243e-01, 5.417395e-01, 5.417546e-01, 5.417697e-01, 5.417848e-01, 5.418000e-01, 5.418150e-01, 5.418302e-01, 5.418453e-01, 5.418604e-01, 5.418755e-01, 5.418907e-01, 5.419058e-01, 5.419209e-01, 5.419360e-01, 5.419511e-01, 5.419663e-01, 5.419814e-01, 5.419965e-01, 5.420116e-01, 5.420268e-01, 5.420418e-01, 5.420570e-01, 5.420721e-01, 5.420872e-01, 5.421023e-01, 5.421175e-01, 5.421326e-01, 5.421477e-01, 5.421628e-01, 5.421779e-01, 5.421931e-01, 5.422081e-01, 5.422233e-01, 5.422384e-01, 5.422535e-01, 5.422686e-01, 5.422837e-01, 5.422989e-01, 5.423140e-01, 5.423291e-01, 5.423442e-01, 5.423594e-01, 5.423744e-01, 5.423896e-01, 5.424047e-01, 5.424198e-01, 5.424349e-01, 5.424500e-01, 5.424652e-01, 5.424802e-01, 5.424954e-01, 5.425104e-01, 5.425256e-01, 5.425407e-01, 5.425558e-01, 5.425709e-01, 5.425860e-01, 5.426012e-01, 5.426162e-01, 5.426314e-01, 5.426465e-01, 5.426616e-01, 5.426767e-01, 5.426918e-01, 5.427070e-01, 5.427220e-01, 5.427372e-01, 5.427523e-01, 5.427674e-01, 5.427825e-01, 5.427976e-01, 5.428127e-01, 5.428278e-01, 5.428429e-01, 5.428581e-01, 5.428731e-01, 5.428883e-01, 5.429034e-01, 5.429185e-01, 5.429336e-01, 5.429487e-01, 5.429639e-01, 5.429789e-01, 5.429940e-01, 5.430092e-01, 5.430242e-01, 5.430394e-01, 5.430545e-01, 5.430696e-01, 5.430847e-01, 5.430998e-01, 5.431150e-01, 5.431300e-01, 5.431451e-01, 5.431603e-01, 5.431753e-01, 5.431904e-01, 5.432056e-01, 5.432206e-01, 5.432358e-01, 5.432509e-01, 5.432660e-01, 5.432811e-01, 5.432962e-01, 5.433113e-01, 5.433264e-01, 5.433415e-01, 5.433566e-01, 5.433717e-01, 5.433868e-01, 5.434020e-01, 5.434170e-01, 5.434322e-01, 5.434473e-01, 5.434623e-01, 5.434775e-01, 5.434926e-01, 5.435076e-01, 5.435228e-01, 5.435379e-01, 5.435530e-01, 5.435681e-01, 5.435832e-01, 5.435983e-01, 5.436134e-01, 5.436285e-01, 5.436436e-01, 5.436587e-01, 5.436738e-01, 5.436889e-01, 5.437040e-01, 5.437191e-01, 5.437342e-01, 5.437493e-01, 5.437644e-01, 5.437795e-01, 5.437946e-01, 5.438097e-01, 5.438248e-01, 5.438399e-01, 5.438550e-01, 5.438701e-01, 5.438852e-01, 5.439003e-01, 5.439155e-01, 5.439305e-01, 5.439456e-01, 5.439607e-01, 5.439758e-01, 5.439909e-01, 5.440060e-01, 5.440211e-01, 5.440362e-01, 5.440513e-01, 5.440664e-01, 5.440814e-01, 5.440966e-01, 5.441117e-01, 5.441268e-01, 5.441419e-01, 5.441570e-01, 5.441720e-01, 5.441872e-01, 5.442023e-01, 5.442173e-01, 5.442325e-01, 5.442476e-01, 5.442626e-01, 5.442777e-01, 5.442929e-01, 5.443079e-01, 5.443230e-01, 5.443381e-01, 5.443532e-01, 5.443683e-01, 5.443834e-01, 5.443985e-01, 5.444136e-01, 5.444287e-01, 5.444438e-01, 5.444589e-01, 5.444740e-01, 5.444891e-01, 5.445042e-01, 5.445192e-01, 5.445343e-01, 5.445495e-01, 5.445645e-01, 5.445796e-01, 5.445947e-01, 5.446098e-01, 5.446249e-01, 5.446400e-01, 5.446551e-01, 5.446702e-01, 5.446852e-01, 5.447004e-01, 5.447155e-01, 5.447305e-01, 5.447456e-01, 5.447607e-01, 5.447758e-01, 5.447909e-01, 5.448060e-01, 5.448211e-01, 5.448362e-01, 5.448512e-01, 5.448664e-01, 5.448815e-01, 5.448965e-01, 5.449116e-01, 5.449267e-01, 5.449418e-01, 5.449569e-01, 5.449719e-01, 5.449870e-01, 5.450022e-01, 5.450172e-01, 5.450323e-01, 5.450474e-01, 5.450625e-01, 5.450776e-01, 5.450927e-01, 5.451078e-01, 5.451228e-01, 5.451379e-01, 5.451530e-01, 5.451681e-01, 5.451832e-01, 5.451983e-01, 5.452134e-01, 5.452285e-01, 5.452435e-01, 5.452586e-01, 5.452737e-01, 5.452888e-01, 5.453039e-01, 5.453190e-01, 5.453340e-01, 5.453491e-01, 5.453642e-01, 5.453793e-01, 5.453944e-01, 5.454095e-01, 5.454246e-01, 5.454396e-01, 5.454547e-01, 5.454698e-01, 5.454849e-01, 5.455000e-01, 5.455151e-01, 5.455301e-01, 5.455452e-01, 5.455603e-01, 5.455754e-01, 5.455905e-01, 5.456055e-01, 5.456206e-01, 5.456357e-01, 5.456508e-01, 5.456659e-01, 5.456809e-01, 5.456960e-01, 5.457111e-01, 5.457262e-01, 5.457413e-01, 5.457564e-01, 5.457714e-01, 5.457865e-01, 5.458016e-01, 5.458167e-01, 5.458317e-01, 5.458468e-01, 5.458619e-01, 5.458770e-01, 5.458921e-01, 5.459071e-01, 5.459222e-01, 5.459373e-01, 5.459524e-01, 5.459675e-01, 5.459825e-01, 5.459976e-01, 5.460127e-01, 5.460278e-01, 5.460429e-01, 5.460579e-01, 5.460730e-01, 5.460881e-01, 5.461032e-01, 5.461182e-01, 5.461333e-01, 5.461484e-01, 5.461634e-01, 5.461785e-01, 5.461936e-01, 5.462087e-01, 5.462238e-01, 5.462388e-01, 5.462539e-01, 5.462690e-01, 5.462841e-01, 5.462992e-01, 5.463142e-01, 5.463293e-01, 5.463444e-01, 5.463594e-01, 5.463745e-01, 5.463896e-01, 5.464047e-01, 5.464197e-01, 5.464348e-01, 5.464499e-01, 5.464649e-01, 5.464801e-01, 5.464951e-01, 5.465102e-01, 5.465252e-01, 5.465403e-01, 5.465554e-01, 5.465705e-01, 5.465856e-01, 5.466006e-01, 5.466157e-01, 5.466307e-01, 5.466458e-01, 5.466609e-01, 5.466760e-01, 5.466910e-01, 5.467061e-01, 5.467212e-01, 5.467362e-01, 5.467513e-01, 5.467664e-01, 5.467814e-01, 5.467965e-01, 5.468116e-01, 5.468267e-01, 5.468417e-01, 5.468568e-01, 5.468718e-01, 5.468869e-01, 5.469020e-01, 5.469171e-01, 5.469321e-01, 5.469472e-01, 5.469623e-01, 5.469773e-01, 5.469924e-01, 5.470074e-01, 5.470225e-01, 5.470376e-01, 5.470526e-01, 5.470678e-01, 5.470828e-01, 5.470979e-01, 5.471129e-01, 5.471280e-01, 5.471430e-01, 5.471581e-01, 5.471732e-01, 5.471883e-01, 5.472033e-01, 5.472184e-01, 5.472335e-01, 5.472485e-01, 5.472636e-01, 5.472786e-01, 5.472937e-01, 5.473087e-01, 5.473238e-01, 5.473389e-01, 5.473540e-01, 5.473690e-01, 5.473841e-01, 5.473992e-01, 5.474142e-01, 5.474293e-01, 5.474443e-01, 5.474594e-01, 5.474745e-01, 5.474895e-01, 5.475046e-01, 5.475197e-01, 5.475347e-01, 5.475498e-01, 5.475649e-01, 5.475799e-01, 5.475950e-01, 5.476100e-01, 5.476251e-01, 5.476401e-01, 5.476552e-01, 5.476703e-01, 5.476853e-01, 5.477004e-01, 5.477154e-01, 5.477305e-01, 5.477456e-01, 5.477606e-01, 5.477757e-01, 5.477908e-01, 5.478058e-01, 5.478209e-01, 5.478359e-01, 5.478510e-01, 5.478660e-01, 5.478811e-01, 5.478961e-01, 5.479112e-01, 5.479262e-01, 5.479413e-01, 5.479563e-01, 5.479714e-01, 5.479865e-01, 5.480016e-01, 5.480166e-01, 5.480317e-01, 5.480467e-01, 5.480617e-01, 5.480769e-01, 5.480919e-01, 5.481070e-01, 5.481220e-01, 5.481371e-01, 5.481521e-01, 5.481672e-01, 5.481822e-01, 5.481973e-01, 5.482123e-01, 5.482274e-01, 5.482424e-01, 5.482575e-01, 5.482726e-01, 5.482876e-01, 5.483027e-01, 5.483177e-01, 5.483328e-01, 5.483478e-01, 5.483629e-01, 5.483779e-01, 5.483930e-01, 5.484080e-01, 5.484231e-01, 5.484381e-01, 5.484532e-01, 5.484682e-01, 5.484833e-01, 5.484983e-01, 5.485134e-01, 5.485284e-01, 5.485435e-01, 5.485585e-01, 5.485736e-01, 5.485886e-01, 5.486037e-01, 5.486187e-01, 5.486338e-01, 5.486488e-01, 5.486639e-01, 5.486789e-01, 5.486940e-01, 5.487090e-01, 5.487241e-01, 5.487391e-01, 5.487542e-01, 5.487692e-01, 5.487843e-01, 5.487993e-01, 5.488144e-01, 5.488294e-01, 5.488445e-01, 5.488595e-01, 5.488746e-01, 5.488896e-01, 5.489047e-01, 5.489197e-01, 5.489348e-01, 5.489498e-01, 5.489649e-01, 5.489799e-01, 5.489950e-01, 5.490100e-01, 5.490251e-01, 5.490401e-01, 5.490551e-01, 5.490702e-01, 5.490852e-01, 5.491003e-01, 5.491153e-01, 5.491304e-01, 5.491454e-01, 5.491605e-01, 5.491755e-01, 5.491905e-01, 5.492055e-01, 5.492206e-01, 5.492356e-01, 5.492507e-01, 5.492657e-01, 5.492808e-01, 5.492958e-01, 5.493109e-01, 5.493259e-01, 5.493410e-01, 5.493560e-01, 5.493711e-01, 5.493861e-01, 5.494012e-01, 5.494162e-01, 5.494312e-01, 5.494463e-01, 5.494613e-01, 5.494764e-01, 5.494914e-01, 5.495064e-01, 5.495214e-01, 5.495365e-01, 5.495515e-01, 5.495666e-01, 5.495816e-01, 5.495967e-01, 5.496117e-01, 5.496268e-01, 5.496418e-01, 5.496569e-01, 5.496718e-01, 5.496869e-01, 5.497019e-01, 5.497170e-01, 5.497320e-01, 5.497470e-01, 5.497621e-01, 5.497772e-01, 5.497922e-01, 5.498072e-01, 5.498223e-01, 5.498373e-01, 5.498524e-01, 5.498673e-01, 5.498824e-01, 5.498974e-01, 5.499125e-01, 5.499275e-01, 5.499426e-01, 5.499576e-01, 5.499726e-01, 5.499877e-01, 5.500027e-01, 5.500178e-01, 5.500327e-01, 5.500478e-01, 5.500628e-01, 5.500779e-01, 5.500929e-01, 5.501080e-01, 5.501230e-01, 5.501380e-01, 5.501531e-01, 5.501681e-01, 5.501831e-01, 5.501981e-01, 5.502132e-01, 5.502282e-01, 5.502433e-01, 5.502583e-01, 5.502733e-01, 5.502884e-01, 5.503034e-01, 5.503184e-01, 5.503334e-01, 5.503485e-01, 5.503635e-01, 5.503786e-01, 5.503936e-01, 5.504086e-01, 5.504236e-01, 5.504387e-01, 5.504537e-01, 5.504687e-01, 5.504838e-01, 5.504988e-01, 5.505139e-01, 5.505288e-01, 5.505439e-01, 5.505589e-01, 5.505739e-01, 5.505890e-01, 5.506040e-01, 5.506191e-01, 5.506341e-01, 5.506491e-01, 5.506641e-01, 5.506791e-01, 5.506942e-01, 5.507092e-01, 5.507243e-01, 5.507393e-01, 5.507543e-01, 5.507693e-01, 5.507843e-01, 5.507994e-01, 5.508144e-01, 5.508294e-01, 5.508445e-01, 5.508595e-01, 5.508745e-01, 5.508896e-01, 5.509046e-01, 5.509196e-01, 5.509346e-01, 5.509496e-01, 5.509647e-01, 5.509797e-01, 5.509947e-01, 5.510098e-01, 5.510247e-01, 5.510398e-01, 5.510548e-01, 5.510699e-01, 5.510849e-01, 5.510999e-01, 5.511149e-01, 5.511300e-01, 5.511450e-01, 5.511600e-01, 5.511751e-01, 5.511900e-01, 5.512051e-01, 5.512201e-01, 5.512351e-01, 5.512502e-01, 5.512651e-01, 5.512802e-01, 5.512952e-01, 5.513102e-01, 5.513253e-01, 5.513403e-01, 5.513553e-01, 5.513703e-01, 5.513853e-01, 5.514004e-01, 5.514154e-01, 5.514304e-01, 5.514454e-01, 5.514604e-01, 5.514755e-01, 5.514905e-01, 5.515055e-01, 5.515205e-01, 5.515355e-01, 5.515506e-01, 5.515656e-01, 5.515806e-01, 5.515956e-01, 5.516106e-01, 5.516257e-01, 5.516407e-01, 5.516557e-01, 5.516707e-01, 5.516858e-01, 5.517007e-01, 5.517158e-01, 5.517308e-01, 5.517458e-01, 5.517608e-01, 5.517759e-01, 5.517908e-01, 5.518059e-01, 5.518209e-01, 5.518359e-01, 5.518509e-01, 5.518659e-01, 5.518810e-01, 5.518960e-01, 5.519110e-01, 5.519260e-01, 5.519410e-01, 5.519561e-01, 5.519711e-01, 5.519860e-01, 5.520011e-01, 5.520161e-01, 5.520311e-01, 5.520461e-01, 5.520611e-01, 5.520762e-01, 5.520912e-01, 5.521062e-01, 5.521212e-01, 5.521362e-01, 5.521513e-01, 5.521662e-01, 5.521812e-01, 5.521963e-01, 5.522113e-01, 5.522262e-01, 5.522413e-01, 5.522563e-01, 5.522713e-01, 5.522863e-01, 5.523013e-01, 5.523164e-01, 5.523313e-01, 5.523464e-01, 5.523614e-01, 5.523764e-01, 5.523914e-01, 5.524064e-01, 5.524215e-01, 5.524364e-01, 5.524515e-01, 5.524665e-01, 5.524815e-01, 5.524965e-01, 5.525115e-01, 5.525265e-01, 5.525415e-01, 5.525565e-01, 5.525715e-01, 5.525866e-01, 5.526015e-01, 5.526166e-01, 5.526316e-01, 5.526466e-01, 5.526616e-01, 5.526766e-01, 5.526916e-01, 5.527066e-01, 5.527216e-01, 5.527366e-01, 5.527517e-01, 5.527666e-01, 5.527816e-01, 5.527967e-01, 5.528117e-01, 5.528266e-01, 5.528417e-01, 5.528567e-01, 5.528717e-01, 5.528867e-01, 5.529017e-01, 5.529167e-01, 5.529317e-01, 5.529467e-01, 5.529617e-01, 5.529767e-01, 5.529917e-01, 5.530067e-01, 5.530217e-01, 5.530367e-01, 5.530518e-01, 5.530667e-01, 5.530818e-01, 5.530968e-01, 5.531118e-01, 5.531268e-01, 5.531418e-01, 5.531568e-01, 5.531718e-01, 5.531868e-01, 5.532018e-01, 5.532168e-01, 5.532318e-01, 5.532468e-01, 5.532618e-01, 5.532768e-01, 5.532918e-01, 5.533068e-01, 5.533218e-01, 5.533368e-01, 5.533518e-01, 5.533668e-01, 5.533818e-01, 5.533968e-01, 5.534118e-01, 5.534268e-01, 5.534418e-01, 5.534568e-01, 5.534718e-01, 5.534868e-01, 5.535018e-01, 5.535168e-01, 5.535318e-01, 5.535468e-01, 5.535618e-01, 5.535768e-01, 5.535918e-01, 5.536067e-01, 5.536218e-01, 5.536368e-01, 5.536518e-01, 5.536668e-01, 5.536818e-01, 5.536968e-01, 5.537118e-01, 5.537268e-01, 5.537418e-01, 5.537568e-01, 5.537717e-01, 5.537868e-01, 5.538018e-01, 5.538168e-01, 5.538318e-01, 5.538467e-01, 5.538617e-01, 5.538768e-01, 5.538918e-01, 5.539067e-01, 5.539217e-01, 5.539367e-01, 5.539517e-01, 5.539667e-01, 5.539817e-01, 5.539967e-01, 5.540117e-01, 5.540267e-01, 5.540417e-01, 5.540567e-01, 5.540717e-01, 5.540866e-01, 5.541016e-01, 5.541167e-01, 5.541316e-01, 5.541466e-01, 5.541616e-01, 5.541766e-01, 5.541916e-01, 5.542066e-01, 5.542216e-01, 5.542366e-01, 5.542516e-01, 5.542666e-01, 5.542815e-01, 5.542966e-01, 5.543116e-01, 5.543265e-01, 5.543416e-01, 5.543565e-01, 5.543715e-01, 5.543865e-01, 5.544015e-01, 5.544165e-01, 5.544315e-01, 5.544465e-01, 5.544614e-01, 5.544764e-01, 5.544914e-01, 5.545064e-01, 5.545214e-01, 5.545364e-01, 5.545514e-01, 5.545664e-01, 5.545813e-01, 5.545964e-01, 5.546113e-01, 5.546263e-01, 5.546413e-01, 5.546563e-01, 5.546713e-01, 5.546862e-01, 5.547013e-01, 5.547162e-01, 5.547312e-01, 5.547462e-01, 5.547612e-01, 5.547762e-01, 5.547912e-01, 5.548061e-01, 5.548211e-01, 5.548362e-01, 5.548511e-01, 5.548661e-01, 5.548811e-01, 5.548961e-01, 5.549111e-01, 5.549260e-01, 5.549410e-01, 5.549560e-01, 5.549710e-01, 5.549860e-01, 5.550010e-01, 5.550160e-01, 5.550309e-01, 5.550459e-01, 5.550609e-01, 5.550759e-01, 5.550908e-01, 5.551059e-01, 5.551208e-01, 5.551358e-01, 5.551508e-01, 5.551658e-01, 5.551808e-01, 5.551957e-01, 5.552107e-01, 5.552257e-01, 5.552407e-01, 5.552557e-01, 5.552707e-01, 5.552856e-01, 5.553006e-01, 5.553156e-01, 5.553306e-01, 5.553455e-01, 5.553606e-01, 5.553755e-01, 5.553905e-01, 5.554054e-01, 5.554205e-01, 5.554354e-01, 5.554504e-01, 5.554654e-01, 5.554804e-01, 5.554954e-01, 5.555103e-01, 5.555253e-01, 5.555403e-01, 5.555553e-01, 5.555702e-01, 5.555852e-01, 5.556002e-01, 5.556152e-01, 5.556301e-01, 5.556451e-01, 5.556601e-01, 5.556751e-01, 5.556901e-01, 5.557051e-01, 5.557200e-01, 5.557350e-01, 5.557500e-01, 5.557650e-01, 5.557799e-01, 5.557949e-01, 5.558099e-01, 5.558248e-01, 5.558398e-01, 5.558548e-01, 5.558698e-01, 5.558847e-01, 5.558997e-01, 5.559147e-01, 5.559297e-01, 5.559446e-01, 5.559596e-01, 5.559746e-01, 5.559896e-01, 5.560045e-01, 5.560195e-01, 5.560345e-01, 5.560495e-01, 5.560644e-01, 5.560794e-01, 5.560943e-01, 5.561094e-01, 5.561243e-01, 5.561393e-01, 5.561543e-01, 5.561692e-01, 5.561842e-01, 5.561991e-01, 5.562142e-01, 5.562291e-01, 5.562441e-01, 5.562590e-01, 5.562740e-01, 5.562890e-01, 5.563040e-01, 5.563189e-01, 5.563339e-01, 5.563489e-01, 5.563638e-01, 5.563788e-01, 5.563938e-01, 5.564088e-01, 5.564237e-01, 5.564387e-01, 5.564536e-01, 5.564686e-01, 5.564836e-01, 5.564986e-01, 5.565135e-01, 5.565285e-01, 5.565435e-01, 5.565584e-01, 5.565734e-01, 5.565884e-01, 5.566034e-01, 5.566183e-01, 5.566333e-01, 5.566483e-01, 5.566632e-01, 5.566782e-01, 5.566931e-01, 5.567081e-01, 5.567231e-01, 5.567380e-01, 5.567530e-01, 5.567680e-01, 5.567830e-01, 5.567979e-01, 5.568129e-01, 5.568278e-01, 5.568428e-01, 5.568578e-01, 5.568727e-01, 5.568877e-01, 5.569026e-01, 5.569176e-01, 5.569326e-01, 5.569475e-01, 5.569625e-01, 5.569775e-01, 5.569924e-01, 5.570074e-01, 5.570223e-01, 5.570373e-01, 5.570523e-01, 5.570672e-01, 5.570822e-01, 5.570971e-01, 5.571121e-01, 5.571271e-01, 5.571421e-01, 5.571570e-01, 5.571720e-01, 5.571870e-01, 5.572019e-01, 5.572169e-01, 5.572318e-01, 5.572468e-01, 5.572618e-01, 5.572767e-01, 5.572917e-01, 5.573066e-01, 5.573216e-01, 5.573366e-01, 5.573515e-01, 5.573664e-01, 5.573814e-01, 5.573964e-01, 5.574113e-01, 5.574263e-01, 5.574412e-01, 5.574562e-01, 5.574712e-01, 5.574862e-01, 5.575011e-01, 5.575161e-01, 5.575310e-01, 5.575460e-01, 5.575609e-01, 5.575759e-01, 5.575908e-01, 5.576058e-01, 5.576208e-01, 5.576357e-01, 5.576506e-01, 5.576656e-01, 5.576805e-01, 5.576955e-01, 5.577105e-01, 5.577255e-01, 5.577404e-01, 5.577554e-01, 5.577703e-01, 5.577853e-01, 5.578002e-01, 5.578152e-01, 5.578301e-01, 5.578451e-01, 5.578600e-01, 5.578750e-01, 5.578899e-01, 5.579049e-01, 5.579199e-01, 5.579348e-01, 5.579498e-01, 5.579647e-01, 5.579796e-01, 5.579946e-01, 5.580096e-01, 5.580245e-01, 5.580395e-01, 5.580544e-01, 5.580694e-01, 5.580844e-01, 5.580993e-01, 5.581142e-01, 5.581292e-01, 5.581442e-01, 5.581591e-01, 5.581740e-01, 5.581890e-01, 5.582039e-01, 5.582189e-01, 5.582339e-01, 5.582488e-01, 5.582638e-01, 5.582787e-01, 5.582936e-01, 5.583086e-01, 5.583235e-01, 5.583385e-01, 5.583535e-01, 5.583684e-01, 5.583833e-01, 5.583983e-01, 5.584132e-01, 5.584282e-01, 5.584431e-01, 5.584581e-01, 5.584731e-01, 5.584880e-01, 5.585029e-01, 5.585179e-01, 5.585328e-01, 5.585477e-01, 5.585627e-01, 5.585777e-01, 5.585926e-01, 5.586076e-01, 5.586225e-01, 5.586374e-01, 5.586524e-01, 5.586673e-01, 5.586823e-01, 5.586972e-01, 5.587122e-01, 5.587271e-01, 5.587420e-01, 5.587570e-01, 5.587720e-01, 5.587869e-01, 5.588018e-01, 5.588168e-01, 5.588318e-01, 5.588467e-01, 5.588616e-01, 5.588766e-01, 5.588915e-01, 5.589064e-01, 5.589214e-01, 5.589364e-01, 5.589513e-01, 5.589662e-01, 5.589811e-01, 5.589961e-01, 5.590110e-01, 5.590260e-01, 5.590410e-01, 5.590559e-01, 5.590708e-01, 5.590858e-01, 5.591007e-01, 5.591156e-01, 5.591306e-01, 5.591455e-01, 5.591605e-01, 5.591754e-01, 5.591904e-01, 5.592053e-01, 5.592203e-01, 5.592352e-01, 5.592501e-01, 5.592651e-01, 5.592800e-01, 5.592949e-01, 5.593098e-01, 5.593248e-01, 5.593398e-01, 5.593547e-01, 5.593696e-01, 5.593846e-01, 5.593995e-01, 5.594144e-01, 5.594294e-01, 5.594443e-01, 5.594593e-01, 5.594742e-01, 5.594891e-01, 5.595041e-01, 5.595190e-01, 5.595340e-01, 5.595489e-01, 5.595638e-01, 5.595787e-01, 5.595937e-01, 5.596086e-01, 5.596235e-01, 5.596384e-01, 5.596534e-01, 5.596684e-01, 5.596833e-01, 5.596982e-01, 5.597131e-01, 5.597281e-01, 5.597430e-01, 5.597579e-01, 5.597729e-01, 5.597878e-01, 5.598028e-01, 5.598177e-01, 5.598326e-01, 5.598475e-01, 5.598625e-01, 5.598775e-01, 5.598924e-01, 5.599073e-01, 5.599222e-01, 5.599372e-01, 5.599521e-01, 5.599670e-01, 5.599819e-01, 5.599969e-01, 5.600119e-01, 5.600268e-01, 5.600417e-01, 5.600566e-01, 5.600716e-01, 5.600865e-01, 5.601014e-01, 5.601164e-01, 5.601313e-01, 5.601462e-01, 5.601612e-01, 5.601761e-01, 5.601910e-01, 5.602059e-01, 5.602208e-01, 5.602358e-01, 5.602507e-01, 5.602657e-01, 5.602806e-01, 5.602955e-01, 5.603104e-01, 5.603254e-01, 5.603403e-01, 5.603552e-01, 5.603701e-01, 5.603851e-01, 5.604000e-01, 5.604149e-01, 5.604299e-01, 5.604448e-01, 5.604597e-01, 5.604746e-01, 5.604896e-01, 5.605045e-01, 5.605195e-01, 5.605344e-01, 5.605493e-01, 5.605642e-01, 5.605791e-01, 5.605940e-01, 5.606090e-01, 5.606239e-01, 5.606388e-01, 5.606537e-01, 5.606687e-01, 5.606836e-01, 5.606985e-01, 5.607135e-01, 5.607284e-01, 5.607433e-01, 5.607582e-01, 5.607732e-01, 5.607881e-01, 5.608030e-01, 5.608179e-01, 5.608329e-01, 5.608478e-01, 5.608627e-01, 5.608776e-01, 5.608926e-01, 5.609075e-01, 5.609224e-01, 5.609373e-01, 5.609522e-01, 5.609671e-01, 5.609821e-01, 5.609970e-01, 5.610119e-01, 5.610268e-01, 5.610418e-01, 5.610567e-01, 5.610716e-01, 5.610865e-01, 5.611014e-01, 5.611163e-01, 5.611313e-01, 5.611462e-01, 5.611611e-01, 5.611761e-01, 5.611910e-01, 5.612059e-01, 5.612208e-01, 5.612357e-01, 5.612506e-01, 5.612655e-01, 5.612805e-01, 5.612954e-01, 5.613103e-01, 5.613253e-01, 5.613402e-01, 5.613551e-01, 5.613700e-01, 5.613849e-01, 5.613998e-01, 5.614147e-01, 5.614297e-01, 5.614446e-01, 5.614595e-01, 5.614744e-01, 5.614893e-01, 5.615042e-01, 5.615192e-01, 5.615340e-01, 5.615490e-01, 5.615639e-01, 5.615788e-01, 5.615937e-01, 5.616087e-01, 5.616236e-01, 5.616385e-01, 5.616534e-01, 5.616683e-01, 5.616832e-01, 5.616981e-01, 5.617130e-01, 5.617279e-01, 5.617429e-01, 5.617578e-01, 5.617727e-01, 5.617877e-01, 5.618026e-01, 5.618175e-01, 5.618324e-01, 5.618473e-01, 5.618622e-01, 5.618771e-01, 5.618920e-01, 5.619069e-01, 5.619218e-01, 5.619367e-01, 5.619517e-01, 5.619666e-01, 5.619815e-01, 5.619964e-01, 5.620113e-01, 5.620262e-01, 5.620412e-01, 5.620561e-01, 5.620710e-01, 5.620859e-01, 5.621008e-01, 5.621157e-01, 5.621306e-01, 5.621455e-01, 5.621604e-01, 5.621753e-01, 5.621902e-01, 5.622051e-01, 5.622200e-01, 5.622350e-01, 5.622499e-01, 5.622648e-01, 5.622797e-01, 5.622946e-01, 5.623095e-01, 5.623244e-01, 5.623393e-01, 5.623543e-01, 5.623691e-01, 5.623841e-01, 5.623990e-01, 5.624139e-01, 5.624288e-01, 5.624437e-01, 5.624586e-01, 5.624735e-01, 5.624884e-01, 5.625033e-01, 5.625182e-01, 5.625331e-01, 5.625480e-01, 5.625629e-01, 5.625778e-01, 5.625927e-01, 5.626076e-01, 5.626225e-01, 5.626374e-01, 5.626523e-01, 5.626673e-01, 5.626822e-01, 5.626971e-01, 5.627120e-01, 5.627269e-01, 5.627418e-01, 5.627567e-01, 5.627716e-01, 5.627865e-01, 5.628014e-01, 5.628163e-01, 5.628312e-01, 5.628461e-01, 5.628610e-01, 5.628759e-01, 5.628908e-01, 5.629057e-01, 5.629206e-01, 5.629355e-01, 5.629504e-01, 5.629653e-01, 5.629802e-01, 5.629951e-01, 5.630100e-01, 5.630249e-01, 5.630398e-01, 5.630547e-01, 5.630696e-01, 5.630845e-01, 5.630994e-01, 5.631143e-01, 5.631292e-01, 5.631441e-01, 5.631590e-01, 5.631739e-01, 5.631889e-01, 5.632037e-01, 5.632187e-01, 5.632335e-01, 5.632484e-01, 5.632633e-01, 5.632782e-01, 5.632931e-01, 5.633080e-01, 5.633229e-01, 5.633378e-01, 5.633527e-01, 5.633676e-01, 5.633825e-01, 5.633974e-01, 5.634123e-01, 5.634272e-01, 5.634421e-01, 5.634570e-01, 5.634719e-01, 5.634868e-01, 5.635017e-01, 5.635166e-01, 5.635315e-01, 5.635464e-01, 5.635613e-01, 5.635762e-01, 5.635911e-01, 5.636060e-01, 5.636208e-01, 5.636357e-01, 5.636506e-01, 5.636655e-01, 5.636804e-01, 5.636953e-01, 5.637102e-01, 5.637251e-01, 5.637400e-01, 5.637549e-01, 5.637698e-01, 5.637847e-01, 5.637996e-01, 5.638145e-01, 5.638294e-01, 5.638442e-01, 5.638592e-01, 5.638740e-01, 5.638889e-01, 5.639038e-01, 5.639187e-01, 5.639336e-01, 5.639485e-01, 5.639634e-01, 5.639783e-01, 5.639932e-01, 5.640081e-01, 5.640229e-01, 5.640378e-01, 5.640527e-01, 5.640676e-01, 5.640825e-01, 5.640974e-01, 5.641122e-01, 5.641271e-01, 5.641420e-01, 5.641569e-01, 5.641719e-01, 5.641867e-01, 5.642016e-01, 5.642165e-01, 5.642314e-01, 5.642463e-01, 5.642611e-01, 5.642760e-01, 5.642909e-01, 5.643058e-01, 5.643207e-01, 5.643356e-01, 5.643505e-01, 5.643654e-01, 5.643802e-01, 5.643951e-01, 5.644100e-01, 5.644249e-01, 5.644398e-01, 5.644547e-01, 5.644696e-01, 5.644845e-01, 5.644993e-01, 5.645142e-01, 5.645291e-01, 5.645440e-01, 5.645589e-01, 5.645738e-01, 5.645887e-01, 5.646035e-01, 5.646185e-01, 5.646333e-01, 5.646482e-01, 5.646631e-01, 5.646780e-01, 5.646928e-01, 5.647078e-01, 5.647226e-01, 5.647375e-01, 5.647524e-01, 5.647672e-01, 5.647821e-01, 5.647970e-01, 5.648119e-01, 5.648268e-01, 5.648417e-01, 5.648565e-01, 5.648714e-01, 5.648863e-01, 5.649012e-01, 5.649161e-01, 5.649310e-01, 5.649459e-01, 5.649607e-01, 5.649756e-01, 5.649905e-01, 5.650054e-01, 5.650203e-01, 5.650351e-01, 5.650500e-01, 5.650648e-01, 5.650797e-01, 5.650946e-01, 5.651096e-01, 5.651244e-01, 5.651393e-01, 5.651542e-01, 5.651690e-01, 5.651839e-01, 5.651988e-01, 5.652137e-01, 5.652285e-01, 5.652434e-01, 5.652583e-01, 5.652732e-01, 5.652881e-01, 5.653029e-01, 5.653178e-01, 5.653327e-01, 5.653476e-01, 5.653625e-01, 5.653773e-01, 5.653922e-01, 5.654070e-01, 5.654219e-01, 5.654368e-01, 5.654517e-01, 5.654666e-01, 5.654814e-01, 5.654963e-01, 5.655112e-01, 5.655261e-01, 5.655410e-01, 5.655558e-01, 5.655707e-01, 5.655856e-01, 5.656005e-01, 5.656154e-01, 5.656302e-01, 5.656451e-01, 5.656599e-01, 5.656748e-01, 5.656897e-01, 5.657045e-01, 5.657194e-01, 5.657343e-01, 5.657492e-01, 5.657641e-01, 5.657789e-01, 5.657938e-01, 5.658087e-01, 5.658235e-01, 5.658384e-01, 5.658533e-01, 5.658681e-01, 5.658830e-01, 5.658979e-01, 5.659128e-01, 5.659277e-01, 5.659425e-01, 5.659574e-01, 5.659723e-01, 5.659871e-01, 5.660020e-01, 5.660169e-01, 5.660318e-01, 5.660466e-01, 5.660614e-01, 5.660763e-01, 5.660912e-01, 5.661061e-01, 5.661210e-01, 5.661358e-01, 5.661507e-01, 5.661656e-01, 5.661804e-01, 5.661953e-01, 5.662102e-01, 5.662250e-01, 5.662399e-01, 5.662548e-01, 5.662696e-01, 5.662845e-01, 5.662994e-01, 5.663142e-01, 5.663291e-01, 5.663440e-01, 5.663588e-01, 5.663737e-01, 5.663885e-01, 5.664034e-01, 5.664183e-01, 5.664331e-01, 5.664480e-01, 5.664629e-01, 5.664777e-01, 5.664926e-01, 5.665075e-01, 5.665224e-01, 5.665372e-01, 5.665521e-01, 5.665669e-01, 5.665818e-01, 5.665967e-01, 5.666115e-01, 5.666264e-01, 5.666413e-01, 5.666561e-01, 5.666710e-01, 5.666859e-01, 5.667007e-01, 5.667156e-01, 5.667304e-01, 5.667453e-01, 5.667602e-01, 5.667750e-01, 5.667899e-01, 5.668048e-01, 5.668196e-01, 5.668344e-01, 5.668494e-01, 5.668642e-01, 5.668791e-01, 5.668939e-01, 5.669088e-01, 5.669237e-01, 5.669385e-01, 5.669534e-01, 5.669683e-01, 5.669830e-01, 5.669979e-01, 5.670128e-01, 5.670277e-01, 5.670425e-01, 5.670574e-01, 5.670723e-01, 5.670871e-01, 5.671020e-01, 5.671169e-01, 5.671316e-01, 5.671465e-01, 5.671614e-01, 5.671762e-01, 5.671911e-01, 5.672060e-01, 5.672209e-01, 5.672356e-01, 5.672505e-01, 5.672654e-01, 5.672802e-01, 5.672951e-01, 5.673100e-01, 5.673248e-01, 5.673397e-01, 5.673545e-01, 5.673694e-01, 5.673842e-01, 5.673991e-01, 5.674139e-01, 5.674288e-01, 5.674437e-01, 5.674585e-01, 5.674734e-01, 5.674883e-01, 5.675030e-01, 5.675179e-01, 5.675328e-01, 5.675476e-01, 5.675625e-01, 5.675774e-01, 5.675922e-01, 5.676070e-01, 5.676219e-01, 5.676368e-01, 5.676516e-01, 5.676665e-01, 5.676813e-01, 5.676962e-01, 5.677111e-01, 5.677258e-01, 5.677407e-01, 5.677556e-01, 5.677705e-01, 5.677853e-01, 5.678002e-01, 5.678150e-01, 5.678298e-01, 5.678447e-01, 5.678595e-01, 5.678744e-01, 5.678893e-01, 5.679041e-01, 5.679190e-01, 5.679338e-01, 5.679486e-01, 5.679635e-01, 5.679783e-01, 5.679932e-01, 5.680081e-01, 5.680229e-01, 5.680377e-01, 5.680526e-01, 5.680674e-01, 5.680823e-01, 5.680971e-01, 5.681120e-01, 5.681269e-01, 5.681417e-01, 5.681565e-01, 5.681714e-01, 5.681862e-01, 5.682011e-01, 5.682159e-01, 5.682307e-01, 5.682456e-01, 5.682605e-01, 5.682753e-01, 5.682901e-01, 5.683050e-01, 5.683199e-01, 5.683347e-01, 5.683495e-01, 5.683644e-01, 5.683792e-01, 5.683941e-01, 5.684090e-01, 5.684237e-01, 5.684386e-01, 5.684534e-01, 5.684683e-01, 5.684832e-01, 5.684980e-01, 5.685129e-01, 5.685277e-01, 5.685425e-01, 5.685574e-01, 5.685722e-01, 5.685871e-01, 5.686019e-01, 5.686167e-01, 5.686316e-01, 5.686464e-01, 5.686613e-01, 5.686761e-01, 5.686910e-01, 5.687058e-01, 5.687206e-01, 5.687355e-01, 5.687503e-01, 5.687652e-01, 5.687800e-01, 5.687948e-01, 5.688097e-01, 5.688245e-01, 5.688394e-01, 5.688542e-01, 5.688691e-01, 5.688839e-01, 5.688987e-01, 5.689136e-01, 5.689284e-01, 5.689433e-01, 5.689581e-01, 5.689729e-01, 5.689878e-01, 5.690026e-01, 5.690175e-01, 5.690323e-01, 5.690471e-01, 5.690619e-01, 5.690768e-01, 5.690916e-01, 5.691065e-01, 5.691214e-01, 5.691361e-01, 5.691510e-01, 5.691658e-01, 5.691807e-01, 5.691955e-01, 5.692104e-01, 5.692252e-01, 5.692400e-01, 5.692548e-01, 5.692697e-01, 5.692846e-01, 5.692994e-01, 5.693142e-01, 5.693290e-01, 5.693439e-01, 5.693587e-01, 5.693735e-01, 5.693884e-01, 5.694032e-01, 5.694181e-01, 5.694329e-01, 5.694477e-01, 5.694625e-01, 5.694774e-01, 5.694922e-01, 5.695071e-01, 5.695219e-01, 5.695367e-01, 5.695515e-01, 5.695664e-01, 5.695812e-01, 5.695961e-01, 5.696109e-01, 5.696257e-01, 5.696406e-01, 5.696554e-01, 5.696702e-01, 5.696850e-01, 5.696999e-01, 5.697147e-01, 5.697296e-01, 5.697444e-01, 5.697592e-01, 5.697740e-01, 5.697889e-01, 5.698037e-01, 5.698186e-01, 5.698333e-01, 5.698482e-01, 5.698630e-01, 5.698779e-01, 5.698926e-01, 5.699075e-01, 5.699223e-01, 5.699372e-01, 5.699520e-01, 5.699669e-01, 5.699817e-01, 5.699965e-01, 5.700113e-01, 5.700262e-01, 5.700409e-01, 5.700558e-01, 5.700706e-01, 5.700855e-01, 5.701003e-01, 5.701151e-01, 5.701299e-01, 5.701448e-01, 5.701596e-01, 5.701744e-01, 5.701892e-01, 5.702041e-01, 5.702189e-01, 5.702337e-01, 5.702485e-01, 5.702634e-01, 5.702782e-01, 5.702931e-01, 5.703079e-01, 5.703227e-01, 5.703375e-01, 5.703523e-01, 5.703672e-01, 5.703820e-01, 5.703968e-01, 5.704116e-01, 5.704265e-01, 5.704413e-01, 5.704561e-01, 5.704709e-01, 5.704858e-01, 5.705006e-01, 5.705154e-01, 5.705302e-01, 5.705450e-01, 5.705599e-01, 5.705747e-01, 5.705895e-01, 5.706043e-01, 5.706192e-01, 5.706340e-01, 5.706488e-01, 5.706636e-01, 5.706785e-01, 5.706933e-01, 5.707081e-01, 5.707229e-01, 5.707378e-01, 5.707526e-01, 5.707674e-01, 5.707822e-01, 5.707970e-01, 5.708118e-01, 5.708266e-01, 5.708415e-01, 5.708563e-01, 5.708711e-01, 5.708860e-01, 5.709007e-01, 5.709156e-01, 5.709304e-01, 5.709452e-01, 5.709600e-01, 5.709749e-01, 5.709897e-01, 5.710045e-01, 5.710194e-01, 5.710341e-01, 5.710490e-01, 5.710638e-01, 5.710786e-01, 5.710934e-01, 5.711082e-01, 5.711231e-01, 5.711378e-01, 5.711527e-01, 5.711675e-01, 5.711823e-01, 5.711971e-01, 5.712119e-01, 5.712267e-01, 5.712416e-01, 5.712564e-01, 5.712712e-01, 5.712860e-01, 5.713008e-01, 5.713156e-01, 5.713305e-01, 5.713453e-01, 5.713601e-01, 5.713749e-01, 5.713897e-01, 5.714045e-01, 5.714194e-01, 5.714341e-01, 5.714490e-01, 5.714638e-01, 5.714786e-01, 5.714934e-01, 5.715082e-01, 5.715231e-01, 5.715379e-01, 5.715527e-01, 5.715675e-01, 5.715823e-01, 5.715971e-01, 5.716119e-01, 5.716267e-01, 5.716416e-01, 5.716563e-01, 5.716712e-01, 5.716860e-01, 5.717008e-01, 5.717156e-01, 5.717304e-01, 5.717452e-01, 5.717601e-01, 5.717748e-01, 5.717897e-01, 5.718045e-01, 5.718193e-01, 5.718341e-01, 5.718489e-01, 5.718637e-01, 5.718785e-01, 5.718933e-01, 5.719081e-01, 5.719230e-01, 5.719377e-01, 5.719526e-01, 5.719674e-01, 5.719822e-01, 5.719970e-01, 5.720118e-01, 5.720266e-01, 5.720415e-01, 5.720562e-01, 5.720711e-01, 5.720859e-01, 5.721007e-01, 5.721155e-01, 5.721303e-01, 5.721451e-01, 5.721599e-01, 5.721747e-01, 5.721895e-01, 5.722043e-01, 5.722191e-01, 5.722339e-01, 5.722487e-01, 5.722635e-01, 5.722783e-01, 5.722931e-01, 5.723079e-01, 5.723227e-01, 5.723375e-01, 5.723523e-01, 5.723671e-01, 5.723820e-01, 5.723968e-01, 5.724116e-01, 5.724264e-01, 5.724412e-01, 5.724560e-01, 5.724708e-01, 5.724856e-01, 5.725004e-01, 5.725152e-01, 5.725300e-01, 5.725448e-01, 5.725596e-01, 5.725744e-01, 5.725892e-01, 5.726040e-01, 5.726188e-01, 5.726336e-01, 5.726485e-01, 5.726632e-01, 5.726780e-01, 5.726928e-01, 5.727077e-01, 5.727224e-01, 5.727372e-01, 5.727520e-01, 5.727668e-01, 5.727816e-01, 5.727964e-01, 5.728112e-01, 5.728260e-01, 5.728409e-01, 5.728557e-01, 5.728704e-01, 5.728852e-01, 5.729000e-01, 5.729148e-01, 5.729296e-01, 5.729444e-01, 5.729592e-01, 5.729740e-01, 5.729888e-01, 5.730036e-01, 5.730184e-01, 5.730332e-01, 5.730480e-01, 5.730628e-01, 5.730776e-01, 5.730924e-01, 5.731072e-01, 5.731220e-01, 5.731368e-01, 5.731516e-01, 5.731664e-01, 5.731812e-01, 5.731960e-01, 5.732108e-01, 5.732256e-01, 5.732403e-01, 5.732551e-01, 5.732700e-01, 5.732847e-01, 5.732996e-01, 5.733144e-01, 5.733292e-01, 5.733439e-01, 5.733587e-01, 5.733735e-01, 5.733883e-01, 5.734031e-01, 5.734179e-01, 5.734327e-01, 5.734475e-01, 5.734622e-01, 5.734771e-01, 5.734919e-01, 5.735067e-01, 5.735215e-01, 5.735363e-01, 5.735511e-01, 5.735658e-01, 5.735806e-01, 5.735954e-01, 5.736102e-01, 5.736250e-01, 5.736398e-01, 5.736546e-01, 5.736694e-01, 5.736842e-01, 5.736989e-01, 5.737137e-01, 5.737286e-01, 5.737433e-01, 5.737581e-01, 5.737729e-01, 5.737877e-01, 5.738025e-01, 5.738173e-01, 5.738321e-01, 5.738469e-01, 5.738617e-01, 5.738764e-01, 5.738912e-01, 5.739060e-01, 5.739208e-01, 5.739356e-01, 5.739504e-01, 5.739652e-01, 5.739800e-01, 5.739948e-01, 5.740095e-01, 5.740243e-01, 5.740391e-01, 5.740539e-01, 5.740687e-01, 5.740834e-01, 5.740982e-01, 5.741131e-01, 5.741279e-01, 5.741426e-01, 5.741574e-01, 5.741722e-01, 5.741870e-01, 5.742018e-01, 5.742165e-01, 5.742313e-01, 5.742461e-01, 5.742609e-01, 5.742757e-01, 5.742905e-01, 5.743052e-01, 5.743200e-01, 5.743348e-01, 5.743496e-01, 5.743644e-01, 5.743792e-01, 5.743940e-01, 5.744087e-01, 5.744235e-01, 5.744383e-01, 5.744531e-01, 5.744679e-01, 5.744827e-01, 5.744974e-01, 5.745122e-01, 5.745270e-01, 5.745418e-01, 5.745566e-01, 5.745713e-01, 5.745862e-01, 5.746009e-01, 5.746157e-01, 5.746305e-01, 5.746452e-01, 5.746601e-01, 5.746748e-01, 5.746896e-01, 5.747044e-01, 5.747191e-01, 5.747340e-01, 5.747488e-01, 5.747635e-01, 5.747783e-01, 5.747930e-01, 5.748078e-01, 5.748227e-01, 5.748374e-01, 5.748522e-01, 5.748670e-01, 5.748817e-01, 5.748965e-01, 5.749113e-01, 5.749261e-01, 5.749409e-01, 5.749556e-01, 5.749704e-01, 5.749851e-01, 5.749999e-01, 5.750148e-01, 5.750296e-01, 5.750443e-01, 5.750591e-01, 5.750738e-01, 5.750886e-01, 5.751034e-01, 5.751182e-01, 5.751330e-01, 5.751477e-01, 5.751625e-01, 5.751773e-01, 5.751920e-01, 5.752069e-01, 5.752216e-01, 5.752364e-01, 5.752512e-01, 5.752659e-01, 5.752807e-01, 5.752954e-01, 5.753102e-01, 5.753251e-01, 5.753398e-01, 5.753546e-01, 5.753694e-01, 5.753841e-01, 5.753989e-01, 5.754136e-01, 5.754284e-01, 5.754433e-01, 5.754580e-01, 5.754728e-01, 5.754876e-01, 5.755023e-01, 5.755171e-01, 5.755318e-01, 5.755466e-01, 5.755614e-01, 5.755762e-01, 5.755909e-01, 5.756058e-01, 5.756205e-01, 5.756353e-01, 5.756500e-01, 5.756648e-01, 5.756796e-01, 5.756943e-01, 5.757091e-01, 5.757239e-01, 5.757387e-01, 5.757534e-01, 5.757682e-01, 5.757830e-01, 5.757977e-01, 5.758125e-01, 5.758273e-01, 5.758420e-01, 5.758568e-01, 5.758716e-01, 5.758864e-01, 5.759011e-01, 5.759159e-01, 5.759307e-01, 5.759454e-01, 5.759602e-01, 5.759749e-01, 5.759897e-01, 5.760045e-01, 5.760192e-01, 5.760340e-01, 5.760488e-01, 5.760635e-01, 5.760784e-01, 5.760931e-01, 5.761079e-01, 5.761226e-01, 5.761374e-01, 5.761521e-01, 5.761669e-01, 5.761817e-01, 5.761964e-01, 5.762112e-01, 5.762260e-01, 5.762407e-01, 5.762555e-01, 5.762703e-01, 5.762851e-01, 5.762998e-01, 5.763146e-01, 5.763294e-01, 5.763441e-01, 5.763589e-01, 5.763736e-01, 5.763884e-01, 5.764031e-01, 5.764179e-01, 5.764326e-01, 5.764474e-01, 5.764622e-01, 5.764769e-01, 5.764917e-01, 5.765065e-01, 5.765212e-01, 5.765360e-01, 5.765508e-01, 5.765655e-01, 5.765803e-01, 5.765951e-01, 5.766098e-01, 5.766246e-01, 5.766394e-01, 5.766541e-01, 5.766689e-01, 5.766836e-01, 5.766984e-01, 5.767131e-01, 5.767279e-01, 5.767426e-01, 5.767574e-01, 5.767722e-01, 5.767869e-01, 5.768017e-01, 5.768165e-01, 5.768312e-01, 5.768460e-01, 5.768607e-01, 5.768755e-01, 5.768903e-01, 5.769050e-01, 5.769197e-01, 5.769346e-01, 5.769493e-01, 5.769640e-01, 5.769788e-01, 5.769935e-01, 5.770083e-01, 5.770231e-01, 5.770378e-01, 5.770526e-01, 5.770674e-01, 5.770821e-01, 5.770969e-01, 5.771116e-01, 5.771263e-01, 5.771412e-01, 5.771559e-01, 5.771706e-01, 5.771854e-01, 5.772001e-01, 5.772149e-01, 5.772297e-01, 5.772444e-01, 5.772592e-01, 5.772739e-01, 5.772887e-01, 5.773034e-01, 5.773182e-01, 5.773330e-01, 5.773477e-01, 5.773624e-01, 5.773772e-01, 5.773919e-01, 5.774067e-01, 5.774214e-01, 5.774362e-01, 5.774510e-01, 5.774657e-01, 5.774804e-01, 5.774952e-01, 5.775099e-01, 5.775247e-01, 5.775394e-01, 5.775542e-01, 5.775690e-01, 5.775837e-01, 5.775985e-01, 5.776132e-01, 5.776280e-01, 5.776427e-01, 5.776575e-01, 5.776722e-01, 5.776870e-01, 5.777017e-01, 5.777165e-01, 5.777312e-01, 5.777460e-01, 5.777607e-01, 5.777755e-01, 5.777902e-01, 5.778049e-01, 5.778197e-01, 5.778345e-01, 5.778492e-01, 5.778640e-01, 5.778787e-01, 5.778935e-01, 5.779082e-01, 5.779230e-01, 5.779377e-01, 5.779524e-01, 5.779672e-01, 5.779819e-01, 5.779967e-01, 5.780115e-01, 5.780262e-01, 5.780410e-01, 5.780557e-01, 5.780704e-01, 5.780851e-01, 5.780999e-01, 5.781146e-01, 5.781294e-01, 5.781441e-01, 5.781589e-01, 5.781736e-01, 5.781884e-01, 5.782031e-01, 5.782179e-01, 5.782326e-01, 5.782474e-01, 5.782622e-01, 5.782769e-01, 5.782916e-01, 5.783063e-01, 5.783211e-01, 5.783358e-01, 5.783505e-01, 5.783653e-01, 5.783800e-01, 5.783948e-01, 5.784096e-01, 5.784243e-01, 5.784391e-01, 5.784538e-01, 5.784685e-01, 5.784832e-01, 5.784980e-01, 5.785127e-01, 5.785275e-01, 5.785422e-01, 5.785570e-01, 5.785717e-01, 5.785865e-01, 5.786012e-01, 5.786160e-01, 5.786307e-01, 5.786454e-01, 5.786601e-01, 5.786749e-01, 5.786896e-01, 5.787044e-01, 5.787191e-01, 5.787338e-01, 5.787486e-01, 5.787633e-01, 5.787781e-01, 5.787928e-01, 5.788075e-01, 5.788223e-01, 5.788370e-01, 5.788518e-01, 5.788665e-01, 5.788812e-01, 5.788960e-01, 5.789107e-01, 5.789255e-01, 5.789402e-01, 5.789549e-01, 5.789697e-01, 5.789844e-01, 5.789991e-01, 5.790139e-01, 5.790286e-01, 5.790433e-01, 5.790581e-01, 5.790728e-01, 5.790876e-01, 5.791023e-01, 5.791170e-01, 5.791318e-01, 5.791465e-01, 5.791612e-01, 5.791759e-01, 5.791907e-01, 5.792055e-01, 5.792202e-01, 5.792349e-01, 5.792496e-01, 5.792643e-01, 5.792791e-01, 5.792938e-01, 5.793086e-01, 5.793233e-01, 5.793381e-01, 5.793527e-01, 5.793675e-01, 5.793822e-01, 5.793970e-01, 5.794117e-01, 5.794265e-01, 5.794411e-01, 5.794559e-01, 5.794706e-01, 5.794854e-01, 5.795001e-01, 5.795148e-01, 5.795295e-01, 5.795443e-01, 5.795590e-01, 5.795738e-01, 5.795885e-01, 5.796032e-01, 5.796180e-01, 5.796326e-01, 5.796474e-01, 5.796621e-01, 5.796769e-01, 5.796916e-01, 5.797063e-01, 5.797210e-01, 5.797358e-01, 5.797505e-01, 5.797653e-01, 5.797800e-01, 5.797947e-01, 5.798094e-01, 5.798241e-01, 5.798389e-01, 5.798536e-01, 5.798683e-01, 5.798830e-01, 5.798978e-01, 5.799125e-01, 5.799273e-01, 5.799420e-01, 5.799567e-01, 5.799714e-01, 5.799862e-01, 5.800009e-01, 5.800156e-01, 5.800303e-01, 5.800450e-01, 5.800598e-01, 5.800745e-01, 5.800892e-01, 5.801040e-01, 5.801187e-01, 5.801334e-01, 5.801481e-01, 5.801629e-01, 5.801776e-01, 5.801923e-01, 5.802070e-01, 5.802217e-01, 5.802365e-01, 5.802512e-01, 5.802659e-01, 5.802807e-01, 5.802954e-01, 5.803101e-01, 5.803248e-01, 5.803396e-01, 5.803543e-01, 5.803690e-01, 5.803837e-01, 5.803984e-01, 5.804132e-01, 5.804279e-01, 5.804426e-01, 5.804573e-01, 5.804721e-01, 5.804868e-01, 5.805015e-01, 5.805162e-01, 5.805309e-01, 5.805457e-01, 5.805604e-01, 5.805750e-01, 5.805898e-01, 5.806046e-01, 5.806192e-01, 5.806340e-01, 5.806487e-01, 5.806634e-01, 5.806782e-01, 5.806928e-01, 5.807076e-01, 5.807223e-01, 5.807370e-01, 5.807517e-01, 5.807664e-01, 5.807812e-01, 5.807959e-01, 5.808106e-01, 5.808253e-01, 5.808401e-01, 5.808548e-01, 5.808695e-01, 5.808842e-01, 5.808989e-01, 5.809136e-01, 5.809283e-01, 5.809430e-01, 5.809578e-01, 5.809725e-01, 5.809872e-01, 5.810019e-01, 5.810167e-01, 5.810313e-01, 5.810461e-01, 5.810608e-01, 5.810755e-01, 5.810902e-01, 5.811049e-01, 5.811197e-01, 5.811344e-01, 5.811490e-01, 5.811638e-01, 5.811785e-01, 5.811932e-01, 5.812079e-01, 5.812227e-01, 5.812374e-01, 5.812521e-01, 5.812668e-01, 5.812815e-01, 5.812962e-01, 5.813109e-01, 5.813257e-01, 5.813404e-01, 5.813550e-01, 5.813698e-01, 5.813845e-01, 5.813992e-01, 5.814139e-01, 5.814286e-01, 5.814433e-01, 5.814580e-01, 5.814728e-01, 5.814875e-01, 5.815022e-01, 5.815169e-01, 5.815316e-01, 5.815463e-01, 5.815610e-01, 5.815758e-01, 5.815905e-01, 5.816051e-01, 5.816199e-01, 5.816346e-01, 5.816493e-01, 5.816640e-01, 5.816787e-01, 5.816934e-01, 5.817081e-01, 5.817229e-01, 5.817376e-01, 5.817522e-01, 5.817670e-01, 5.817817e-01, 5.817963e-01, 5.818111e-01, 5.818258e-01, 5.818405e-01, 5.818552e-01, 5.818700e-01, 5.818846e-01, 5.818993e-01, 5.819141e-01, 5.819287e-01, 5.819435e-01, 5.819582e-01, 5.819728e-01, 5.819876e-01, 5.820023e-01, 5.820170e-01, 5.820317e-01, 5.820464e-01, 5.820611e-01, 5.820758e-01, 5.820905e-01, 5.821052e-01, 5.821199e-01, 5.821346e-01, 5.821493e-01, 5.821640e-01, 5.821787e-01, 5.821934e-01, 5.822082e-01, 5.822228e-01, 5.822375e-01, 5.822523e-01, 5.822669e-01, 5.822816e-01, 5.822964e-01, 5.823111e-01, 5.823258e-01, 5.823405e-01, 5.823552e-01, 5.823699e-01, 5.823846e-01, 5.823993e-01, 5.824140e-01, 5.824287e-01, 5.824434e-01, 5.824581e-01, 5.824728e-01, 5.824875e-01, 5.825022e-01, 5.825169e-01, 5.825316e-01, 5.825463e-01, 5.825610e-01, 5.825757e-01, 5.825904e-01, 5.826051e-01, 5.826198e-01, 5.826345e-01, 5.826492e-01, 5.826639e-01, 5.826786e-01, 5.826933e-01, 5.827080e-01, 5.827227e-01, 5.827374e-01, 5.827520e-01, 5.827668e-01, 5.827815e-01, 5.827962e-01, 5.828109e-01, 5.828256e-01, 5.828403e-01, 5.828550e-01, 5.828696e-01, 5.828844e-01, 5.828991e-01, 5.829138e-01, 5.829284e-01, 5.829431e-01, 5.829579e-01, 5.829726e-01, 5.829872e-01, 5.830019e-01, 5.830166e-01, 5.830314e-01, 5.830460e-01, 5.830607e-01, 5.830754e-01, 5.830901e-01, 5.831048e-01, 5.831195e-01, 5.831342e-01, 5.831489e-01, 5.831636e-01, 5.831783e-01, 5.831930e-01, 5.832077e-01, 5.832224e-01, 5.832371e-01, 5.832517e-01, 5.832664e-01, 5.832812e-01, 5.832958e-01, 5.833105e-01, 5.833252e-01, 5.833399e-01, 5.833546e-01, 5.833693e-01, 5.833840e-01, 5.833987e-01, 5.834134e-01, 5.834280e-01, 5.834427e-01, 5.834574e-01, 5.834721e-01, 5.834869e-01, 5.835015e-01, 5.835162e-01, 5.835309e-01, 5.835456e-01, 5.835603e-01, 5.835750e-01, 5.835897e-01, 5.836043e-01, 5.836191e-01, 5.836337e-01, 5.836484e-01, 5.836631e-01, 5.836778e-01, 5.836925e-01, 5.837072e-01, 5.837218e-01, 5.837365e-01, 5.837513e-01, 5.837659e-01, 5.837806e-01, 5.837952e-01, 5.838100e-01, 5.838247e-01, 5.838394e-01, 5.838541e-01, 5.838687e-01, 5.838834e-01, 5.838981e-01, 5.839128e-01, 5.839275e-01, 5.839422e-01, 5.839568e-01, 5.839715e-01, 5.839862e-01, 5.840009e-01, 5.840156e-01, 5.840303e-01, 5.840449e-01, 5.840597e-01, 5.840743e-01, 5.840890e-01, 5.841037e-01, 5.841184e-01, 5.841331e-01, 5.841478e-01, 5.841625e-01, 5.841771e-01, 5.841918e-01, 5.842065e-01, 5.842212e-01, 5.842358e-01, 5.842506e-01, 5.842652e-01, 5.842800e-01, 5.842946e-01, 5.843093e-01, 5.843239e-01, 5.843387e-01, 5.843533e-01, 5.843681e-01, 5.843827e-01, 5.843974e-01, 5.844120e-01, 5.844267e-01, 5.844414e-01, 5.844561e-01, 5.844708e-01, 5.844855e-01, 5.845001e-01, 5.845148e-01, 5.845295e-01, 5.845442e-01, 5.845588e-01, 5.845736e-01, 5.845882e-01, 5.846029e-01, 5.846176e-01, 5.846323e-01, 5.846469e-01, 5.846616e-01, 5.846763e-01, 5.846910e-01, 5.847057e-01, 5.847203e-01, 5.847350e-01, 5.847497e-01, 5.847644e-01, 5.847790e-01, 5.847937e-01, 5.848084e-01, 5.848231e-01, 5.848377e-01, 5.848524e-01, 5.848671e-01, 5.848818e-01, 5.848964e-01, 5.849112e-01, 5.849258e-01, 5.849405e-01, 5.849552e-01, 5.849698e-01, 5.849845e-01, 5.849992e-01, 5.850139e-01, 5.850285e-01, 5.850433e-01, 5.850579e-01, 5.850726e-01, 5.850872e-01, 5.851019e-01, 5.851166e-01, 5.851313e-01, 5.851460e-01, 5.851606e-01, 5.851753e-01, 5.851900e-01, 5.852047e-01, 5.852193e-01, 5.852340e-01, 5.852486e-01, 5.852633e-01, 5.852780e-01, 5.852927e-01, 5.853074e-01, 5.853220e-01, 5.853367e-01, 5.853514e-01, 5.853660e-01, 5.853807e-01, 5.853953e-01, 5.854100e-01, 5.854247e-01, 5.854394e-01, 5.854540e-01, 5.854687e-01, 5.854834e-01, 5.854981e-01, 5.855128e-01, 5.855274e-01, 5.855421e-01, 5.855567e-01, 5.855714e-01, 5.855861e-01, 5.856007e-01, 5.856154e-01, 5.856301e-01, 5.856448e-01, 5.856594e-01, 5.856741e-01, 5.856888e-01, 5.857034e-01, 5.857181e-01, 5.857328e-01, 5.857475e-01, 5.857621e-01, 5.857768e-01, 5.857914e-01, 5.858061e-01, 5.858207e-01, 5.858355e-01, 5.858501e-01, 5.858648e-01, 5.858794e-01, 5.858941e-01, 5.859088e-01, 5.859234e-01, 5.859381e-01, 5.859528e-01, 5.859675e-01, 5.859821e-01, 5.859968e-01, 5.860115e-01, 5.860261e-01, 5.860408e-01, 5.860555e-01, 5.860701e-01, 5.860848e-01, 5.860994e-01, 5.861140e-01, 5.861287e-01, 5.861434e-01, 5.861581e-01, 5.861728e-01, 5.861874e-01, 5.862021e-01, 5.862167e-01, 5.862314e-01, 5.862461e-01, 5.862607e-01, 5.862754e-01, 5.862901e-01, 5.863047e-01, 5.863194e-01, 5.863340e-01, 5.863487e-01, 5.863634e-01, 5.863780e-01, 5.863927e-01, 5.864074e-01, 5.864220e-01, 5.864367e-01, 5.864514e-01, 5.864660e-01, 5.864807e-01, 5.864953e-01, 5.865100e-01, 5.865247e-01, 5.865393e-01, 5.865540e-01, 5.865687e-01, 5.865833e-01, 5.865979e-01, 5.866126e-01, 5.866272e-01, 5.866419e-01, 5.866566e-01, 5.866712e-01, 5.866859e-01, 5.867006e-01, 5.867152e-01, 5.867299e-01, 5.867445e-01, 5.867592e-01, 5.867739e-01, 5.867885e-01, 5.868031e-01, 5.868178e-01, 5.868325e-01, 5.868471e-01, 5.868618e-01, 5.868765e-01, 5.868911e-01, 5.869058e-01, 5.869204e-01, 5.869350e-01, 5.869497e-01, 5.869644e-01, 5.869790e-01, 5.869937e-01, 5.870084e-01, 5.870230e-01, 5.870376e-01, 5.870523e-01, 5.870669e-01, 5.870816e-01, 5.870963e-01, 5.871109e-01, 5.871255e-01, 5.871402e-01, 5.871549e-01, 5.871695e-01, 5.871842e-01, 5.871988e-01, 5.872135e-01, 5.872281e-01, 5.872428e-01, 5.872574e-01, 5.872721e-01, 5.872868e-01, 5.873014e-01, 5.873160e-01, 5.873307e-01, 5.873454e-01, 5.873600e-01, 5.873747e-01, 5.873893e-01, 5.874040e-01, 5.874186e-01, 5.874333e-01, 5.874479e-01, 5.874625e-01, 5.874772e-01, 5.874919e-01, 5.875065e-01, 5.875211e-01, 5.875358e-01, 5.875505e-01, 5.875651e-01, 5.875797e-01, 5.875944e-01, 5.876091e-01, 5.876237e-01, 5.876384e-01, 5.876530e-01, 5.876676e-01, 5.876823e-01, 5.876970e-01, 5.877116e-01, 5.877262e-01, 5.877409e-01, 5.877555e-01, 5.877702e-01, 5.877848e-01, 5.877995e-01, 5.878142e-01, 5.878288e-01, 5.878434e-01, 5.878581e-01, 5.878727e-01, 5.878873e-01, 5.879020e-01, 5.879167e-01, 5.879313e-01, 5.879459e-01, 5.879606e-01, 5.879752e-01, 5.879899e-01, 5.880045e-01, 5.880192e-01, 5.880339e-01, 5.880485e-01, 5.880631e-01, 5.880777e-01, 5.880924e-01, 5.881070e-01, 5.881217e-01, 5.881363e-01, 5.881510e-01, 5.881656e-01, 5.881803e-01, 5.881949e-01, 5.882096e-01, 5.882242e-01, 5.882388e-01, 5.882534e-01, 5.882681e-01, 5.882828e-01, 5.882974e-01, 5.883120e-01, 5.883267e-01, 5.883414e-01, 5.883560e-01, 5.883706e-01, 5.883852e-01, 5.883999e-01, 5.884145e-01, 5.884292e-01, 5.884438e-01, 5.884585e-01, 5.884731e-01, 5.884877e-01, 5.885023e-01, 5.885170e-01, 5.885316e-01, 5.885463e-01, 5.885609e-01, 5.885756e-01, 5.885902e-01, 5.886049e-01, 5.886195e-01, 5.886341e-01, 5.886487e-01, 5.886634e-01, 5.886781e-01, 5.886927e-01, 5.887073e-01, 5.887219e-01, 5.887366e-01, 5.887512e-01, 5.887659e-01, 5.887805e-01, 5.887952e-01, 5.888098e-01, 5.888244e-01, 5.888391e-01, 5.888537e-01, 5.888683e-01, 5.888830e-01, 5.888976e-01, 5.889122e-01, 5.889269e-01, 5.889415e-01, 5.889561e-01, 5.889708e-01, 5.889854e-01, 5.890000e-01, 5.890147e-01, 5.890293e-01, 5.890439e-01, 5.890586e-01, 5.890732e-01, 5.890878e-01, 5.891025e-01, 5.891171e-01, 5.891317e-01, 5.891464e-01, 5.891610e-01, 5.891756e-01, 5.891903e-01, 5.892049e-01, 5.892196e-01, 5.892342e-01, 5.892488e-01, 5.892634e-01, 5.892781e-01, 5.892927e-01, 5.893073e-01, 5.893220e-01, 5.893366e-01, 5.893512e-01, 5.893659e-01, 5.893805e-01, 5.893951e-01, 5.894097e-01, 5.894244e-01, 5.894390e-01, 5.894536e-01, 5.894683e-01, 5.894829e-01, 5.894975e-01, 5.895122e-01, 5.895268e-01, 5.895414e-01, 5.895560e-01, 5.895706e-01, 5.895853e-01, 5.896000e-01, 5.896146e-01, 5.896292e-01, 5.896438e-01, 5.896584e-01, 5.896731e-01, 5.896877e-01, 5.897023e-01, 5.897170e-01, 5.897316e-01, 5.897462e-01, 5.897608e-01, 5.897754e-01, 5.897901e-01, 5.898048e-01, 5.898194e-01, 5.898340e-01, 5.898486e-01, 5.898632e-01, 5.898779e-01, 5.898925e-01, 5.899071e-01, 5.899217e-01, 5.899364e-01, 5.899510e-01, 5.899656e-01, 5.899802e-01, 5.899948e-01, 5.900095e-01, 5.900241e-01, 5.900387e-01, 5.900534e-01, 5.900680e-01, 5.900826e-01, 5.900972e-01, 5.901119e-01, 5.901265e-01, 5.901411e-01, 5.901557e-01, 5.901704e-01, 5.901850e-01, 5.901996e-01, 5.902143e-01, 5.902289e-01, 5.902435e-01, 5.902581e-01, 5.902727e-01, 5.902873e-01, 5.903019e-01, 5.903165e-01, 5.903312e-01, 5.903459e-01, 5.903605e-01, 5.903751e-01, 5.903897e-01, 5.904043e-01, 5.904189e-01, 5.904335e-01, 5.904481e-01, 5.904628e-01, 5.904774e-01, 5.904920e-01, 5.905067e-01, 5.905213e-01, 5.905359e-01, 5.905505e-01, 5.905651e-01, 5.905797e-01, 5.905944e-01, 5.906090e-01, 5.906236e-01, 5.906382e-01, 5.906528e-01, 5.906674e-01, 5.906821e-01, 5.906967e-01, 5.907113e-01, 5.907259e-01, 5.907406e-01, 5.907552e-01, 5.907698e-01, 5.907844e-01, 5.907990e-01, 5.908136e-01, 5.908282e-01, 5.908428e-01, 5.908575e-01, 5.908721e-01, 5.908867e-01, 5.909013e-01, 5.909159e-01, 5.909305e-01, 5.909452e-01, 5.909598e-01, 5.909744e-01, 5.909890e-01, 5.910037e-01, 5.910183e-01, 5.910329e-01, 5.910475e-01, 5.910621e-01, 5.910767e-01, 5.910913e-01, 5.911059e-01, 5.911205e-01, 5.911351e-01, 5.911497e-01, 5.911644e-01, 5.911790e-01, 5.911936e-01, 5.912082e-01, 5.912228e-01, 5.912374e-01, 5.912521e-01, 5.912667e-01, 5.912812e-01, 5.912959e-01, 5.913105e-01, 5.913251e-01, 5.913397e-01, 5.913544e-01, 5.913689e-01, 5.913835e-01, 5.913982e-01, 5.914128e-01, 5.914274e-01, 5.914420e-01, 5.914566e-01, 5.914712e-01, 5.914858e-01, 5.915005e-01, 5.915150e-01, 5.915297e-01, 5.915443e-01, 5.915589e-01, 5.915735e-01, 5.915881e-01, 5.916027e-01, 5.916173e-01, 5.916319e-01, 5.916465e-01, 5.916611e-01, 5.916758e-01, 5.916904e-01, 5.917049e-01, 5.917196e-01, 5.917342e-01, 5.917488e-01, 5.917634e-01, 5.917780e-01, 5.917926e-01, 5.918072e-01, 5.918218e-01, 5.918364e-01, 5.918511e-01, 5.918656e-01, 5.918802e-01, 5.918949e-01, 5.919094e-01, 5.919240e-01, 5.919387e-01, 5.919532e-01, 5.919679e-01, 5.919825e-01, 5.919971e-01, 5.920117e-01, 5.920263e-01, 5.920409e-01, 5.920555e-01, 5.920701e-01, 5.920847e-01, 5.920993e-01, 5.921139e-01, 5.921285e-01, 5.921431e-01, 5.921577e-01, 5.921723e-01, 5.921869e-01, 5.922015e-01, 5.922161e-01, 5.922307e-01, 5.922453e-01, 5.922599e-01, 5.922745e-01, 5.922891e-01, 5.923038e-01, 5.923184e-01, 5.923329e-01, 5.923476e-01, 5.923621e-01, 5.923768e-01, 5.923913e-01, 5.924059e-01, 5.924206e-01, 5.924351e-01, 5.924497e-01, 5.924643e-01, 5.924789e-01, 5.924935e-01, 5.925081e-01, 5.925227e-01, 5.925373e-01, 5.925519e-01, 5.925665e-01, 5.925812e-01, 5.925957e-01, 5.926104e-01, 5.926249e-01, 5.926395e-01, 5.926541e-01, 5.926687e-01, 5.926833e-01, 5.926979e-01, 5.927125e-01, 5.927271e-01, 5.927417e-01, 5.927563e-01, 5.927709e-01, 5.927855e-01, 5.928001e-01, 5.928147e-01, 5.928293e-01, 5.928439e-01, 5.928584e-01, 5.928731e-01, 5.928876e-01, 5.929023e-01, 5.929168e-01, 5.929314e-01, 5.929461e-01, 5.929606e-01, 5.929753e-01, 5.929898e-01, 5.930044e-01, 5.930190e-01, 5.930336e-01, 5.930482e-01, 5.930628e-01, 5.930774e-01, 5.930920e-01, 5.931066e-01, 5.931212e-01, 5.931358e-01, 5.931504e-01, 5.931649e-01, 5.931796e-01, 5.931941e-01, 5.932087e-01, 5.932233e-01, 5.932379e-01, 5.932525e-01, 5.932671e-01, 5.932817e-01, 5.932963e-01, 5.933109e-01, 5.933255e-01, 5.933400e-01, 5.933546e-01, 5.933692e-01, 5.933838e-01, 5.933984e-01, 5.934130e-01, 5.934276e-01, 5.934422e-01, 5.934568e-01, 5.934713e-01, 5.934860e-01, 5.935006e-01, 5.935152e-01, 5.935297e-01, 5.935443e-01, 5.935589e-01, 5.935735e-01, 5.935881e-01, 5.936027e-01, 5.936173e-01, 5.936318e-01, 5.936465e-01, 5.936610e-01, 5.936756e-01, 5.936902e-01, 5.937048e-01, 5.937194e-01, 5.937340e-01, 5.937486e-01, 5.937631e-01, 5.937777e-01, 5.937923e-01, 5.938069e-01, 5.938215e-01, 5.938361e-01, 5.938506e-01, 5.938653e-01, 5.938798e-01, 5.938944e-01, 5.939090e-01, 5.939236e-01, 5.939382e-01, 5.939528e-01, 5.939673e-01, 5.939819e-01, 5.939965e-01, 5.940111e-01, 5.940257e-01, 5.940402e-01, 5.940548e-01, 5.940694e-01, 5.940840e-01, 5.940986e-01, 5.941132e-01, 5.941277e-01, 5.941423e-01, 5.941569e-01, 5.941715e-01, 5.941861e-01, 5.942007e-01, 5.942152e-01, 5.942298e-01, 5.942444e-01, 5.942590e-01, 5.942736e-01, 5.942882e-01, 5.943027e-01, 5.943173e-01, 5.943319e-01, 5.943465e-01, 5.943610e-01, 5.943757e-01, 5.943902e-01, 5.944048e-01, 5.944194e-01, 5.944340e-01, 5.944485e-01, 5.944631e-01, 5.944777e-01, 5.944923e-01, 5.945069e-01, 5.945215e-01, 5.945360e-01, 5.945506e-01, 5.945652e-01, 5.945798e-01, 5.945943e-01, 5.946089e-01, 5.946235e-01, 5.946380e-01, 5.946527e-01, 5.946672e-01, 5.946818e-01, 5.946963e-01, 5.947109e-01, 5.947255e-01, 5.947401e-01, 5.947546e-01, 5.947692e-01, 5.947838e-01, 5.947984e-01, 5.948130e-01, 5.948275e-01, 5.948421e-01, 5.948567e-01, 5.948713e-01, 5.948858e-01, 5.949004e-01, 5.949150e-01, 5.949296e-01, 5.949441e-01, 5.949587e-01, 5.949733e-01, 5.949879e-01, 5.950024e-01, 5.950170e-01, 5.950316e-01, 5.950462e-01, 5.950608e-01, 5.950753e-01, 5.950899e-01, 5.951045e-01, 5.951191e-01, 5.951336e-01, 5.951482e-01, 5.951627e-01, 5.951774e-01, 5.951919e-01, 5.952065e-01, 5.952210e-01, 5.952356e-01, 5.952502e-01, 5.952647e-01, 5.952793e-01, 5.952939e-01, 5.953085e-01, 5.953231e-01, 5.953376e-01, 5.953522e-01, 5.953667e-01, 5.953813e-01, 5.953959e-01, 5.954105e-01, 5.954251e-01, 5.954396e-01, 5.954542e-01, 5.954688e-01, 5.954833e-01, 5.954979e-01, 5.955124e-01, 5.955271e-01, 5.955416e-01, 5.955562e-01, 5.955707e-01, 5.955853e-01, 5.955999e-01, 5.956144e-01, 5.956290e-01, 5.956436e-01, 5.956581e-01, 5.956727e-01, 5.956873e-01, 5.957019e-01, 5.957164e-01, 5.957310e-01, 5.957456e-01, 5.957601e-01, 5.957747e-01, 5.957893e-01, 5.958038e-01, 5.958184e-01, 5.958329e-01, 5.958475e-01, 5.958620e-01, 5.958766e-01, 5.958912e-01, 5.959058e-01, 5.959203e-01, 5.959349e-01, 5.959495e-01, 5.959640e-01, 5.959786e-01, 5.959932e-01, 5.960077e-01, 5.960223e-01, 5.960369e-01, 5.960514e-01, 5.960660e-01, 5.960805e-01, 5.960951e-01, 5.961097e-01, 5.961242e-01, 5.961388e-01, 5.961534e-01, 5.961679e-01, 5.961825e-01, 5.961970e-01, 5.962116e-01, 5.962262e-01, 5.962407e-01, 5.962553e-01, 5.962698e-01, 5.962844e-01, 5.962990e-01, 5.963135e-01, 5.963281e-01, 5.963427e-01, 5.963572e-01, 5.963718e-01, 5.963864e-01, 5.964009e-01, 5.964155e-01, 5.964300e-01, 5.964445e-01, 5.964592e-01, 5.964737e-01, 5.964882e-01, 5.965028e-01, 5.965173e-01, 5.965319e-01, 5.965465e-01, 5.965610e-01, 5.965756e-01, 5.965902e-01, 5.966047e-01, 5.966192e-01, 5.966339e-01, 5.966484e-01, 5.966629e-01, 5.966775e-01, 5.966920e-01, 5.967066e-01, 5.967212e-01, 5.967357e-01, 5.967503e-01, 5.967649e-01, 5.967794e-01, 5.967939e-01, 5.968085e-01, 5.968230e-01, 5.968376e-01, 5.968522e-01, 5.968667e-01, 5.968813e-01, 5.968958e-01, 5.969104e-01, 5.969250e-01, 5.969395e-01, 5.969540e-01, 5.969687e-01, 5.969832e-01, 5.969977e-01, 5.970123e-01, 5.970268e-01, 5.970414e-01, 5.970560e-01, 5.970705e-01, 5.970851e-01, 5.970996e-01, 5.971141e-01, 5.971287e-01, 5.971432e-01, 5.971578e-01, 5.971723e-01, 5.971869e-01, 5.972015e-01, 5.972160e-01, 5.972306e-01, 5.972452e-01, 5.972597e-01, 5.972742e-01, 5.972888e-01, 5.973033e-01, 5.973179e-01, 5.973324e-01, 5.973470e-01, 5.973615e-01, 5.973760e-01, 5.973907e-01, 5.974052e-01, 5.974197e-01, 5.974343e-01, 5.974488e-01, 5.974634e-01, 5.974779e-01, 5.974925e-01, 5.975070e-01, 5.975215e-01, 5.975361e-01, 5.975507e-01, 5.975652e-01, 5.975798e-01, 5.975943e-01, 5.976089e-01, 5.976234e-01, 5.976380e-01, 5.976525e-01, 5.976670e-01, 5.976816e-01, 5.976962e-01, 5.977107e-01, 5.977252e-01, 5.977398e-01, 5.977544e-01, 5.977688e-01, 5.977834e-01, 5.977980e-01, 5.978125e-01, 5.978270e-01, 5.978416e-01, 5.978562e-01, 5.978707e-01, 5.978853e-01, 5.978998e-01, 5.979143e-01, 5.979289e-01, 5.979434e-01, 5.979580e-01, 5.979725e-01, 5.979871e-01, 5.980016e-01, 5.980161e-01, 5.980307e-01, 5.980452e-01, 5.980598e-01, 5.980743e-01, 5.980889e-01, 5.981034e-01, 5.981179e-01, 5.981325e-01, 5.981470e-01, 5.981616e-01, 5.981761e-01, 5.981907e-01, 5.982052e-01, 5.982197e-01, 5.982343e-01, 5.982488e-01, 5.982634e-01, 5.982779e-01, 5.982924e-01, 5.983070e-01, 5.983216e-01, 5.983360e-01, 5.983506e-01, 5.983651e-01, 5.983797e-01, 5.983942e-01, 5.984088e-01, 5.984233e-01, 5.984378e-01, 5.984524e-01, 5.984669e-01, 5.984815e-01, 5.984960e-01, 5.985106e-01, 5.985250e-01, 5.985396e-01, 5.985541e-01, 5.985687e-01, 5.985832e-01, 5.985978e-01, 5.986123e-01, 5.986269e-01, 5.986414e-01, 5.986559e-01, 5.986704e-01, 5.986850e-01, 5.986995e-01, 5.987141e-01, 5.987286e-01, 5.987431e-01, 5.987577e-01, 5.987722e-01, 5.987868e-01, 5.988013e-01, 5.988158e-01, 5.988303e-01, 5.988449e-01, 5.988594e-01, 5.988740e-01, 5.988885e-01, 5.989031e-01, 5.989176e-01, 5.989321e-01, 5.989466e-01, 5.989612e-01, 5.989757e-01, 5.989903e-01, 5.990048e-01, 5.990193e-01, 5.990338e-01, 5.990484e-01, 5.990629e-01, 5.990775e-01, 5.990919e-01, 5.991065e-01, 5.991210e-01, 5.991356e-01, 5.991501e-01, 5.991647e-01, 5.991791e-01, 5.991937e-01, 5.992082e-01, 5.992228e-01, 5.992373e-01, 5.992518e-01, 5.992664e-01, 5.992809e-01, 5.992954e-01, 5.993100e-01, 5.993245e-01, 5.993390e-01, 5.993535e-01, 5.993680e-01, 5.993826e-01, 5.993971e-01, 5.994117e-01, 5.994262e-01, 5.994407e-01, 5.994552e-01, 5.994698e-01, 5.994843e-01, 5.994989e-01, 5.995134e-01, 5.995279e-01, 5.995424e-01, 5.995569e-01, 5.995715e-01, 5.995860e-01, 5.996006e-01, 5.996150e-01, 5.996296e-01, 5.996441e-01, 5.996587e-01, 5.996732e-01, 5.996877e-01, 5.997022e-01, 5.997167e-01, 5.997313e-01, 5.997458e-01, 5.997604e-01, 5.997748e-01, 5.997894e-01, 5.998039e-01, 5.998184e-01, 5.998330e-01, 5.998475e-01, 5.998620e-01, 5.998765e-01, 5.998911e-01, 5.999056e-01, 5.999201e-01, 5.999346e-01, 5.999491e-01, 5.999637e-01, 5.999782e-01, 5.999928e-01, 6.000073e-01, 6.000218e-01, 6.000363e-01, 6.000508e-01, 6.000654e-01, 6.000798e-01, 6.000944e-01, 6.001089e-01, 6.001235e-01, 6.001379e-01, 6.001524e-01, 6.001670e-01, 6.001815e-01, 6.001961e-01, 6.002105e-01, 6.002251e-01, 6.002396e-01, 6.002541e-01, 6.002687e-01, 6.002831e-01, 6.002977e-01, 6.003122e-01, 6.003267e-01, 6.003413e-01, 6.003558e-01, 6.003703e-01, 6.003848e-01, 6.003993e-01, 6.004139e-01, 6.004283e-01, 6.004429e-01, 6.004574e-01, 6.004719e-01, 6.004865e-01, 6.005010e-01, 6.005155e-01, 6.005300e-01, 6.005445e-01, 6.005591e-01, 6.005735e-01, 6.005881e-01, 6.006026e-01, 6.006171e-01, 6.006316e-01, 6.006461e-01, 6.006607e-01, 6.006752e-01, 6.006897e-01, 6.007043e-01, 6.007187e-01, 6.007332e-01, 6.007478e-01, 6.007622e-01, 6.007768e-01, 6.007913e-01, 6.008058e-01, 6.008204e-01, 6.008348e-01, 6.008494e-01, 6.008639e-01, 6.008784e-01, 6.008930e-01, 6.009074e-01, 6.009219e-01, 6.009365e-01, 6.009510e-01, 6.009654e-01, 6.009800e-01, 6.009945e-01, 6.010090e-01, 6.010236e-01, 6.010380e-01, 6.010526e-01, 6.010671e-01, 6.010816e-01, 6.010961e-01, 6.011106e-01, 6.011251e-01, 6.011397e-01, 6.011541e-01, 6.011687e-01, 6.011832e-01, 6.011977e-01, 6.012122e-01, 6.012267e-01, 6.012412e-01, 6.012557e-01, 6.012703e-01, 6.012847e-01, 6.012993e-01, 6.013138e-01, 6.013283e-01, 6.013428e-01, 6.013573e-01, 6.013718e-01, 6.013863e-01, 6.014009e-01, 6.014153e-01, 6.014299e-01, 6.014444e-01, 6.014589e-01, 6.014734e-01, 6.014879e-01, 6.015024e-01, 6.015169e-01, 6.015314e-01, 6.015459e-01, 6.015604e-01, 6.015750e-01, 6.015894e-01, 6.016039e-01, 6.016185e-01, 6.016330e-01, 6.016474e-01, 6.016620e-01, 6.016765e-01, 6.016910e-01, 6.017055e-01, 6.017200e-01, 6.017345e-01, 6.017490e-01, 6.017635e-01, 6.017780e-01, 6.017925e-01, 6.018071e-01, 6.018215e-01, 6.018360e-01, 6.018506e-01, 6.018651e-01, 6.018795e-01, 6.018941e-01, 6.019086e-01, 6.019231e-01, 6.019376e-01, 6.019521e-01, 6.019666e-01, 6.019811e-01, 6.019956e-01, 6.020101e-01, 6.020246e-01, 6.020391e-01, 6.020536e-01, 6.020681e-01, 6.020826e-01, 6.020971e-01, 6.021116e-01, 6.021261e-01, 6.021406e-01, 6.021551e-01, 6.021696e-01, 6.021841e-01, 6.021986e-01, 6.022131e-01, 6.022276e-01, 6.022421e-01, 6.022567e-01, 6.022711e-01, 6.022856e-01, 6.023002e-01, 6.023147e-01, 6.023291e-01, 6.023437e-01, 6.023582e-01, 6.023726e-01, 6.023872e-01, 6.024017e-01, 6.024162e-01, 6.024307e-01, 6.024452e-01, 6.024597e-01, 6.024742e-01, 6.024886e-01, 6.025032e-01, 6.025177e-01, 6.025321e-01, 6.025466e-01, 6.025611e-01, 6.025757e-01, 6.025901e-01, 6.026046e-01, 6.026191e-01, 6.026336e-01, 6.026481e-01, 6.026626e-01, 6.026771e-01, 6.026916e-01, 6.027061e-01, 6.027206e-01, 6.027351e-01, 6.027496e-01, 6.027641e-01, 6.027786e-01, 6.027931e-01, 6.028076e-01, 6.028221e-01, 6.028365e-01, 6.028511e-01, 6.028656e-01, 6.028801e-01, 6.028945e-01, 6.029090e-01, 6.029235e-01, 6.029380e-01, 6.029525e-01, 6.029670e-01, 6.029815e-01, 6.029961e-01, 6.030105e-01, 6.030250e-01, 6.030395e-01, 6.030540e-01, 6.030685e-01, 6.030830e-01, 6.030974e-01, 6.031119e-01, 6.031264e-01, 6.031409e-01, 6.031554e-01, 6.031699e-01, 6.031844e-01, 6.031989e-01, 6.032134e-01, 6.032279e-01, 6.032424e-01, 6.032569e-01, 6.032714e-01, 6.032858e-01, 6.033003e-01, 6.033148e-01, 6.033293e-01, 6.033438e-01, 6.033583e-01, 6.033728e-01, 6.033873e-01, 6.034018e-01, 6.034163e-01, 6.034307e-01, 6.034452e-01, 6.034597e-01, 6.034742e-01, 6.034887e-01, 6.035032e-01, 6.035177e-01, 6.035322e-01, 6.035467e-01, 6.035612e-01, 6.035756e-01, 6.035901e-01, 6.036046e-01, 6.036191e-01, 6.036336e-01, 6.036481e-01, 6.036626e-01, 6.036770e-01, 6.036915e-01, 6.037060e-01, 6.037205e-01, 6.037350e-01, 6.037495e-01, 6.037640e-01, 6.037785e-01, 6.037930e-01, 6.038074e-01, 6.038219e-01, 6.038364e-01, 6.038508e-01, 6.038653e-01, 6.038799e-01, 6.038944e-01, 6.039088e-01, 6.039233e-01, 6.039378e-01, 6.039523e-01, 6.039667e-01, 6.039812e-01, 6.039957e-01, 6.040102e-01, 6.040247e-01, 6.040392e-01, 6.040537e-01, 6.040681e-01, 6.040826e-01, 6.040971e-01, 6.041116e-01, 6.041261e-01, 6.041406e-01, 6.041550e-01, 6.041695e-01, 6.041840e-01, 6.041985e-01, 6.042130e-01, 6.042274e-01, 6.042419e-01, 6.042564e-01, 6.042709e-01, 6.042854e-01, 6.042998e-01, 6.043143e-01, 6.043288e-01, 6.043433e-01, 6.043578e-01, 6.043722e-01, 6.043867e-01, 6.044012e-01, 6.044157e-01, 6.044301e-01, 6.044446e-01, 6.044591e-01, 6.044736e-01, 6.044881e-01, 6.045026e-01, 6.045170e-01, 6.045315e-01, 6.045460e-01, 6.045604e-01, 6.045750e-01, 6.045895e-01, 6.046039e-01, 6.046184e-01, 6.046329e-01, 6.046473e-01, 6.046618e-01, 6.046763e-01, 6.046907e-01, 6.047052e-01, 6.047197e-01, 6.047342e-01, 6.047487e-01, 6.047632e-01, 6.047776e-01, 6.047921e-01, 6.048065e-01, 6.048211e-01, 6.048355e-01, 6.048500e-01, 6.048645e-01, 6.048790e-01, 6.048934e-01, 6.049079e-01, 6.049224e-01, 6.049368e-01, 6.049513e-01, 6.049658e-01, 6.049803e-01, 6.049947e-01, 6.050092e-01, 6.050237e-01, 6.050382e-01, 6.050526e-01, 6.050671e-01, 6.050816e-01, 6.050960e-01, 6.051105e-01, 6.051250e-01, 6.051394e-01, 6.051539e-01, 6.051684e-01, 6.051829e-01, 6.051974e-01, 6.052118e-01, 6.052263e-01, 6.052408e-01, 6.052552e-01, 6.052697e-01, 6.052842e-01, 6.052986e-01, 6.053131e-01, 6.053276e-01, 6.053420e-01, 6.053565e-01, 6.053710e-01, 6.053855e-01, 6.054000e-01, 6.054144e-01, 6.054289e-01, 6.054434e-01, 6.054578e-01, 6.054723e-01, 6.054868e-01, 6.055012e-01, 6.055157e-01, 6.055301e-01, 6.055446e-01, 6.055591e-01, 6.055736e-01, 6.055880e-01, 6.056025e-01, 6.056169e-01, 6.056315e-01, 6.056459e-01, 6.056604e-01, 6.056748e-01, 6.056893e-01, 6.057038e-01, 6.057182e-01, 6.057327e-01, 6.057472e-01, 6.057616e-01, 6.057761e-01, 6.057906e-01, 6.058050e-01, 6.058195e-01, 6.058339e-01, 6.058484e-01, 6.058629e-01, 6.058773e-01, 6.058918e-01, 6.059062e-01, 6.059207e-01, 6.059352e-01, 6.059496e-01, 6.059641e-01, 6.059786e-01, 6.059931e-01, 6.060075e-01, 6.060220e-01, 6.060365e-01, 6.060509e-01, 6.060653e-01, 6.060798e-01, 6.060943e-01, 6.061088e-01, 6.061232e-01, 6.061377e-01, 6.061522e-01, 6.061666e-01, 6.061811e-01, 6.061956e-01, 6.062100e-01, 6.062244e-01, 6.062389e-01, 6.062534e-01, 6.062678e-01, 6.062823e-01, 6.062968e-01, 6.063112e-01, 6.063257e-01, 6.063402e-01, 6.063546e-01, 6.063691e-01, 6.063835e-01, 6.063980e-01, 6.064125e-01, 6.064269e-01, 6.064414e-01, 6.064558e-01, 6.064703e-01, 6.064847e-01, 6.064992e-01, 6.065137e-01, 6.065281e-01, 6.065426e-01, 6.065570e-01, 6.065715e-01, 6.065859e-01, 6.066004e-01, 6.066148e-01, 6.066293e-01, 6.066438e-01, 6.066582e-01, 6.066726e-01, 6.066872e-01, 6.067016e-01, 6.067160e-01, 6.067305e-01, 6.067449e-01, 6.067594e-01, 6.067739e-01, 6.067883e-01, 6.068028e-01, 6.068172e-01, 6.068317e-01, 6.068462e-01, 6.068606e-01, 6.068751e-01, 6.068895e-01, 6.069040e-01, 6.069185e-01, 6.069329e-01, 6.069473e-01, 6.069618e-01, 6.069763e-01, 6.069907e-01, 6.070052e-01, 6.070196e-01, 6.070340e-01, 6.070485e-01, 6.070629e-01, 6.070774e-01, 6.070919e-01, 6.071063e-01, 6.071208e-01, 6.071352e-01, 6.071497e-01, 6.071641e-01, 6.071786e-01, 6.071931e-01, 6.072075e-01, 6.072220e-01, 6.072364e-01, 6.072508e-01, 6.072653e-01, 6.072797e-01, 6.072941e-01, 6.073086e-01, 6.073231e-01, 6.073375e-01, 6.073520e-01, 6.073664e-01, 6.073809e-01, 6.073954e-01, 6.074098e-01, 6.074243e-01, 6.074387e-01, 6.074531e-01, 6.074676e-01, 6.074820e-01, 6.074964e-01, 6.075109e-01, 6.075253e-01, 6.075398e-01, 6.075543e-01, 6.075687e-01, 6.075832e-01, 6.075976e-01, 6.076121e-01, 6.076266e-01, 6.076410e-01, 6.076554e-01, 6.076699e-01, 6.076843e-01, 6.076987e-01, 6.077132e-01, 6.077276e-01, 6.077421e-01, 6.077566e-01, 6.077710e-01, 6.077854e-01, 6.077998e-01, 6.078143e-01, 6.078287e-01, 6.078432e-01, 6.078576e-01, 6.078721e-01, 6.078865e-01, 6.079010e-01, 6.079154e-01, 6.079299e-01, 6.079443e-01, 6.079587e-01, 6.079732e-01, 6.079876e-01, 6.080021e-01, 6.080166e-01, 6.080310e-01, 6.080455e-01, 6.080598e-01, 6.080743e-01, 6.080887e-01, 6.081032e-01, 6.081176e-01, 6.081321e-01, 6.081465e-01, 6.081610e-01, 6.081754e-01, 6.081898e-01, 6.082042e-01, 6.082187e-01, 6.082332e-01, 6.082476e-01, 6.082621e-01, 6.082765e-01, 6.082909e-01, 6.083053e-01, 6.083198e-01, 6.083342e-01, 6.083487e-01, 6.083632e-01, 6.083776e-01, 6.083920e-01, 6.084064e-01, 6.084208e-01, 6.084353e-01, 6.084498e-01, 6.084642e-01, 6.084786e-01, 6.084931e-01, 6.085075e-01, 6.085219e-01, 6.085364e-01, 6.085508e-01, 6.085653e-01, 6.085797e-01, 6.085941e-01, 6.086086e-01, 6.086230e-01, 6.086375e-01, 6.086519e-01, 6.086664e-01, 6.086808e-01, 6.086952e-01, 6.087096e-01, 6.087241e-01, 6.087385e-01, 6.087529e-01, 6.087674e-01, 6.087818e-01, 6.087962e-01, 6.088107e-01, 6.088251e-01, 6.088396e-01, 6.088540e-01, 6.088684e-01, 6.088828e-01, 6.088973e-01, 6.089117e-01, 6.089262e-01, 6.089406e-01, 6.089550e-01, 6.089694e-01, 6.089839e-01, 6.089984e-01, 6.090127e-01, 6.090272e-01, 6.090416e-01, 6.090561e-01, 6.090705e-01, 6.090850e-01, 6.090993e-01, 6.091138e-01, 6.091282e-01, 6.091427e-01, 6.091571e-01, 6.091715e-01, 6.091859e-01, 6.092004e-01, 6.092148e-01, 6.092292e-01, 6.092437e-01, 6.092581e-01, 6.092725e-01, 6.092870e-01, 6.093014e-01, 6.093158e-01, 6.093303e-01, 6.093447e-01, 6.093591e-01, 6.093736e-01, 6.093880e-01, 6.094024e-01, 6.094168e-01, 6.094313e-01, 6.094457e-01, 6.094601e-01, 6.094745e-01, 6.094890e-01, 6.095034e-01, 6.095178e-01, 6.095323e-01, 6.095467e-01, 6.095611e-01, 6.095756e-01, 6.095900e-01, 6.096044e-01, 6.096188e-01, 6.096333e-01, 6.096477e-01, 6.096621e-01, 6.096765e-01, 6.096910e-01, 6.097054e-01, 6.097198e-01, 6.097342e-01, 6.097487e-01, 6.097631e-01, 6.097775e-01, 6.097919e-01, 6.098064e-01, 6.098208e-01, 6.098352e-01, 6.098496e-01, 6.098641e-01, 6.098785e-01, 6.098929e-01, 6.099074e-01, 6.099218e-01, 6.099362e-01, 6.099506e-01, 6.099651e-01, 6.099795e-01, 6.099939e-01, 6.100083e-01, 6.100227e-01, 6.100371e-01, 6.100516e-01, 6.100660e-01, 6.100804e-01, 6.100948e-01, 6.101093e-01, 6.101237e-01, 6.101381e-01, 6.101525e-01, 6.101670e-01, 6.101814e-01, 6.101958e-01, 6.102102e-01, 6.102246e-01, 6.102391e-01, 6.102535e-01, 6.102679e-01, 6.102823e-01, 6.102967e-01, 6.103112e-01, 6.103256e-01, 6.103400e-01, 6.103544e-01, 6.103688e-01, 6.103833e-01, 6.103977e-01, 6.104121e-01, 6.104265e-01, 6.104409e-01, 6.104554e-01, 6.104698e-01, 6.104842e-01, 6.104987e-01, 6.105130e-01, 6.105275e-01, 6.105419e-01, 6.105563e-01, 6.105707e-01, 6.105852e-01, 6.105996e-01, 6.106139e-01, 6.106284e-01, 6.106428e-01, 6.106572e-01, 6.106716e-01, 6.106861e-01, 6.107005e-01, 6.107149e-01, 6.107293e-01, 6.107437e-01, 6.107581e-01, 6.107726e-01, 6.107870e-01, 6.108014e-01, 6.108158e-01, 6.108302e-01, 6.108446e-01, 6.108590e-01, 6.108735e-01, 6.108879e-01, 6.109023e-01, 6.109167e-01, 6.109311e-01, 6.109455e-01, 6.109599e-01, 6.109744e-01, 6.109887e-01, 6.110032e-01, 6.110176e-01, 6.110320e-01, 6.110464e-01, 6.110609e-01, 6.110753e-01, 6.110896e-01, 6.111041e-01, 6.111184e-01, 6.111329e-01, 6.111473e-01, 6.111617e-01, 6.111761e-01, 6.111905e-01, 6.112049e-01, 6.112193e-01, 6.112338e-01, 6.112482e-01, 6.112626e-01, 6.112770e-01, 6.112914e-01, 6.113058e-01, 6.113203e-01, 6.113346e-01, 6.113490e-01, 6.113635e-01, 6.113778e-01, 6.113923e-01, 6.114067e-01, 6.114211e-01, 6.114355e-01, 6.114499e-01, 6.114643e-01, 6.114787e-01, 6.114931e-01, 6.115076e-01, 6.115220e-01, 6.115364e-01, 6.115508e-01, 6.115652e-01, 6.115796e-01, 6.115940e-01, 6.116084e-01, 6.116228e-01, 6.116372e-01, 6.116516e-01, 6.116661e-01, 6.116804e-01, 6.116949e-01, 6.117092e-01, 6.117237e-01, 6.117381e-01, 6.117525e-01, 6.117669e-01, 6.117813e-01, 6.117957e-01, 6.118101e-01, 6.118245e-01, 6.118389e-01, 6.118533e-01, 6.118677e-01, 6.118821e-01, 6.118965e-01, 6.119109e-01, 6.119253e-01, 6.119397e-01, 6.119542e-01, 6.119685e-01, 6.119829e-01, 6.119974e-01, 6.120117e-01, 6.120262e-01, 6.120405e-01, 6.120549e-01, 6.120694e-01, 6.120837e-01, 6.120982e-01, 6.121126e-01, 6.121269e-01, 6.121414e-01, 6.121558e-01, 6.121702e-01, 6.121846e-01, 6.121990e-01, 6.122134e-01, 6.122278e-01, 6.122422e-01, 6.122566e-01, 6.122710e-01, 6.122854e-01, 6.122998e-01, 6.123142e-01, 6.123286e-01, 6.123430e-01, 6.123574e-01, 6.123718e-01, 6.123862e-01, 6.124006e-01, 6.124150e-01, 6.124294e-01, 6.124438e-01, 6.124582e-01, 6.124726e-01, 6.124870e-01, 6.125014e-01, 6.125158e-01, 6.125302e-01, 6.125446e-01, 6.125590e-01, 6.125734e-01, 6.125877e-01, 6.126022e-01, 6.126165e-01, 6.126310e-01, 6.126454e-01, 6.126598e-01, 6.126742e-01, 6.126885e-01, 6.127030e-01, 6.127173e-01, 6.127318e-01, 6.127462e-01, 6.127605e-01, 6.127749e-01, 6.127893e-01, 6.128037e-01, 6.128181e-01, 6.128325e-01, 6.128469e-01, 6.128613e-01, 6.128757e-01, 6.128901e-01, 6.129045e-01, 6.129189e-01, 6.129333e-01, 6.129476e-01, 6.129621e-01, 6.129764e-01, 6.129909e-01, 6.130052e-01, 6.130196e-01, 6.130340e-01, 6.130484e-01, 6.130628e-01, 6.130772e-01, 6.130916e-01, 6.131060e-01, 6.131204e-01, 6.131348e-01, 6.131492e-01, 6.131635e-01, 6.131780e-01, 6.131924e-01, 6.132067e-01, 6.132211e-01, 6.132355e-01, 6.132499e-01, 6.132643e-01, 6.132787e-01, 6.132931e-01, 6.133075e-01, 6.133218e-01, 6.133363e-01, 6.133506e-01, 6.133651e-01, 6.133794e-01, 6.133938e-01, 6.134082e-01, 6.134226e-01, 6.134369e-01, 6.134514e-01, 6.134658e-01, 6.134802e-01, 6.134945e-01, 6.135089e-01, 6.135233e-01, 6.135377e-01, 6.135520e-01, 6.135665e-01, 6.135809e-01, 6.135952e-01, 6.136096e-01, 6.136240e-01, 6.136384e-01, 6.136528e-01, 6.136671e-01, 6.136816e-01, 6.136960e-01, 6.137103e-01, 6.137247e-01, 6.137391e-01, 6.137535e-01, 6.137679e-01, 6.137823e-01, 6.137967e-01, 6.138110e-01, 6.138254e-01, 6.138398e-01, 6.138542e-01, 6.138686e-01, 6.138830e-01, 6.138974e-01, 6.139117e-01, 6.139261e-01, 6.139405e-01, 6.139549e-01, 6.139693e-01, 6.139836e-01, 6.139981e-01, 6.140124e-01, 6.140268e-01, 6.140412e-01, 6.140556e-01, 6.140699e-01, 6.140844e-01, 6.140987e-01, 6.141131e-01, 6.141275e-01, 6.141419e-01, 6.141562e-01, 6.141706e-01, 6.141850e-01, 6.141994e-01, 6.142138e-01, 6.142282e-01, 6.142426e-01, 6.142569e-01, 6.142713e-01, 6.142857e-01, 6.143001e-01, 6.143144e-01, 6.143288e-01, 6.143432e-01, 6.143576e-01, 6.143720e-01, 6.143863e-01, 6.144007e-01, 6.144151e-01, 6.144295e-01, 6.144439e-01, 6.144583e-01, 6.144726e-01, 6.144870e-01, 6.145014e-01, 6.145158e-01, 6.145301e-01, 6.145445e-01, 6.145589e-01, 6.145732e-01, 6.145877e-01, 6.146020e-01, 6.146164e-01, 6.146308e-01, 6.146451e-01, 6.146595e-01, 6.146739e-01, 6.146883e-01, 6.147026e-01, 6.147170e-01, 6.147314e-01, 6.147458e-01, 6.147602e-01, 6.147745e-01, 6.147889e-01, 6.148033e-01, 6.148177e-01, 6.148320e-01, 6.148464e-01, 6.148608e-01, 6.148751e-01, 6.148895e-01, 6.149039e-01, 6.149183e-01, 6.149327e-01, 6.149470e-01, 6.149614e-01, 6.149758e-01, 6.149901e-01, 6.150045e-01, 6.150189e-01, 6.150333e-01, 6.150477e-01, 6.150620e-01, 6.150764e-01, 6.150907e-01, 6.151052e-01, 6.151195e-01, 6.151339e-01, 6.151482e-01, 6.151626e-01, 6.151770e-01, 6.151913e-01, 6.152058e-01, 6.152201e-01, 6.152345e-01, 6.152489e-01, 6.152632e-01, 6.152776e-01, 6.152920e-01, 6.153063e-01, 6.153207e-01, 6.153351e-01, 6.153495e-01, 6.153638e-01, 6.153782e-01, 6.153926e-01, 6.154069e-01, 6.154213e-01, 6.154357e-01, 6.154500e-01, 6.154644e-01, 6.154788e-01, 6.154931e-01, 6.155075e-01, 6.155218e-01, 6.155362e-01, 6.155506e-01, 6.155650e-01, 6.155794e-01, 6.155937e-01, 6.156081e-01, 6.156224e-01, 6.156368e-01, 6.156512e-01, 6.156656e-01, 6.156799e-01, 6.156943e-01, 6.157086e-01, 6.157230e-01, 6.157374e-01, 6.157517e-01, 6.157661e-01, 6.157805e-01, 6.157948e-01, 6.158092e-01, 6.158236e-01, 6.158379e-01, 6.158524e-01, 6.158667e-01, 6.158810e-01, 6.158954e-01, 6.159098e-01, 6.159241e-01, 6.159385e-01, 6.159528e-01, 6.159672e-01, 6.159816e-01, 6.159959e-01, 6.160103e-01, 6.160247e-01, 6.160390e-01, 6.160534e-01, 6.160678e-01, 6.160821e-01, 6.160965e-01, 6.161109e-01, 6.161252e-01, 6.161396e-01, 6.161540e-01, 6.161683e-01, 6.161827e-01, 6.161970e-01, 6.162114e-01, 6.162257e-01, 6.162401e-01, 6.162544e-01, 6.162688e-01, 6.162832e-01, 6.162975e-01, 6.163119e-01, 6.163263e-01, 6.163406e-01, 6.163550e-01, 6.163694e-01, 6.163837e-01, 6.163981e-01, 6.164125e-01, 6.164268e-01, 6.164411e-01, 6.164555e-01, 6.164699e-01, 6.164842e-01, 6.164986e-01, 6.165130e-01, 6.165273e-01, 6.165417e-01, 6.165560e-01, 6.165704e-01, 6.165847e-01, 6.165991e-01, 6.166134e-01, 6.166278e-01, 6.166422e-01, 6.166565e-01, 6.166709e-01, 6.166852e-01, 6.166996e-01, 6.167139e-01, 6.167283e-01, 6.167427e-01, 6.167570e-01, 6.167713e-01, 6.167857e-01, 6.168001e-01, 6.168144e-01, 6.168288e-01, 6.168432e-01, 6.168575e-01, 6.168718e-01, 6.168862e-01, 6.169006e-01, 6.169149e-01, 6.169293e-01, 6.169437e-01, 6.169580e-01, 6.169723e-01, 6.169867e-01, 6.170011e-01, 6.170154e-01, 6.170298e-01, 6.170442e-01, 6.170585e-01, 6.170728e-01, 6.170872e-01, 6.171016e-01, 6.171159e-01, 6.171302e-01, 6.171446e-01, 6.171589e-01, 6.171733e-01, 6.171876e-01, 6.172020e-01, 6.172163e-01, 6.172307e-01, 6.172450e-01, 6.172594e-01, 6.172737e-01, 6.172881e-01, 6.173024e-01, 6.173168e-01, 6.173311e-01, 6.173455e-01, 6.173598e-01, 6.173742e-01, 6.173885e-01, 6.174029e-01, 6.174172e-01, 6.174316e-01, 6.174459e-01, 6.174603e-01, 6.174746e-01, 6.174890e-01, 6.175033e-01, 6.175177e-01, 6.175320e-01, 6.175464e-01, 6.175607e-01, 6.175750e-01, 6.175894e-01, 6.176038e-01, 6.176181e-01, 6.176324e-01, 6.176468e-01, 6.176612e-01, 6.176755e-01, 6.176898e-01, 6.177042e-01, 6.177186e-01, 6.177329e-01, 6.177472e-01, 6.177616e-01, 6.177759e-01, 6.177903e-01, 6.178046e-01, 6.178190e-01, 6.178333e-01, 6.178477e-01, 6.178620e-01, 6.178764e-01, 6.178907e-01, 6.179050e-01, 6.179194e-01, 6.179337e-01, 6.179481e-01, 6.179624e-01, 6.179767e-01, 6.179911e-01, 6.180055e-01, 6.180198e-01, 6.180341e-01, 6.180485e-01, 6.180628e-01, 6.180772e-01, 6.180915e-01, 6.181059e-01, 6.181202e-01, 6.181346e-01, 6.181489e-01, 6.181632e-01, 6.181776e-01, 6.181919e-01, 6.182063e-01, 6.182206e-01, 6.182349e-01, 6.182492e-01, 6.182636e-01, 6.182779e-01, 6.182923e-01, 6.183066e-01, 6.183209e-01, 6.183353e-01, 6.183497e-01, 6.183640e-01, 6.183783e-01, 6.183927e-01, 6.184070e-01, 6.184214e-01, 6.184357e-01, 6.184500e-01, 6.184644e-01, 6.184787e-01, 6.184930e-01, 6.185074e-01, 6.185217e-01, 6.185361e-01, 6.185504e-01, 6.185647e-01, 6.185791e-01, 6.185935e-01, 6.186078e-01, 6.186221e-01, 6.186364e-01, 6.186507e-01, 6.186651e-01, 6.186794e-01, 6.186938e-01, 6.187081e-01, 6.187224e-01, 6.187368e-01, 6.187512e-01, 6.187655e-01, 6.187798e-01, 6.187941e-01, 6.188084e-01, 6.188228e-01, 6.188371e-01, 6.188514e-01, 6.188658e-01, 6.188802e-01, 6.188945e-01, 6.189088e-01, 6.189231e-01, 6.189375e-01, 6.189518e-01, 6.189662e-01, 6.189805e-01, 6.189948e-01, 6.190091e-01, 6.190235e-01, 6.190378e-01, 6.190522e-01, 6.190665e-01, 6.190808e-01, 6.190951e-01, 6.191095e-01, 6.191238e-01, 6.191381e-01, 6.191525e-01, 6.191669e-01, 6.191812e-01, 6.191955e-01, 6.192098e-01, 6.192241e-01, 6.192384e-01, 6.192528e-01, 6.192671e-01, 6.192815e-01, 6.192958e-01, 6.193101e-01, 6.193244e-01, 6.193388e-01, 6.193531e-01, 6.193674e-01, 6.193818e-01, 6.193961e-01, 6.194105e-01, 6.194248e-01, 6.194391e-01, 6.194534e-01, 6.194677e-01, 6.194820e-01, 6.194964e-01, 6.195108e-01, 6.195251e-01, 6.195394e-01, 6.195537e-01, 6.195680e-01, 6.195824e-01, 6.195967e-01, 6.196110e-01, 6.196254e-01, 6.196397e-01, 6.196540e-01, 6.196683e-01, 6.196827e-01, 6.196970e-01, 6.197113e-01, 6.197256e-01, 6.197399e-01, 6.197543e-01, 6.197686e-01, 6.197829e-01, 6.197973e-01, 6.198116e-01, 6.198260e-01, 6.198403e-01, 6.198546e-01, 6.198689e-01, 6.198832e-01, 6.198975e-01, 6.199119e-01, 6.199262e-01, 6.199405e-01, 6.199548e-01, 6.199692e-01, 6.199835e-01, 6.199979e-01, 6.200122e-01, 6.200265e-01, 6.200408e-01, 6.200551e-01, 6.200694e-01, 6.200837e-01, 6.200981e-01, 6.201124e-01, 6.201267e-01, 6.201411e-01, 6.201554e-01, 6.201697e-01, 6.201840e-01, 6.201983e-01, 6.202127e-01, 6.202270e-01, 6.202413e-01, 6.202556e-01, 6.202700e-01, 6.202843e-01, 6.202986e-01, 6.203129e-01, 6.203272e-01, 6.203415e-01, 6.203558e-01, 6.203702e-01, 6.203845e-01, 6.203988e-01, 6.204131e-01, 6.204274e-01, 6.204418e-01, 6.204561e-01, 6.204705e-01, 6.204848e-01, 6.204991e-01, 6.205134e-01, 6.205277e-01, 6.205420e-01, 6.205564e-01, 6.205707e-01, 6.205850e-01, 6.205993e-01, 6.206136e-01, 6.206279e-01, 6.206422e-01, 6.206565e-01, 6.206709e-01, 6.206852e-01, 6.206995e-01, 6.207138e-01, 6.207282e-01, 6.207425e-01, 6.207568e-01, 6.207711e-01, 6.207854e-01, 6.207997e-01, 6.208140e-01, 6.208283e-01, 6.208426e-01, 6.208570e-01, 6.208713e-01, 6.208856e-01, 6.208999e-01, 6.209143e-01, 6.209286e-01, 6.209429e-01, 6.209572e-01, 6.209715e-01, 6.209859e-01, 6.210002e-01, 6.210144e-01, 6.210287e-01, 6.210431e-01, 6.210574e-01, 6.210717e-01, 6.210860e-01, 6.211004e-01, 6.211147e-01, 6.211290e-01, 6.211433e-01, 6.211576e-01, 6.211719e-01, 6.211862e-01, 6.212005e-01, 6.212148e-01, 6.212292e-01, 6.212435e-01, 6.212577e-01, 6.212721e-01, 6.212864e-01, 6.213007e-01, 6.213150e-01, 6.213293e-01, 6.213436e-01, 6.213579e-01, 6.213722e-01, 6.213866e-01, 6.214009e-01, 6.214152e-01, 6.214294e-01, 6.214438e-01, 6.214581e-01, 6.214724e-01, 6.214867e-01, 6.215010e-01, 6.215153e-01, 6.215296e-01, 6.215439e-01, 6.215583e-01, 6.215726e-01, 6.215869e-01, 6.216012e-01, 6.216155e-01, 6.216298e-01, 6.216441e-01, 6.216584e-01, 6.216727e-01, 6.216871e-01, 6.217013e-01, 6.217157e-01, 6.217300e-01, 6.217443e-01, 6.217586e-01, 6.217729e-01, 6.217872e-01, 6.218015e-01, 6.218158e-01, 6.218301e-01, 6.218444e-01, 6.218587e-01, 6.218730e-01, 6.218873e-01, 6.219016e-01, 6.219159e-01, 6.219302e-01, 6.219445e-01, 6.219589e-01, 6.219732e-01, 6.219875e-01, 6.220018e-01, 6.220161e-01, 6.220304e-01, 6.220446e-01, 6.220590e-01, 6.220733e-01, 6.220875e-01, 6.221019e-01, 6.221162e-01, 6.221305e-01, 6.221448e-01, 6.221591e-01, 6.221734e-01, 6.221877e-01, 6.222020e-01, 6.222163e-01, 6.222306e-01, 6.222449e-01, 6.222592e-01, 6.222735e-01, 6.222878e-01, 6.223021e-01, 6.223164e-01, 6.223307e-01, 6.223450e-01, 6.223593e-01, 6.223736e-01, 6.223879e-01, 6.224022e-01, 6.224165e-01, 6.224308e-01, 6.224451e-01, 6.224594e-01, 6.224737e-01, 6.224880e-01, 6.225023e-01, 6.225166e-01, 6.225309e-01, 6.225452e-01, 6.225595e-01, 6.225738e-01, 6.225881e-01, 6.226024e-01, 6.226167e-01, 6.226310e-01, 6.226453e-01, 6.226596e-01, 6.226739e-01, 6.226882e-01, 6.227025e-01, 6.227168e-01, 6.227311e-01, 6.227453e-01, 6.227596e-01, 6.227739e-01, 6.227883e-01, 6.228026e-01, 6.228169e-01, 6.228311e-01, 6.228455e-01, 6.228597e-01, 6.228740e-01, 6.228883e-01, 6.229026e-01, 6.229169e-01, 6.229312e-01, 6.229455e-01, 6.229598e-01, 6.229741e-01, 6.229884e-01, 6.230027e-01, 6.230170e-01, 6.230313e-01, 6.230456e-01, 6.230599e-01, 6.230741e-01, 6.230885e-01, 6.231027e-01, 6.231170e-01, 6.231313e-01, 6.231456e-01, 6.231599e-01, 6.231742e-01, 6.231885e-01, 6.232028e-01, 6.232170e-01, 6.232314e-01, 6.232457e-01, 6.232600e-01, 6.232743e-01, 6.232885e-01, 6.233028e-01, 6.233171e-01, 6.233314e-01, 6.233457e-01, 6.233600e-01, 6.233743e-01, 6.233886e-01, 6.234028e-01, 6.234171e-01, 6.234314e-01, 6.234457e-01, 6.234600e-01, 6.234743e-01, 6.234885e-01, 6.235029e-01, 6.235172e-01, 6.235315e-01, 6.235458e-01, 6.235600e-01, 6.235743e-01, 6.235886e-01, 6.236029e-01, 6.236172e-01, 6.236315e-01, 6.236458e-01, 6.236600e-01, 6.236743e-01, 6.236886e-01, 6.237029e-01, 6.237172e-01, 6.237315e-01, 6.237458e-01, 6.237600e-01, 6.237743e-01, 6.237887e-01, 6.238029e-01, 6.238172e-01, 6.238315e-01, 6.238458e-01, 6.238601e-01, 6.238743e-01, 6.238887e-01, 6.239029e-01, 6.239172e-01, 6.239315e-01, 6.239458e-01, 6.239601e-01, 6.239743e-01, 6.239886e-01, 6.240029e-01, 6.240172e-01, 6.240315e-01, 6.240457e-01, 6.240600e-01, 6.240743e-01, 6.240886e-01, 6.241029e-01, 6.241172e-01, 6.241314e-01, 6.241457e-01, 6.241601e-01, 6.241743e-01, 6.241886e-01, 6.242028e-01, 6.242172e-01, 6.242315e-01, 6.242457e-01, 6.242600e-01, 6.242743e-01, 6.242886e-01, 6.243028e-01, 6.243172e-01, 6.243314e-01, 6.243457e-01, 6.243600e-01, 6.243743e-01, 6.243885e-01, 6.244028e-01, 6.244171e-01, 6.244314e-01, 6.244457e-01, 6.244599e-01, 6.244742e-01, 6.244885e-01, 6.245028e-01, 6.245170e-01, 6.245313e-01, 6.245456e-01, 6.245599e-01, 6.245742e-01, 6.245884e-01, 6.246027e-01, 6.246170e-01, 6.246313e-01, 6.246455e-01, 6.246598e-01, 6.246741e-01, 6.246884e-01, 6.247026e-01, 6.247169e-01, 6.247312e-01, 6.247455e-01, 6.247598e-01, 6.247740e-01, 6.247883e-01, 6.248026e-01, 6.248169e-01, 6.248311e-01, 6.248454e-01, 6.248597e-01, 6.248740e-01, 6.248882e-01, 6.249025e-01, 6.249168e-01, 6.249311e-01, 6.249453e-01, 6.249596e-01, 6.249739e-01, 6.249882e-01, 6.250024e-01, 6.250167e-01, 6.250310e-01, 6.250453e-01, 6.250595e-01, 6.250739e-01, 6.250881e-01, 6.251024e-01, 6.251166e-01, 6.251310e-01, 6.251452e-01, 6.251594e-01, 6.251737e-01, 6.251880e-01, 6.252022e-01, 6.252165e-01, 6.252308e-01, 6.252451e-01, 6.252593e-01, 6.252736e-01, 6.252879e-01, 6.253022e-01, 6.253164e-01, 6.253307e-01, 6.253450e-01, 6.253593e-01, 6.253735e-01, 6.253878e-01, 6.254020e-01, 6.254163e-01, 6.254306e-01, 6.254449e-01, 6.254591e-01, 6.254734e-01, 6.254877e-01, 6.255019e-01, 6.255162e-01, 6.255305e-01, 6.255447e-01, 6.255590e-01, 6.255733e-01, 6.255876e-01, 6.256018e-01, 6.256161e-01, 6.256304e-01, 6.256446e-01, 6.256589e-01, 6.256732e-01, 6.256875e-01, 6.257017e-01, 6.257160e-01, 6.257302e-01, 6.257445e-01, 6.257588e-01, 6.257731e-01, 6.257873e-01, 6.258016e-01, 6.258159e-01, 6.258301e-01, 6.258444e-01, 6.258586e-01, 6.258729e-01, 6.258872e-01, 6.259015e-01, 6.259157e-01, 6.259300e-01, 6.259443e-01, 6.259585e-01, 6.259727e-01, 6.259870e-01, 6.260013e-01, 6.260155e-01, 6.260298e-01, 6.260440e-01, 6.260583e-01, 6.260726e-01, 6.260869e-01, 6.261011e-01, 6.261154e-01, 6.261297e-01, 6.261439e-01, 6.261582e-01, 6.261724e-01, 6.261867e-01, 6.262010e-01, 6.262152e-01, 6.262295e-01, 6.262438e-01, 6.262580e-01, 6.262723e-01, 6.262866e-01, 6.263008e-01, 6.263151e-01, 6.263294e-01, 6.263435e-01, 6.263579e-01, 6.263721e-01, 6.263863e-01, 6.264006e-01, 6.264149e-01, 6.264291e-01, 6.264434e-01, 6.264577e-01, 6.264719e-01, 6.264862e-01, 6.265005e-01, 6.265147e-01, 6.265290e-01, 6.265432e-01, 6.265575e-01, 6.265718e-01, 6.265860e-01, 6.266003e-01, 6.266145e-01, 6.266288e-01, 6.266431e-01, 6.266573e-01, 6.266716e-01, 6.266858e-01, 6.267000e-01, 6.267143e-01, 6.267286e-01, 6.267428e-01, 6.267571e-01, 6.267713e-01, 6.267856e-01, 6.267999e-01, 6.268141e-01, 6.268284e-01, 6.268426e-01, 6.268569e-01, 6.268711e-01, 6.268854e-01, 6.268997e-01, 6.269139e-01, 6.269282e-01, 6.269424e-01, 6.269567e-01, 6.269709e-01, 6.269852e-01, 6.269994e-01, 6.270137e-01, 6.270279e-01, 6.270422e-01, 6.270564e-01, 6.270707e-01, 6.270850e-01, 6.270992e-01, 6.271135e-01, 6.271277e-01, 6.271420e-01, 6.271563e-01, 6.271704e-01, 6.271847e-01, 6.271990e-01, 6.272132e-01, 6.272275e-01, 6.272417e-01, 6.272560e-01, 6.272703e-01, 6.272845e-01, 6.272988e-01, 6.273130e-01, 6.273273e-01, 6.273415e-01, 6.273558e-01, 6.273700e-01, 6.273842e-01, 6.273985e-01, 6.274127e-01, 6.274270e-01, 6.274412e-01, 6.274555e-01, 6.274698e-01, 6.274840e-01, 6.274983e-01, 6.275125e-01, 6.275268e-01, 6.275410e-01, 6.275553e-01, 6.275695e-01, 6.275837e-01, 6.275980e-01, 6.276122e-01, 6.276265e-01, 6.276407e-01, 6.276550e-01, 6.276693e-01, 6.276835e-01, 6.276977e-01, 6.277120e-01, 6.277262e-01, 6.277405e-01, 6.277547e-01, 6.277690e-01, 6.277832e-01, 6.277975e-01, 6.278117e-01, 6.278260e-01, 6.278402e-01, 6.278545e-01, 6.278687e-01, 6.278830e-01, 6.278972e-01, 6.279114e-01, 6.279257e-01, 6.279399e-01, 6.279542e-01, 6.279684e-01, 6.279827e-01, 6.279969e-01, 6.280112e-01, 6.280254e-01, 6.280396e-01, 6.280539e-01, 6.280681e-01, 6.280823e-01, 6.280966e-01, 6.281109e-01, 6.281251e-01, 6.281393e-01, 6.281536e-01, 6.281678e-01, 6.281821e-01, 6.281963e-01, 6.282105e-01, 6.282248e-01, 6.282390e-01, 6.282533e-01, 6.282675e-01, 6.282818e-01, 6.282960e-01, 6.283103e-01, 6.283245e-01, 6.283388e-01, 6.283530e-01, 6.283672e-01, 6.283814e-01, 6.283957e-01, 6.284099e-01, 6.284242e-01, 6.284384e-01, 6.284527e-01, 6.284669e-01, 6.284811e-01, 6.284954e-01, 6.285096e-01, 6.285238e-01, 6.285381e-01, 6.285523e-01, 6.285666e-01, 6.285808e-01, 6.285951e-01, 6.286093e-01, 6.286235e-01, 6.286378e-01, 6.286520e-01, 6.286662e-01, 6.286805e-01, 6.286947e-01, 6.287090e-01, 6.287232e-01, 6.287374e-01, 6.287517e-01, 6.287659e-01, 6.287801e-01, 6.287944e-01, 6.288086e-01, 6.288229e-01, 6.288371e-01, 6.288514e-01, 6.288655e-01, 6.288798e-01, 6.288940e-01, 6.289083e-01, 6.289225e-01, 6.289367e-01, 6.289510e-01, 6.289652e-01, 6.289794e-01, 6.289937e-01, 6.290079e-01, 6.290222e-01, 6.290364e-01, 6.290506e-01, 6.290649e-01, 6.290791e-01, 6.290933e-01, 6.291075e-01, 6.291218e-01, 6.291360e-01, 6.291503e-01, 6.291645e-01, 6.291787e-01, 6.291929e-01, 6.292072e-01, 6.292214e-01, 6.292356e-01, 6.292499e-01, 6.292641e-01, 6.292783e-01, 6.292925e-01, 6.293068e-01, 6.293210e-01, 6.293352e-01, 6.293495e-01, 6.293637e-01, 6.293780e-01, 6.293922e-01, 6.294064e-01, 6.294206e-01, 6.294349e-01, 6.294491e-01, 6.294633e-01, 6.294776e-01, 6.294918e-01, 6.295061e-01, 6.295202e-01, 6.295345e-01, 6.295487e-01, 6.295630e-01, 6.295772e-01, 6.295914e-01, 6.296057e-01, 6.296199e-01, 6.296341e-01, 6.296483e-01, 6.296625e-01, 6.296768e-01, 6.296910e-01, 6.297053e-01, 6.297194e-01, 6.297337e-01, 6.297479e-01, 6.297622e-01, 6.297764e-01, 6.297906e-01, 6.298048e-01, 6.298190e-01, 6.298333e-01, 6.298475e-01, 6.298617e-01, 6.298760e-01, 6.298902e-01, 6.299044e-01, 6.299186e-01, 6.299328e-01, 6.299471e-01, 6.299613e-01, 6.299756e-01, 6.299898e-01, 6.300040e-01, 6.300182e-01, 6.300324e-01, 6.300467e-01, 6.300609e-01, 6.300751e-01, 6.300893e-01, 6.301035e-01, 6.301178e-01, 6.301320e-01, 6.301463e-01, 6.301605e-01, 6.301746e-01, 6.301889e-01, 6.302031e-01, 6.302174e-01, 6.302316e-01, 6.302457e-01, 6.302600e-01, 6.302742e-01, 6.302885e-01, 6.303027e-01, 6.303169e-01, 6.303311e-01, 6.303453e-01, 6.303596e-01, 6.303738e-01, 6.303880e-01, 6.304022e-01, 6.304165e-01, 6.304306e-01, 6.304449e-01, 6.304591e-01, 6.304734e-01, 6.304876e-01, 6.305017e-01, 6.305160e-01, 6.305302e-01, 6.305444e-01, 6.305587e-01, 6.305729e-01, 6.305871e-01, 6.306013e-01, 6.306155e-01, 6.306297e-01, 6.306440e-01, 6.306582e-01, 6.306724e-01, 6.306866e-01, 6.307008e-01, 6.307151e-01, 6.307293e-01, 6.307435e-01, 6.307577e-01, 6.307719e-01, 6.307861e-01, 6.308004e-01, 6.308146e-01, 6.308288e-01, 6.308430e-01, 6.308572e-01, 6.308714e-01, 6.308857e-01, 6.308998e-01, 6.309141e-01, 6.309283e-01, 6.309425e-01, 6.309568e-01, 6.309710e-01, 6.309851e-01, 6.309994e-01, 6.310136e-01, 6.310278e-01, 6.310420e-01, 6.310562e-01, 6.310705e-01, 6.310847e-01, 6.310989e-01, 6.311131e-01, 6.311273e-01, 6.311415e-01, 6.311557e-01, 6.311700e-01, 6.311842e-01, 6.311984e-01, 6.312126e-01, 6.312268e-01, 6.312410e-01, 6.312552e-01, 6.312695e-01, 6.312836e-01, 6.312979e-01, 6.313121e-01, 6.313263e-01, 6.313405e-01, 6.313547e-01, 6.313689e-01, 6.313831e-01, 6.313973e-01, 6.314116e-01, 6.314257e-01, 6.314400e-01, 6.314542e-01, 6.314684e-01, 6.314826e-01, 6.314968e-01, 6.315110e-01, 6.315252e-01, 6.315394e-01, 6.315536e-01, 6.315678e-01, 6.315821e-01, 6.315963e-01, 6.316105e-01, 6.316247e-01, 6.316389e-01, 6.316531e-01, 6.316673e-01, 6.316815e-01, 6.316957e-01, 6.317099e-01, 6.317242e-01, 6.317384e-01, 6.317526e-01, 6.317668e-01, 6.317810e-01, 6.317952e-01, 6.318094e-01, 6.318236e-01, 6.318378e-01, 6.318520e-01, 6.318662e-01, 6.318804e-01, 6.318946e-01, 6.319088e-01, 6.319230e-01, 6.319373e-01, 6.319515e-01, 6.319657e-01, 6.319799e-01, 6.319941e-01, 6.320083e-01, 6.320225e-01, 6.320367e-01, 6.320509e-01, 6.320651e-01, 6.320793e-01, 6.320935e-01, 6.321077e-01, 6.321219e-01, 6.321361e-01, 6.321503e-01, 6.321645e-01, 6.321787e-01, 6.321930e-01, 6.322072e-01, 6.322213e-01, 6.322356e-01, 6.322498e-01, 6.322640e-01, 6.322782e-01, 6.322924e-01, 6.323066e-01, 6.323208e-01, 6.323349e-01, 6.323491e-01, 6.323634e-01, 6.323776e-01, 6.323918e-01, 6.324059e-01, 6.324202e-01, 6.324344e-01, 6.324486e-01, 6.324627e-01, 6.324770e-01, 6.324912e-01, 6.325054e-01, 6.325195e-01, 6.325338e-01, 6.325480e-01, 6.325622e-01, 6.325764e-01, 6.325906e-01, 6.326048e-01, 6.326190e-01, 6.326331e-01, 6.326474e-01, 6.326616e-01, 6.326758e-01, 6.326900e-01, 6.327042e-01, 6.327184e-01, 6.327326e-01, 6.327468e-01, 6.327610e-01, 6.327752e-01, 6.327894e-01, 6.328036e-01, 6.328177e-01, 6.328319e-01, 6.328462e-01, 6.328604e-01, 6.328745e-01, 6.328887e-01, 6.329029e-01, 6.329171e-01, 6.329314e-01, 6.329455e-01, 6.329597e-01, 6.329739e-01, 6.329881e-01, 6.330023e-01, 6.330165e-01, 6.330307e-01, 6.330449e-01, 6.330591e-01, 6.330733e-01, 6.330875e-01, 6.331017e-01, 6.331159e-01, 6.331301e-01, 6.331443e-01, 6.331584e-01, 6.331726e-01, 6.331868e-01, 6.332010e-01, 6.332152e-01, 6.332294e-01, 6.332436e-01, 6.332578e-01, 6.332720e-01, 6.332862e-01, 6.333004e-01, 6.333145e-01, 6.333287e-01, 6.333429e-01, 6.333571e-01, 6.333714e-01, 6.333855e-01, 6.333997e-01, 6.334139e-01, 6.334281e-01, 6.334423e-01, 6.334565e-01, 6.334707e-01, 6.334848e-01, 6.334990e-01, 6.335132e-01, 6.335274e-01, 6.335416e-01, 6.335558e-01, 6.335700e-01, 6.335841e-01, 6.335984e-01, 6.336126e-01, 6.336268e-01, 6.336409e-01, 6.336551e-01, 6.336693e-01, 6.336835e-01, 6.336977e-01, 6.337119e-01, 6.337261e-01, 6.337402e-01, 6.337544e-01, 6.337686e-01, 6.337828e-01, 6.337970e-01, 6.338112e-01, 6.338254e-01, 6.338395e-01, 6.338537e-01, 6.338679e-01, 6.338821e-01, 6.338963e-01, 6.339105e-01, 6.339247e-01, 6.339389e-01, 6.339531e-01, 6.339673e-01, 6.339815e-01, 6.339956e-01, 6.340098e-01, 6.340240e-01, 6.340382e-01, 6.340523e-01, 6.340665e-01, 6.340807e-01, 6.340949e-01, 6.341091e-01, 6.341233e-01, 6.341375e-01, 6.341516e-01, 6.341658e-01, 6.341800e-01, 6.341942e-01, 6.342084e-01, 6.342226e-01, 6.342368e-01, 6.342509e-01, 6.342651e-01, 6.342793e-01, 6.342935e-01, 6.343077e-01, 6.343219e-01, 6.343361e-01, 6.343502e-01, 6.343644e-01, 6.343786e-01, 6.343927e-01, 6.344069e-01, 6.344211e-01, 6.344353e-01, 6.344495e-01, 6.344637e-01, 6.344779e-01, 6.344920e-01, 6.345062e-01, 6.345204e-01, 6.345345e-01, 6.345487e-01, 6.345629e-01, 6.345771e-01, 6.345913e-01, 6.346055e-01, 6.346197e-01, 6.346338e-01, 6.346480e-01, 6.346622e-01, 6.346763e-01, 6.346905e-01, 6.347047e-01, 6.347189e-01, 6.347331e-01, 6.347473e-01, 6.347615e-01, 6.347756e-01, 6.347898e-01, 6.348040e-01, 6.348181e-01, 6.348323e-01, 6.348465e-01, 6.348607e-01, 6.348749e-01, 6.348890e-01, 6.349032e-01, 6.349174e-01, 6.349316e-01, 6.349457e-01, 6.349599e-01, 6.349741e-01, 6.349882e-01, 6.350024e-01, 6.350166e-01, 6.350308e-01, 6.350449e-01, 6.350591e-01, 6.350733e-01, 6.350875e-01, 6.351017e-01, 6.351159e-01, 6.351300e-01, 6.351442e-01, 6.351584e-01, 6.351725e-01, 6.351867e-01, 6.352009e-01, 6.352150e-01, 6.352292e-01, 6.352434e-01, 6.352575e-01, 6.352717e-01, 6.352859e-01, 6.353001e-01, 6.353143e-01, 6.353284e-01, 6.353426e-01, 6.353568e-01, 6.353710e-01, 6.353852e-01, 6.353993e-01, 6.354135e-01, 6.354277e-01, 6.354418e-01, 6.354560e-01, 6.354702e-01, 6.354843e-01, 6.354985e-01, 6.355127e-01, 6.355268e-01, 6.355410e-01, 6.355551e-01, 6.355693e-01, 6.355835e-01, 6.355977e-01, 6.356118e-01, 6.356260e-01, 6.356402e-01, 6.356544e-01, 6.356685e-01, 6.356827e-01, 6.356968e-01, 6.357110e-01, 6.357252e-01, 6.357394e-01, 6.357536e-01, 6.357677e-01, 6.357819e-01, 6.357960e-01, 6.358103e-01, 6.358244e-01, 6.358386e-01, 6.358527e-01, 6.358669e-01, 6.358811e-01, 6.358953e-01, 6.359094e-01, 6.359236e-01, 6.359377e-01, 6.359519e-01, 6.359661e-01, 6.359802e-01, 6.359944e-01, 6.360085e-01, 6.360227e-01, 6.360369e-01, 6.360511e-01, 6.360652e-01, 6.360794e-01, 6.360935e-01, 6.361077e-01, 6.361219e-01, 6.361361e-01, 6.361502e-01, 6.361644e-01, 6.361786e-01, 6.361927e-01, 6.362069e-01, 6.362210e-01, 6.362352e-01, 6.362494e-01, 6.362635e-01, 6.362777e-01, 6.362918e-01, 6.363060e-01, 6.363202e-01, 6.363343e-01, 6.363485e-01, 6.363626e-01, 6.363768e-01, 6.363910e-01, 6.364051e-01, 6.364193e-01, 6.364334e-01, 6.364476e-01, 6.364618e-01, 6.364759e-01, 6.364900e-01, 6.365043e-01, 6.365184e-01, 6.365326e-01, 6.365467e-01, 6.365609e-01, 6.365751e-01, 6.365892e-01, 6.366034e-01, 6.366175e-01, 6.366317e-01, 6.366459e-01, 6.366600e-01, 6.366742e-01, 6.366884e-01, 6.367025e-01, 6.367167e-01, 6.367308e-01, 6.367450e-01, 6.367592e-01, 6.367733e-01, 6.367874e-01, 6.368016e-01, 6.368158e-01, 6.368299e-01, 6.368440e-01, 6.368582e-01, 6.368724e-01, 6.368865e-01, 6.369007e-01, 6.369148e-01, 6.369290e-01, 6.369432e-01, 6.369573e-01, 6.369715e-01, 6.369857e-01, 6.369998e-01, 6.370140e-01, 6.370281e-01, 6.370423e-01, 6.370564e-01, 6.370705e-01, 6.370847e-01, 6.370989e-01, 6.371130e-01, 6.371272e-01, 6.371413e-01, 6.371555e-01, 6.371697e-01, 6.371838e-01, 6.371980e-01, 6.372122e-01, 6.372263e-01, 6.372404e-01, 6.372546e-01, 6.372687e-01, 6.372828e-01, 6.372970e-01, 6.373112e-01, 6.373253e-01, 6.373395e-01, 6.373537e-01, 6.373678e-01, 6.373820e-01, 6.373961e-01, 6.374103e-01, 6.374244e-01, 6.374385e-01, 6.374527e-01, 6.374668e-01, 6.374810e-01, 6.374952e-01, 6.375093e-01, 6.375235e-01, 6.375376e-01, 6.375518e-01, 6.375659e-01, 6.375800e-01, 6.375942e-01, 6.376084e-01, 6.376225e-01, 6.376367e-01, 6.376508e-01, 6.376650e-01, 6.376791e-01, 6.376933e-01, 6.377074e-01, 6.377215e-01, 6.377357e-01, 6.377499e-01, 6.377640e-01, 6.377782e-01, 6.377923e-01, 6.378065e-01, 6.378206e-01, 6.378348e-01, 6.378489e-01, 6.378630e-01, 6.378772e-01, 6.378914e-01, 6.379055e-01, 6.379197e-01, 6.379338e-01, 6.379479e-01, 6.379621e-01, 6.379762e-01, 6.379904e-01, 6.380045e-01, 6.380187e-01, 6.380328e-01, 6.380469e-01, 6.380611e-01, 6.380752e-01, 6.380894e-01, 6.381035e-01, 6.381177e-01, 6.381318e-01, 6.381460e-01, 6.381601e-01, 6.381742e-01, 6.381884e-01, 6.382025e-01, 6.382167e-01, 6.382309e-01, 6.382450e-01, 6.382591e-01, 6.382733e-01, 6.382874e-01, 6.383016e-01, 6.383157e-01, 6.383299e-01, 6.383440e-01, 6.383582e-01, 6.383722e-01, 6.383864e-01, 6.384006e-01, 6.384147e-01, 6.384288e-01, 6.384430e-01, 6.384571e-01, 6.384712e-01, 6.384854e-01, 6.384996e-01, 6.385137e-01, 6.385278e-01, 6.385419e-01, 6.385561e-01, 6.385702e-01, 6.385844e-01, 6.385986e-01, 6.386127e-01, 6.386268e-01, 6.386410e-01, 6.386551e-01, 6.386693e-01, 6.386834e-01, 6.386975e-01, 6.387116e-01, 6.387258e-01, 6.387399e-01, 6.387541e-01, 6.387682e-01, 6.387823e-01, 6.387965e-01, 6.388106e-01, 6.388248e-01, 6.388389e-01, 6.388530e-01, 6.388672e-01, 6.388813e-01, 6.388955e-01, 6.389096e-01, 6.389237e-01, 6.389379e-01, 6.389520e-01, 6.389661e-01, 6.389803e-01, 6.389944e-01, 6.390085e-01, 6.390227e-01, 6.390368e-01, 6.390510e-01, 6.390651e-01, 6.390792e-01, 6.390934e-01, 6.391075e-01, 6.391217e-01, 6.391358e-01, 6.391499e-01, 6.391640e-01, 6.391782e-01, 6.391923e-01, 6.392065e-01, 6.392205e-01, 6.392347e-01, 6.392488e-01, 6.392630e-01, 6.392771e-01, 6.392912e-01, 6.393054e-01, 6.393195e-01, 6.393337e-01, 6.393478e-01, 6.393619e-01, 6.393760e-01, 6.393902e-01, 6.394043e-01, 6.394184e-01, 6.394325e-01, 6.394467e-01, 6.394608e-01, 6.394750e-01, 6.394891e-01, 6.395032e-01, 6.395174e-01, 6.395315e-01, 6.395456e-01, 6.395597e-01, 6.395739e-01, 6.395880e-01, 6.396021e-01, 6.396163e-01, 6.396304e-01, 6.396446e-01, 6.396587e-01, 6.396728e-01, 6.396869e-01, 6.397010e-01, 6.397152e-01, 6.397293e-01, 6.397434e-01, 6.397576e-01, 6.397717e-01, 6.397858e-01, 6.398000e-01, 6.398141e-01, 6.398282e-01, 6.398423e-01, 6.398565e-01, 6.398706e-01, 6.398847e-01, 6.398988e-01, 6.399130e-01, 6.399271e-01, 6.399413e-01, 6.399553e-01, 6.399695e-01, 6.399836e-01, 6.399977e-01, 6.400118e-01, 6.400260e-01, 6.400402e-01, 6.400542e-01, 6.400684e-01, 6.400825e-01, 6.400967e-01, 6.401107e-01, 6.401249e-01, 6.401390e-01, 6.401531e-01, 6.401672e-01, 6.401814e-01, 6.401955e-01, 6.402096e-01, 6.402237e-01, 6.402379e-01, 6.402520e-01, 6.402661e-01, 6.402802e-01, 6.402944e-01, 6.403085e-01, 6.403226e-01, 6.403368e-01, 6.403509e-01, 6.403649e-01, 6.403791e-01, 6.403932e-01, 6.404074e-01, 6.404215e-01, 6.404356e-01, 6.404497e-01, 6.404639e-01, 6.404780e-01, 6.404921e-01, 6.405062e-01, 6.405203e-01, 6.405345e-01, 6.405486e-01, 6.405627e-01, 6.405768e-01, 6.405909e-01, 6.406050e-01, 6.406192e-01, 6.406333e-01, 6.406474e-01, 6.406615e-01, 6.406757e-01, 6.406898e-01, 6.407039e-01, 6.407180e-01, 6.407322e-01, 6.407462e-01, 6.407604e-01, 6.407745e-01, 6.407886e-01, 6.408027e-01, 6.408169e-01, 6.408309e-01, 6.408451e-01, 6.408592e-01, 6.408733e-01, 6.408874e-01, 6.409016e-01, 6.409156e-01, 6.409298e-01, 6.409439e-01, 6.409580e-01, 6.409721e-01, 6.409863e-01, 6.410004e-01, 6.410145e-01, 6.410286e-01, 6.410427e-01, 6.410568e-01, 6.410710e-01, 6.410851e-01, 6.410992e-01, 6.411133e-01, 6.411274e-01, 6.411415e-01, 6.411557e-01, 6.411698e-01, 6.411839e-01, 6.411980e-01, 6.412121e-01, 6.412262e-01, 6.412403e-01, 6.412545e-01, 6.412686e-01, 6.412827e-01, 6.412968e-01, 6.413109e-01, 6.413250e-01, 6.413391e-01, 6.413532e-01, 6.413674e-01, 6.413815e-01, 6.413956e-01, 6.414097e-01, 6.414238e-01, 6.414379e-01, 6.414520e-01, 6.414661e-01, 6.414803e-01, 6.414944e-01, 6.415085e-01, 6.415226e-01, 6.415367e-01, 6.415508e-01, 6.415650e-01, 6.415790e-01, 6.415932e-01, 6.416073e-01, 6.416214e-01, 6.416355e-01, 6.416496e-01, 6.416637e-01, 6.416778e-01, 6.416919e-01, 6.417060e-01, 6.417202e-01, 6.417342e-01, 6.417484e-01, 6.417624e-01, 6.417766e-01, 6.417907e-01, 6.418048e-01, 6.418189e-01, 6.418330e-01, 6.418471e-01, 6.418612e-01, 6.418754e-01, 6.418895e-01, 6.419036e-01, 6.419176e-01, 6.419318e-01, 6.419459e-01, 6.419600e-01, 6.419741e-01, 6.419882e-01, 6.420023e-01, 6.420164e-01, 6.420305e-01, 6.420447e-01, 6.420587e-01, 6.420729e-01, 6.420869e-01, 6.421010e-01, 6.421152e-01, 6.421292e-01, 6.421434e-01, 6.421575e-01, 6.421716e-01, 6.421857e-01, 6.421998e-01, 6.422139e-01, 6.422280e-01, 6.422421e-01, 6.422562e-01, 6.422703e-01, 6.422845e-01, 6.422985e-01, 6.423126e-01, 6.423267e-01, 6.423408e-01, 6.423550e-01, 6.423690e-01, 6.423832e-01, 6.423972e-01, 6.424114e-01, 6.424255e-01, 6.424395e-01, 6.424537e-01, 6.424677e-01, 6.424819e-01, 6.424960e-01, 6.425101e-01, 6.425242e-01, 6.425382e-01, 6.425524e-01, 6.425665e-01, 6.425806e-01, 6.425947e-01, 6.426088e-01, 6.426229e-01, 6.426370e-01, 6.426511e-01, 6.426652e-01, 6.426793e-01, 6.426934e-01, 6.427075e-01, 6.427216e-01, 6.427357e-01, 6.427498e-01, 6.427639e-01, 6.427780e-01, 6.427921e-01, 6.428062e-01, 6.428203e-01, 6.428344e-01, 6.428485e-01, 6.428626e-01, 6.428767e-01, 6.428908e-01, 6.429049e-01, 6.429189e-01, 6.429331e-01, 6.429471e-01, 6.429613e-01, 6.429754e-01, 6.429895e-01, 6.430036e-01, 6.430176e-01, 6.430317e-01, 6.430458e-01, 6.430600e-01, 6.430740e-01, 6.430882e-01, 6.431022e-01, 6.431164e-01, 6.431304e-01, 6.431445e-01, 6.431586e-01, 6.431727e-01, 6.431868e-01, 6.432009e-01, 6.432150e-01, 6.432291e-01, 6.432432e-01, 6.432573e-01, 6.432714e-01, 6.432855e-01, 6.432996e-01, 6.433136e-01, 6.433278e-01, 6.433418e-01, 6.433560e-01, 6.433700e-01, 6.433841e-01, 6.433982e-01, 6.434124e-01, 6.434264e-01, 6.434405e-01, 6.434546e-01, 6.434687e-01, 6.434828e-01, 6.434969e-01, 6.435109e-01, 6.435251e-01, 6.435392e-01, 6.435533e-01, 6.435673e-01, 6.435814e-01, 6.435955e-01, 6.436096e-01, 6.436237e-01, 6.436378e-01, 6.436519e-01, 6.436660e-01, 6.436801e-01, 6.436942e-01, 6.437082e-01, 6.437224e-01, 6.437364e-01, 6.437505e-01, 6.437646e-01, 6.437787e-01, 6.437928e-01, 6.438069e-01, 6.438209e-01, 6.438351e-01, 6.438491e-01, 6.438632e-01, 6.438773e-01, 6.438914e-01, 6.439055e-01, 6.439196e-01, 6.439337e-01, 6.439478e-01, 6.439618e-01, 6.439759e-01, 6.439900e-01, 6.440041e-01, 6.440182e-01, 6.440323e-01, 6.440464e-01, 6.440604e-01, 6.440746e-01, 6.440886e-01, 6.441027e-01, 6.441168e-01, 6.441309e-01, 6.441450e-01, 6.441591e-01, 6.441731e-01, 6.441873e-01, 6.442013e-01, 6.442154e-01, 6.442295e-01, 6.442436e-01, 6.442577e-01, 6.442717e-01, 6.442859e-01, 6.442999e-01, 6.443140e-01, 6.443281e-01, 6.443422e-01, 6.443563e-01, 6.443703e-01, 6.443844e-01, 6.443985e-01, 6.444126e-01, 6.444267e-01, 6.444408e-01, 6.444548e-01, 6.444689e-01, 6.444830e-01, 6.444971e-01, 6.445112e-01, 6.445252e-01, 6.445394e-01, 6.445534e-01, 6.445675e-01, 6.445816e-01, 6.445957e-01, 6.446097e-01, 6.446238e-01, 6.446379e-01, 6.446520e-01, 6.446661e-01, 6.446801e-01, 6.446943e-01, 6.447083e-01, 6.447224e-01, 6.447365e-01, 6.447505e-01, 6.447647e-01, 6.447787e-01, 6.447928e-01, 6.448069e-01, 6.448209e-01, 6.448350e-01, 6.448491e-01, 6.448632e-01, 6.448773e-01, 6.448913e-01, 6.449054e-01, 6.449195e-01, 6.449336e-01, 6.449476e-01, 6.449617e-01, 6.449758e-01, 6.449899e-01, 6.450040e-01, 6.450180e-01, 6.450321e-01, 6.450462e-01, 6.450603e-01, 6.450744e-01, 6.450884e-01, 6.451025e-01, 6.451166e-01, 6.451306e-01, 6.451448e-01, 6.451588e-01, 6.451729e-01, 6.451870e-01, 6.452010e-01, 6.452151e-01, 6.452292e-01, 6.452433e-01, 6.452574e-01, 6.452714e-01, 6.452855e-01, 6.452996e-01, 6.453136e-01, 6.453277e-01, 6.453418e-01, 6.453559e-01, 6.453699e-01, 6.453840e-01, 6.453981e-01, 6.454121e-01, 6.454263e-01, 6.454403e-01, 6.454543e-01, 6.454685e-01, 6.454825e-01, 6.454966e-01, 6.455107e-01, 6.455247e-01, 6.455388e-01, 6.455529e-01, 6.455670e-01, 6.455810e-01, 6.455951e-01, 6.456092e-01, 6.456233e-01, 6.456373e-01, 6.456514e-01, 6.456655e-01, 6.456795e-01, 6.456936e-01, 6.457077e-01, 6.457217e-01, 6.457358e-01, 6.457499e-01, 6.457640e-01, 6.457781e-01, 6.457921e-01, 6.458061e-01, 6.458202e-01, 6.458343e-01, 6.458484e-01, 6.458625e-01, 6.458765e-01, 6.458906e-01, 6.459047e-01, 6.459187e-01, 6.459328e-01, 6.459469e-01, 6.459609e-01, 6.459750e-01, 6.459891e-01, 6.460031e-01, 6.460172e-01, 6.460313e-01, 6.460453e-01, 6.460594e-01, 6.460735e-01, 6.460875e-01, 6.461017e-01, 6.461157e-01, 6.461297e-01, 6.461438e-01, 6.461579e-01, 6.461719e-01, 6.461861e-01, 6.462001e-01, 6.462141e-01, 6.462282e-01, 6.462423e-01, 6.462563e-01, 6.462704e-01, 6.462845e-01, 6.462985e-01, 6.463126e-01, 6.463267e-01, 6.463407e-01, 6.463548e-01, 6.463689e-01, 6.463829e-01, 6.463969e-01, 6.464111e-01, 6.464251e-01, 6.464392e-01, 6.464533e-01, 6.464673e-01, 6.464813e-01, 6.464954e-01, 6.465095e-01, 6.465235e-01, 6.465376e-01, 6.465517e-01, 6.465657e-01, 6.465798e-01, 6.465939e-01, 6.466079e-01, 6.466220e-01, 6.466361e-01, 6.466501e-01, 6.466642e-01, 6.466783e-01, 6.466923e-01, 6.467063e-01, 6.467204e-01, 6.467345e-01, 6.467485e-01, 6.467626e-01, 6.467767e-01, 6.467907e-01, 6.468047e-01, 6.468188e-01, 6.468329e-01, 6.468470e-01, 6.468610e-01, 6.468751e-01, 6.468892e-01, 6.469032e-01, 6.469173e-01, 6.469313e-01, 6.469454e-01, 6.469594e-01, 6.469735e-01, 6.469876e-01, 6.470016e-01, 6.470157e-01, 6.470298e-01, 6.470438e-01, 6.470578e-01, 6.470719e-01, 6.470860e-01, 6.471000e-01, 6.471141e-01, 6.471281e-01, 6.471422e-01, 6.471562e-01, 6.471703e-01, 6.471844e-01, 6.471984e-01, 6.472124e-01, 6.472265e-01, 6.472406e-01, 6.472546e-01, 6.472687e-01, 6.472828e-01, 6.472968e-01, 6.473109e-01, 6.473249e-01, 6.473389e-01, 6.473530e-01, 6.473671e-01, 6.473811e-01, 6.473952e-01, 6.474093e-01, 6.474233e-01, 6.474373e-01, 6.474514e-01, 6.474655e-01, 6.474795e-01, 6.474935e-01, 6.475076e-01, 6.475216e-01, 6.475357e-01, 6.475497e-01, 6.475638e-01, 6.475779e-01, 6.475919e-01, 6.476060e-01, 6.476200e-01, 6.476341e-01, 6.476482e-01, 6.476622e-01, 6.476762e-01, 6.476903e-01, 6.477043e-01, 6.477184e-01, 6.477324e-01, 6.477465e-01, 6.477605e-01, 6.477746e-01, 6.477886e-01, 6.478027e-01, 6.478168e-01, 6.478308e-01, 6.478449e-01, 6.478589e-01, 6.478730e-01, 6.478870e-01, 6.479011e-01, 6.479151e-01, 6.479291e-01, 6.479432e-01, 6.479572e-01, 6.479713e-01, 6.479853e-01, 6.479993e-01, 6.480134e-01, 6.480275e-01, 6.480415e-01, 6.480556e-01, 6.480696e-01, 6.480837e-01, 6.480978e-01, 6.481118e-01, 6.481258e-01, 6.481399e-01, 6.481539e-01, 6.481680e-01, 6.481820e-01, 6.481961e-01, 6.482101e-01, 6.482242e-01, 6.482382e-01, 6.482522e-01, 6.482663e-01, 6.482803e-01, 6.482944e-01, 6.483084e-01, 6.483225e-01, 6.483365e-01, 6.483505e-01, 6.483646e-01, 6.483786e-01, 6.483927e-01, 6.484067e-01, 6.484208e-01, 6.484348e-01, 6.484489e-01, 6.484629e-01, 6.484770e-01, 6.484910e-01, 6.485050e-01, 6.485191e-01, 6.485331e-01, 6.485472e-01, 6.485612e-01, 6.485752e-01, 6.485893e-01, 6.486033e-01, 6.486174e-01, 6.486315e-01, 6.486455e-01, 6.486595e-01, 6.486735e-01, 6.486876e-01, 6.487017e-01, 6.487157e-01, 6.487297e-01, 6.487437e-01, 6.487578e-01, 6.487718e-01, 6.487859e-01, 6.488000e-01, 6.488140e-01, 6.488280e-01, 6.488420e-01, 6.488561e-01, 6.488701e-01, 6.488842e-01, 6.488982e-01, 6.489123e-01, 6.489263e-01, 6.489403e-01, 6.489543e-01, 6.489684e-01, 6.489825e-01, 6.489965e-01, 6.490105e-01, 6.490245e-01, 6.490386e-01, 6.490526e-01, 6.490667e-01, 6.490807e-01, 6.490948e-01, 6.491088e-01, 6.491228e-01, 6.491368e-01, 6.491509e-01, 6.491649e-01, 6.491790e-01, 6.491930e-01, 6.492071e-01, 6.492211e-01, 6.492351e-01, 6.492492e-01, 6.492632e-01, 6.492773e-01, 6.492913e-01, 6.493053e-01, 6.493194e-01, 6.493334e-01, 6.493474e-01, 6.493614e-01, 6.493755e-01, 6.493895e-01, 6.494036e-01, 6.494176e-01, 6.494316e-01, 6.494457e-01, 6.494597e-01, 6.494737e-01, 6.494877e-01, 6.495018e-01, 6.495158e-01, 6.495298e-01, 6.495439e-01, 6.495579e-01, 6.495720e-01, 6.495860e-01, 6.496000e-01, 6.496141e-01, 6.496281e-01, 6.496421e-01, 6.496562e-01, 6.496702e-01, 6.496842e-01, 6.496983e-01, 6.497123e-01, 6.497263e-01, 6.497403e-01, 6.497543e-01, 6.497684e-01, 6.497824e-01, 6.497965e-01, 6.498105e-01, 6.498246e-01, 6.498386e-01, 6.498526e-01, 6.498666e-01, 6.498806e-01, 6.498947e-01, 6.499087e-01, 6.499227e-01, 6.499367e-01, 6.499508e-01, 6.499648e-01, 6.499788e-01, 6.499929e-01, 6.500069e-01, 6.500210e-01, 6.500350e-01, 6.500490e-01, 6.500630e-01, 6.500770e-01, 6.500911e-01, 6.501051e-01, 6.501191e-01, 6.501331e-01, 6.501472e-01, 6.501612e-01, 6.501753e-01, 6.501893e-01, 6.502033e-01, 6.502174e-01, 6.502314e-01, 6.502454e-01, 6.502594e-01, 6.502734e-01, 6.502874e-01, 6.503015e-01, 6.503155e-01, 6.503296e-01, 6.503436e-01, 6.503576e-01, 6.503716e-01, 6.503856e-01, 6.503997e-01, 6.504137e-01, 6.504277e-01, 6.504418e-01, 6.504558e-01, 6.504698e-01, 6.504838e-01, 6.504979e-01, 6.505119e-01, 6.505259e-01, 6.505399e-01, 6.505539e-01, 6.505679e-01, 6.505820e-01, 6.505960e-01, 6.506100e-01, 6.506240e-01, 6.506381e-01, 6.506521e-01, 6.506661e-01, 6.506801e-01, 6.506942e-01, 6.507082e-01, 6.507222e-01, 6.507362e-01, 6.507503e-01, 6.507643e-01, 6.507783e-01, 6.507923e-01, 6.508064e-01, 6.508204e-01, 6.508344e-01, 6.508484e-01, 6.508624e-01, 6.508764e-01, 6.508905e-01, 6.509045e-01, 6.509185e-01, 6.509326e-01, 6.509466e-01, 6.509606e-01, 6.509746e-01, 6.509886e-01, 6.510026e-01, 6.510167e-01, 6.510307e-01, 6.510447e-01, 6.510587e-01, 6.510727e-01, 6.510867e-01, 6.511008e-01, 6.511148e-01, 6.511288e-01, 6.511428e-01, 6.511568e-01, 6.511708e-01, 6.511849e-01, 6.511989e-01, 6.512129e-01, 6.512269e-01, 6.512409e-01, 6.512550e-01, 6.512690e-01, 6.512830e-01, 6.512970e-01, 6.513110e-01, 6.513250e-01, 6.513391e-01, 6.513531e-01, 6.513671e-01, 6.513811e-01, 6.513951e-01, 6.514091e-01, 6.514232e-01, 6.514372e-01, 6.514512e-01, 6.514652e-01, 6.514792e-01, 6.514932e-01, 6.515072e-01, 6.515212e-01, 6.515353e-01, 6.515493e-01, 6.515633e-01, 6.515773e-01, 6.515913e-01, 6.516053e-01, 6.516194e-01, 6.516334e-01, 6.516474e-01, 6.516614e-01, 6.516753e-01, 6.516894e-01, 6.517034e-01, 6.517174e-01, 6.517314e-01, 6.517454e-01, 6.517594e-01, 6.517735e-01, 6.517875e-01, 6.518015e-01, 6.518155e-01, 6.518295e-01, 6.518435e-01, 6.518576e-01, 6.518716e-01, 6.518856e-01, 6.518996e-01, 6.519136e-01, 6.519276e-01, 6.519416e-01, 6.519556e-01, 6.519696e-01, 6.519836e-01, 6.519977e-01, 6.520116e-01, 6.520256e-01, 6.520396e-01, 6.520537e-01, 6.520677e-01, 6.520817e-01, 6.520957e-01, 6.521097e-01, 6.521237e-01, 6.521378e-01, 6.521518e-01, 6.521657e-01, 6.521798e-01, 6.521938e-01, 6.522078e-01, 6.522217e-01, 6.522357e-01, 6.522498e-01, 6.522638e-01, 6.522778e-01, 6.522918e-01, 6.523058e-01, 6.523198e-01, 6.523339e-01, 6.523478e-01, 6.523618e-01, 6.523759e-01, 6.523899e-01, 6.524038e-01, 6.524178e-01, 6.524319e-01, 6.524459e-01, 6.524599e-01, 6.524739e-01, 6.524879e-01, 6.525019e-01, 6.525159e-01, 6.525299e-01, 6.525439e-01, 6.525579e-01, 6.525719e-01, 6.525859e-01, 6.525999e-01, 6.526139e-01, 6.526279e-01, 6.526420e-01, 6.526559e-01, 6.526700e-01, 6.526840e-01, 6.526979e-01, 6.527119e-01, 6.527260e-01, 6.527399e-01, 6.527539e-01, 6.527680e-01, 6.527820e-01, 6.527960e-01, 6.528100e-01, 6.528240e-01, 6.528380e-01, 6.528520e-01, 6.528659e-01, 6.528800e-01, 6.528940e-01, 6.529080e-01, 6.529220e-01, 6.529360e-01, 6.529500e-01, 6.529640e-01, 6.529779e-01, 6.529920e-01, 6.530060e-01, 6.530200e-01, 6.530340e-01, 6.530480e-01, 6.530620e-01, 6.530760e-01, 6.530899e-01, 6.531040e-01, 6.531180e-01, 6.531320e-01, 6.531460e-01, 6.531600e-01, 6.531740e-01, 6.531879e-01, 6.532020e-01, 6.532159e-01, 6.532300e-01, 6.532440e-01, 6.532580e-01, 6.532719e-01, 6.532859e-01, 6.533000e-01, 6.533139e-01, 6.533279e-01, 6.533419e-01, 6.533560e-01, 6.533699e-01, 6.533839e-01, 6.533979e-01, 6.534119e-01, 6.534259e-01, 6.534399e-01, 6.534539e-01, 6.534679e-01, 6.534819e-01, 6.534959e-01, 6.535099e-01, 6.535239e-01, 6.535379e-01, 6.535519e-01, 6.535658e-01, 6.535799e-01, 6.535938e-01, 6.536078e-01, 6.536219e-01, 6.536359e-01, 6.536498e-01, 6.536638e-01, 6.536778e-01, 6.536918e-01, 6.537058e-01, 6.537198e-01, 6.537338e-01, 6.537477e-01, 6.537618e-01, 6.537758e-01, 6.537898e-01, 6.538038e-01, 6.538177e-01, 6.538317e-01, 6.538457e-01, 6.538597e-01, 6.538737e-01, 6.538877e-01, 6.539017e-01, 6.539156e-01, 6.539297e-01, 6.539437e-01, 6.539577e-01, 6.539716e-01, 6.539856e-01, 6.539996e-01, 6.540136e-01, 6.540276e-01, 6.540416e-01, 6.540556e-01, 6.540696e-01, 6.540835e-01, 6.540976e-01, 6.541116e-01, 6.541255e-01, 6.541395e-01, 6.541535e-01, 6.541675e-01, 6.541815e-01, 6.541955e-01, 6.542094e-01, 6.542234e-01, 6.542374e-01, 6.542514e-01, 6.542654e-01, 6.542794e-01, 6.542934e-01, 6.543074e-01, 6.543214e-01, 6.543353e-01, 6.543493e-01, 6.543633e-01, 6.543773e-01, 6.543913e-01, 6.544053e-01, 6.544192e-01, 6.544333e-01, 6.544472e-01, 6.544612e-01, 6.544752e-01, 6.544892e-01, 6.545032e-01, 6.545172e-01, 6.545311e-01, 6.545451e-01, 6.545591e-01, 6.545731e-01, 6.545871e-01, 6.546010e-01, 6.546150e-01, 6.546291e-01, 6.546430e-01, 6.546570e-01, 6.546710e-01, 6.546850e-01, 6.546990e-01, 6.547129e-01, 6.547269e-01, 6.547409e-01, 6.547549e-01, 6.547689e-01, 6.547828e-01, 6.547968e-01, 6.548108e-01, 6.548248e-01, 6.548388e-01, 6.548527e-01, 6.548667e-01, 6.548808e-01, 6.548947e-01, 6.549087e-01, 6.549227e-01, 6.549366e-01, 6.549507e-01, 6.549646e-01, 6.549786e-01, 6.549926e-01, 6.550065e-01, 6.550205e-01, 6.550345e-01, 6.550485e-01, 6.550625e-01, 6.550764e-01, 6.550905e-01, 6.551044e-01, 6.551183e-01, 6.551324e-01, 6.551464e-01, 6.551604e-01, 6.551743e-01, 6.551883e-01, 6.552023e-01, 6.552162e-01, 6.552302e-01, 6.552442e-01, 6.552582e-01, 6.552722e-01, 6.552861e-01, 6.553001e-01, 6.553141e-01, 6.553281e-01, 6.553420e-01, 6.553560e-01, 6.553700e-01, 6.553839e-01, 6.553980e-01, 6.554119e-01, 6.554259e-01, 6.554399e-01, 6.554539e-01, 6.554679e-01, 6.554818e-01, 6.554958e-01, 6.555098e-01, 6.555237e-01, 6.555377e-01, 6.555517e-01, 6.555657e-01, 6.555796e-01, 6.555936e-01, 6.556076e-01, 6.556215e-01, 6.556355e-01, 6.556495e-01, 6.556635e-01, 6.556774e-01, 6.556914e-01, 6.557054e-01, 6.557193e-01, 6.557333e-01, 6.557473e-01, 6.557613e-01, 6.557752e-01, 6.557893e-01, 6.558032e-01, 6.558172e-01, 6.558312e-01, 6.558451e-01, 6.558591e-01, 6.558731e-01, 6.558871e-01, 6.559010e-01, 6.559150e-01, 6.559290e-01, 6.559429e-01, 6.559569e-01, 6.559709e-01, 6.559849e-01, 6.559988e-01, 6.560128e-01, 6.560267e-01, 6.560407e-01, 6.560547e-01, 6.560687e-01, 6.560826e-01, 6.560966e-01, 6.561106e-01, 6.561245e-01, 6.561385e-01, 6.561525e-01, 6.561664e-01, 6.561804e-01, 6.561944e-01, 6.562083e-01, 6.562223e-01, 6.562363e-01, 6.562503e-01, 6.562642e-01, 6.562782e-01, 6.562921e-01, 6.563061e-01, 6.563201e-01, 6.563341e-01, 6.563480e-01, 6.563620e-01, 6.563760e-01, 6.563900e-01, 6.564039e-01, 6.564179e-01, 6.564319e-01, 6.564458e-01, 6.564598e-01, 6.564738e-01, 6.564877e-01, 6.565017e-01, 6.565157e-01, 6.565296e-01, 6.565436e-01, 6.565575e-01, 6.565715e-01, 6.565855e-01, 6.565995e-01, 6.566133e-01, 6.566274e-01, 6.566413e-01, 6.566553e-01, 6.566693e-01, 6.566832e-01, 6.566972e-01, 6.567112e-01, 6.567251e-01, 6.567391e-01, 6.567530e-01, 6.567670e-01, 6.567810e-01, 6.567950e-01, 6.568089e-01, 6.568229e-01, 6.568368e-01, 6.568508e-01, 6.568647e-01, 6.568787e-01, 6.568927e-01, 6.569066e-01, 6.569206e-01, 6.569346e-01, 6.569485e-01, 6.569625e-01, 6.569765e-01, 6.569904e-01, 6.570044e-01, 6.570183e-01, 6.570323e-01, 6.570463e-01, 6.570602e-01, 6.570742e-01, 6.570882e-01, 6.571020e-01, 6.571161e-01, 6.571300e-01, 6.571440e-01, 6.571579e-01, 6.571719e-01, 6.571858e-01, 6.571998e-01, 6.572137e-01, 6.572277e-01, 6.572417e-01, 6.572556e-01, 6.572696e-01, 6.572835e-01, 6.572976e-01, 6.573114e-01, 6.573254e-01, 6.573394e-01, 6.573533e-01, 6.573673e-01, 6.573812e-01, 6.573952e-01, 6.574092e-01, 6.574231e-01, 6.574371e-01, 6.574510e-01, 6.574650e-01, 6.574790e-01, 6.574929e-01, 6.575069e-01, 6.575208e-01, 6.575348e-01, 6.575487e-01, 6.575627e-01, 6.575767e-01, 6.575906e-01, 6.576046e-01, 6.576185e-01, 6.576325e-01, 6.576464e-01, 6.576604e-01, 6.576743e-01, 6.576883e-01, 6.577023e-01, 6.577162e-01, 6.577302e-01, 6.577441e-01, 6.577581e-01, 6.577720e-01, 6.577860e-01, 6.577999e-01, 6.578138e-01, 6.578279e-01, 6.578417e-01, 6.578557e-01, 6.578697e-01, 6.578836e-01, 6.578976e-01, 6.579115e-01, 6.579255e-01, 6.579394e-01, 6.579534e-01, 6.579673e-01, 6.579813e-01, 6.579953e-01, 6.580092e-01, 6.580232e-01, 6.580371e-01, 6.580511e-01, 6.580650e-01, 6.580790e-01, 6.580929e-01, 6.581069e-01, 6.581208e-01, 6.581348e-01, 6.581487e-01, 6.581627e-01, 6.581766e-01, 6.581905e-01, 6.582045e-01, 6.582184e-01, 6.582325e-01, 6.582463e-01, 6.582603e-01, 6.582742e-01, 6.582882e-01, 6.583022e-01, 6.583161e-01, 6.583301e-01, 6.583440e-01, 6.583579e-01, 6.583719e-01, 6.583858e-01, 6.583998e-01, 6.584137e-01, 6.584277e-01, 6.584417e-01, 6.584556e-01, 6.584695e-01, 6.584834e-01, 6.584974e-01, 6.585114e-01, 6.585253e-01, 6.585392e-01, 6.585532e-01, 6.585671e-01, 6.585811e-01, 6.585950e-01, 6.586090e-01, 6.586229e-01, 6.586369e-01, 6.586508e-01, 6.586648e-01, 6.586787e-01, 6.586927e-01, 6.587066e-01, 6.587206e-01, 6.587345e-01, 6.587484e-01, 6.587624e-01, 6.587763e-01, 6.587902e-01, 6.588042e-01, 6.588181e-01, 6.588321e-01, 6.588461e-01, 6.588600e-01, 6.588739e-01, 6.588879e-01, 6.589018e-01, 6.589158e-01, 6.589297e-01, 6.589436e-01, 6.589576e-01, 6.589715e-01, 6.589854e-01, 6.589994e-01, 6.590133e-01, 6.590273e-01, 6.590412e-01, 6.590552e-01, 6.590691e-01, 6.590831e-01, 6.590970e-01, 6.591110e-01, 6.591249e-01, 6.591388e-01, 6.591527e-01, 6.591667e-01, 6.591806e-01, 6.591946e-01, 6.592085e-01, 6.592224e-01, 6.592364e-01, 6.592503e-01, 6.592643e-01, 6.592782e-01, 6.592922e-01, 6.593060e-01, 6.593201e-01, 6.593339e-01, 6.593479e-01, 6.593618e-01, 6.593758e-01, 6.593897e-01, 6.594037e-01, 6.594176e-01, 6.594315e-01, 6.594455e-01, 6.594594e-01, 6.594734e-01, 6.594873e-01, 6.595012e-01, 6.595151e-01, 6.595291e-01, 6.595430e-01, 6.595569e-01, 6.595709e-01, 6.595849e-01, 6.595988e-01, 6.596127e-01, 6.596267e-01, 6.596406e-01, 6.596545e-01, 6.596684e-01, 6.596824e-01, 6.596963e-01, 6.597103e-01, 6.597242e-01, 6.597381e-01, 6.597521e-01, 6.597660e-01, 6.597799e-01, 6.597939e-01, 6.598078e-01, 6.598217e-01, 6.598356e-01, 6.598496e-01, 6.598635e-01, 6.598775e-01, 6.598914e-01, 6.599053e-01, 6.599193e-01, 6.599332e-01, 6.599472e-01, 6.599610e-01, 6.599750e-01, 6.599889e-01, 6.600028e-01, 6.600168e-01, 6.600307e-01, 6.600447e-01, 6.600586e-01, 6.600725e-01, 6.600865e-01, 6.601003e-01, 6.601143e-01, 6.601282e-01, 6.601422e-01, 6.601561e-01, 6.601700e-01, 6.601840e-01, 6.601979e-01, 6.602118e-01, 6.602257e-01, 6.602397e-01, 6.602536e-01, 6.602675e-01, 6.602815e-01, 6.602954e-01, 6.603093e-01, 6.603233e-01, 6.603372e-01, 6.603511e-01, 6.603650e-01, 6.603790e-01, 6.603929e-01, 6.604068e-01, 6.604208e-01, 6.604347e-01, 6.604486e-01, 6.604625e-01, 6.604764e-01, 6.604904e-01, 6.605043e-01, 6.605182e-01, 6.605322e-01, 6.605461e-01, 6.605600e-01, 6.605740e-01, 6.605879e-01, 6.606019e-01, 6.606157e-01, 6.606296e-01, 6.606436e-01, 6.606575e-01, 6.606714e-01, 6.606854e-01, 6.606993e-01, 6.607133e-01, 6.607271e-01, 6.607410e-01, 6.607550e-01, 6.607689e-01, 6.607828e-01, 6.607968e-01, 6.608107e-01, 6.608247e-01, 6.608385e-01, 6.608524e-01, 6.608664e-01, 6.608803e-01, 6.608942e-01, 6.609082e-01, 6.609221e-01, 6.609360e-01, 6.609499e-01, 6.609638e-01, 6.609778e-01, 6.609917e-01, 6.610056e-01, 6.610195e-01, 6.610335e-01, 6.610474e-01, 6.610613e-01, 6.610752e-01, 6.610891e-01, 6.611031e-01, 6.611170e-01, 6.611309e-01, 6.611448e-01, 6.611587e-01, 6.611727e-01, 6.611866e-01, 6.612005e-01, 6.612144e-01, 6.612284e-01, 6.612423e-01, 6.612562e-01, 6.612701e-01, 6.612840e-01, 6.612980e-01, 6.613119e-01, 6.613258e-01, 6.613397e-01, 6.613536e-01, 6.613675e-01, 6.613815e-01, 6.613954e-01, 6.614093e-01, 6.614232e-01, 6.614372e-01, 6.614511e-01, 6.614650e-01, 6.614789e-01, 6.614928e-01, 6.615067e-01, 6.615207e-01, 6.615345e-01, 6.615484e-01, 6.615624e-01, 6.615763e-01, 6.615902e-01, 6.616042e-01, 6.616181e-01, 6.616320e-01, 6.616459e-01, 6.616598e-01, 6.616737e-01, 6.616876e-01, 6.617016e-01, 6.617154e-01, 6.617294e-01, 6.617433e-01, 6.617572e-01, 6.617711e-01, 6.617851e-01, 6.617990e-01, 6.618129e-01, 6.618268e-01, 6.618407e-01, 6.618546e-01, 6.618685e-01, 6.618825e-01, 6.618964e-01, 6.619103e-01, 6.619242e-01, 6.619381e-01, 6.619520e-01, 6.619660e-01, 6.619799e-01, 6.619937e-01, 6.620076e-01, 6.620216e-01, 6.620355e-01, 6.620494e-01, 6.620634e-01, 6.620772e-01, 6.620911e-01, 6.621050e-01, 6.621190e-01, 6.621329e-01, 6.621468e-01, 6.621607e-01, 6.621746e-01, 6.621885e-01, 6.622024e-01, 6.622164e-01, 6.622303e-01, 6.622442e-01, 6.622581e-01, 6.622720e-01, 6.622859e-01, 6.622998e-01, 6.623137e-01, 6.623276e-01, 6.623415e-01, 6.623554e-01, 6.623693e-01, 6.623833e-01, 6.623971e-01, 6.624111e-01, 6.624250e-01, 6.624389e-01, 6.624528e-01, 6.624667e-01, 6.624806e-01, 6.624945e-01, 6.625084e-01, 6.625224e-01, 6.625363e-01, 6.625502e-01, 6.625640e-01, 6.625780e-01, 6.625919e-01, 6.626058e-01, 6.626197e-01, 6.626336e-01, 6.626475e-01, 6.626614e-01, 6.626753e-01, 6.626892e-01, 6.627032e-01, 6.627170e-01, 6.627309e-01, 6.627449e-01, 6.627588e-01, 6.627727e-01, 6.627865e-01, 6.628005e-01, 6.628144e-01, 6.628283e-01, 6.628422e-01, 6.628561e-01, 6.628700e-01, 6.628839e-01, 6.628978e-01, 6.629117e-01, 6.629256e-01, 6.629395e-01, 6.629534e-01, 6.629673e-01, 6.629813e-01, 6.629952e-01, 6.630090e-01, 6.630229e-01, 6.630368e-01, 6.630507e-01, 6.630647e-01, 6.630785e-01, 6.630924e-01, 6.631064e-01, 6.631203e-01, 6.631342e-01, 6.631480e-01, 6.631619e-01, 6.631758e-01, 6.631898e-01, 6.632037e-01, 6.632175e-01, 6.632315e-01, 6.632454e-01, 6.632593e-01, 6.632732e-01, 6.632871e-01, 6.633010e-01, 6.633149e-01, 6.633288e-01, 6.633427e-01, 6.633565e-01, 6.633705e-01, 6.633844e-01, 6.633983e-01, 6.634122e-01, 6.634261e-01, 6.634400e-01, 6.634539e-01, 6.634678e-01, 6.634817e-01, 6.634955e-01, 6.635094e-01, 6.635233e-01, 6.635373e-01, 6.635512e-01, 6.635650e-01, 6.635789e-01, 6.635929e-01, 6.636068e-01, 6.636207e-01, 6.636345e-01, 6.636484e-01, 6.636624e-01, 6.636763e-01, 6.636901e-01, 6.637040e-01, 6.637179e-01, 6.637318e-01, 6.637457e-01, 6.637596e-01, 6.637735e-01, 6.637874e-01, 6.638013e-01, 6.638152e-01, 6.638291e-01, 6.638430e-01, 6.638569e-01, 6.638708e-01, 6.638847e-01, 6.638986e-01, 6.639125e-01, 6.639264e-01, 6.639403e-01, 6.639541e-01, 6.639680e-01, 6.639819e-01, 6.639958e-01, 6.640097e-01, 6.640236e-01, 6.640375e-01, 6.640514e-01, 6.640653e-01, 6.640792e-01, 6.640931e-01, 6.641070e-01, 6.641209e-01, 6.641347e-01, 6.641486e-01, 6.641625e-01, 6.641764e-01, 6.641904e-01, 6.642042e-01, 6.642181e-01, 6.642320e-01, 6.642459e-01, 6.642598e-01, 6.642737e-01, 6.642876e-01, 6.643015e-01, 6.643153e-01, 6.643292e-01, 6.643431e-01, 6.643570e-01, 6.643709e-01, 6.643848e-01, 6.643987e-01, 6.644126e-01, 6.644264e-01, 6.644403e-01, 6.644542e-01, 6.644681e-01, 6.644820e-01, 6.644959e-01, 6.645098e-01, 6.645237e-01, 6.645375e-01, 6.645514e-01, 6.645653e-01, 6.645792e-01, 6.645931e-01, 6.646070e-01, 6.646209e-01, 6.646348e-01, 6.646487e-01, 6.646625e-01, 6.646764e-01, 6.646903e-01, 6.647042e-01, 6.647181e-01, 6.647320e-01, 6.647459e-01, 6.647598e-01, 6.647736e-01, 6.647875e-01, 6.648014e-01, 6.648153e-01, 6.648292e-01, 6.648430e-01, 6.648569e-01, 6.648708e-01, 6.648847e-01, 6.648986e-01, 6.649125e-01, 6.649264e-01, 6.649402e-01, 6.649541e-01, 6.649680e-01, 6.649819e-01, 6.649958e-01, 6.650097e-01, 6.650236e-01, 6.650375e-01, 6.650513e-01, 6.650652e-01, 6.650791e-01, 6.650930e-01, 6.651069e-01, 6.651208e-01, 6.651347e-01, 6.651486e-01, 6.651624e-01, 6.651763e-01, 6.651902e-01, 6.652040e-01, 6.652179e-01, 6.652318e-01, 6.652457e-01, 6.652596e-01, 6.652734e-01, 6.652873e-01, 6.653012e-01, 6.653151e-01, 6.653290e-01, 6.653429e-01, 6.653567e-01, 6.653706e-01, 6.653845e-01, 6.653984e-01, 6.654122e-01, 6.654261e-01, 6.654400e-01, 6.654539e-01, 6.654678e-01, 6.654817e-01, 6.654956e-01, 6.655094e-01, 6.655233e-01, 6.655372e-01, 6.655511e-01, 6.655650e-01, 6.655788e-01, 6.655927e-01, 6.656066e-01, 6.656204e-01, 6.656343e-01, 6.656482e-01, 6.656621e-01, 6.656759e-01, 6.656898e-01, 6.657037e-01, 6.657176e-01, 6.657315e-01, 6.657454e-01, 6.657592e-01, 6.657731e-01, 6.657870e-01, 6.658008e-01, 6.658147e-01, 6.658286e-01, 6.658425e-01, 6.658563e-01, 6.658702e-01, 6.658841e-01, 6.658980e-01, 6.659119e-01, 6.659257e-01, 6.659396e-01, 6.659535e-01, 6.659673e-01, 6.659812e-01, 6.659951e-01, 6.660089e-01, 6.660228e-01, 6.660367e-01, 6.660506e-01, 6.660644e-01, 6.660783e-01, 6.660922e-01, 6.661061e-01, 6.661200e-01, 6.661338e-01, 6.661477e-01, 6.661616e-01, 6.661754e-01, 6.661893e-01, 6.662032e-01, 6.662171e-01, 6.662310e-01, 6.662448e-01, 6.662587e-01, 6.662726e-01, 6.662864e-01, 6.663003e-01, 6.663141e-01, 6.663280e-01, 6.663419e-01, 6.663558e-01, 6.663697e-01, 6.663836e-01, 6.663974e-01, 6.664113e-01, 6.664251e-01, 6.664390e-01, 6.664529e-01, 6.664667e-01, 6.664806e-01, 6.664945e-01, 6.665084e-01, 6.665222e-01, 6.665361e-01, 6.665500e-01, 6.665638e-01, 6.665777e-01, 6.665915e-01, 6.666054e-01, 6.666193e-01, 6.666332e-01, 6.666470e-01, 6.666609e-01, 6.666748e-01, 6.666886e-01, 6.667025e-01, 6.667164e-01, 6.667303e-01, 6.667441e-01, 6.667580e-01, 6.667718e-01, 6.667857e-01, 6.667995e-01, 6.668134e-01, 6.668273e-01, 6.668412e-01, 6.668550e-01, 6.668689e-01, 6.668828e-01, 6.668966e-01, 6.669105e-01, 6.669244e-01, 6.669382e-01, 6.669521e-01, 6.669660e-01, 6.669798e-01, 6.669937e-01, 6.670076e-01, 6.670215e-01, 6.670353e-01, 6.670492e-01, 6.670630e-01, 6.670769e-01, 6.670907e-01, 6.671046e-01, 6.671185e-01, 6.671324e-01, 6.671462e-01, 6.671600e-01, 6.671739e-01, 6.671878e-01, 6.672016e-01, 6.672155e-01, 6.672294e-01, 6.672432e-01, 6.672571e-01, 6.672710e-01, 6.672848e-01, 6.672987e-01, 6.673126e-01, 6.673264e-01, 6.673403e-01, 6.673541e-01, 6.673680e-01, 6.673819e-01, 6.673957e-01, 6.674096e-01, 6.674234e-01, 6.674373e-01, 6.674511e-01, 6.674650e-01, 6.674789e-01, 6.674927e-01, 6.675066e-01, 6.675205e-01, 6.675343e-01, 6.675482e-01, 6.675621e-01, 6.675759e-01, 6.675897e-01, 6.676036e-01, 6.676175e-01, 6.676313e-01, 6.676452e-01, 6.676590e-01, 6.676729e-01, 6.676868e-01, 6.677006e-01, 6.677145e-01, 6.677283e-01, 6.677422e-01, 6.677560e-01, 6.677699e-01, 6.677838e-01, 6.677976e-01, 6.678115e-01, 6.678253e-01, 6.678392e-01, 6.678531e-01, 6.678669e-01, 6.678808e-01, 6.678946e-01, 6.679085e-01, 6.679223e-01, 6.679362e-01, 6.679500e-01, 6.679639e-01, 6.679778e-01, 6.679916e-01, 6.680055e-01, 6.680193e-01, 6.680332e-01, 6.680471e-01, 6.680609e-01, 6.680747e-01, 6.680886e-01, 6.681024e-01, 6.681163e-01, 6.681302e-01, 6.681440e-01, 6.681578e-01, 6.681717e-01, 6.681856e-01, 6.681994e-01, 6.682132e-01, 6.682271e-01, 6.682410e-01, 6.682549e-01, 6.682687e-01, 6.682825e-01, 6.682964e-01, 6.683102e-01, 6.683241e-01, 6.683379e-01, 6.683518e-01, 6.683657e-01, 6.683795e-01, 6.683933e-01, 6.684072e-01, 6.684211e-01, 6.684349e-01, 6.684487e-01, 6.684626e-01, 6.684765e-01, 6.684903e-01, 6.685042e-01, 6.685180e-01, 6.685318e-01, 6.685457e-01, 6.685596e-01, 6.685734e-01, 6.685873e-01, 6.686011e-01, 6.686149e-01, 6.686288e-01, 6.686426e-01, 6.686565e-01, 6.686704e-01, 6.686842e-01, 6.686980e-01, 6.687119e-01, 6.687257e-01, 6.687396e-01, 6.687534e-01, 6.687673e-01, 6.687812e-01, 6.687950e-01, 6.688088e-01, 6.688227e-01, 6.688365e-01, 6.688504e-01, 6.688642e-01, 6.688781e-01, 6.688919e-01, 6.689057e-01, 6.689196e-01, 6.689335e-01, 6.689473e-01, 6.689611e-01, 6.689750e-01, 6.689888e-01, 6.690027e-01, 6.690165e-01, 6.690304e-01, 6.690442e-01, 6.690580e-01, 6.690719e-01, 6.690857e-01, 6.690996e-01, 6.691134e-01, 6.691273e-01, 6.691411e-01, 6.691549e-01, 6.691688e-01, 6.691827e-01, 6.691965e-01, 6.692103e-01, 6.692242e-01, 6.692380e-01, 6.692519e-01, 6.692657e-01, 6.692796e-01, 6.692934e-01, 6.693072e-01, 6.693211e-01, 6.693349e-01, 6.693488e-01, 6.693626e-01, 6.693765e-01, 6.693903e-01, 6.694041e-01, 6.694180e-01, 6.694318e-01, 6.694456e-01, 6.694595e-01, 6.694734e-01, 6.694872e-01, 6.695010e-01, 6.695149e-01, 6.695287e-01, 6.695426e-01, 6.695564e-01, 6.695702e-01, 6.695840e-01, 6.695979e-01, 6.696118e-01, 6.696256e-01, 6.696394e-01, 6.696533e-01, 6.696671e-01, 6.696809e-01, 6.696948e-01, 6.697086e-01, 6.697224e-01, 6.697363e-01, 6.697502e-01, 6.697640e-01, 6.697778e-01, 6.697916e-01, 6.698055e-01, 6.698193e-01, 6.698332e-01, 6.698470e-01, 6.698608e-01, 6.698747e-01, 6.698885e-01, 6.699023e-01, 6.699162e-01, 6.699300e-01, 6.699438e-01, 6.699577e-01, 6.699715e-01, 6.699854e-01, 6.699992e-01, 6.700130e-01, 6.700268e-01, 6.700407e-01, 6.700546e-01, 6.700684e-01, 6.700822e-01, 6.700960e-01, 6.701099e-01, 6.701238e-01, 6.701375e-01, 6.701514e-01, 6.701652e-01, 6.701791e-01, 6.701929e-01, 6.702067e-01, 6.702206e-01, 6.702344e-01, 6.702482e-01, 6.702620e-01, 6.702759e-01, 6.702898e-01, 6.703035e-01, 6.703174e-01, 6.703312e-01, 6.703450e-01, 6.703589e-01, 6.703727e-01, 6.703866e-01, 6.704004e-01, 6.704142e-01, 6.704280e-01, 6.704419e-01, 6.704557e-01, 6.704695e-01, 6.704834e-01, 6.704972e-01, 6.705111e-01, 6.705248e-01, 6.705387e-01, 6.705526e-01, 6.705664e-01, 6.705801e-01, 6.705940e-01, 6.706079e-01, 6.706217e-01, 6.706355e-01, 6.706493e-01, 6.706632e-01, 6.706770e-01, 6.706908e-01, 6.707047e-01, 6.707185e-01, 6.707323e-01, 6.707461e-01, 6.707600e-01, 6.707738e-01, 6.707876e-01, 6.708014e-01, 6.708153e-01, 6.708291e-01, 6.708429e-01, 6.708568e-01, 6.708705e-01, 6.708844e-01, 6.708983e-01, 6.709121e-01, 6.709259e-01, 6.709397e-01, 6.709536e-01, 6.709674e-01, 6.709812e-01, 6.709951e-01, 6.710088e-01, 6.710227e-01, 6.710365e-01, 6.710503e-01, 6.710642e-01, 6.710780e-01, 6.710918e-01, 6.711056e-01, 6.711195e-01, 6.711333e-01, 6.711471e-01, 6.711609e-01, 6.711748e-01, 6.711886e-01, 6.712024e-01, 6.712162e-01, 6.712301e-01, 6.712439e-01, 6.712577e-01, 6.712716e-01, 6.712853e-01, 6.712992e-01, 6.713130e-01, 6.713268e-01, 6.713406e-01, 6.713545e-01, 6.713683e-01, 6.713821e-01, 6.713960e-01, 6.714098e-01, 6.714236e-01, 6.714374e-01, 6.714512e-01, 6.714650e-01, 6.714789e-01, 6.714927e-01, 6.715065e-01, 6.715203e-01, 6.715342e-01, 6.715479e-01, 6.715618e-01, 6.715756e-01, 6.715894e-01, 6.716033e-01, 6.716170e-01, 6.716309e-01, 6.716447e-01, 6.716586e-01, 6.716723e-01, 6.716862e-01, 6.717000e-01, 6.717138e-01, 6.717277e-01, 6.717414e-01, 6.717553e-01, 6.717691e-01, 6.717829e-01, 6.717967e-01, 6.718106e-01, 6.718244e-01, 6.718382e-01, 6.718520e-01, 6.718658e-01, 6.718796e-01, 6.718935e-01, 6.719073e-01, 6.719211e-01, 6.719349e-01, 6.719487e-01, 6.719625e-01, 6.719764e-01, 6.719902e-01, 6.720040e-01, 6.720178e-01, 6.720316e-01, 6.720454e-01, 6.720593e-01, 6.720731e-01, 6.720869e-01, 6.721007e-01, 6.721145e-01, 6.721283e-01, 6.721421e-01, 6.721560e-01, 6.721697e-01, 6.721836e-01, 6.721974e-01, 6.722112e-01, 6.722251e-01, 6.722389e-01, 6.722527e-01, 6.722665e-01, 6.722803e-01, 6.722941e-01, 6.723079e-01, 6.723217e-01, 6.723356e-01, 6.723493e-01, 6.723632e-01, 6.723770e-01, 6.723908e-01, 6.724046e-01, 6.724185e-01, 6.724322e-01, 6.724461e-01, 6.724598e-01, 6.724737e-01, 6.724875e-01, 6.725013e-01, 6.725151e-01, 6.725289e-01, 6.725428e-01, 6.725566e-01, 6.725703e-01, 6.725842e-01, 6.725980e-01, 6.726118e-01, 6.726256e-01, 6.726394e-01, 6.726532e-01, 6.726670e-01, 6.726809e-01, 6.726947e-01, 6.727085e-01, 6.727223e-01, 6.727361e-01, 6.727499e-01, 6.727637e-01, 6.727775e-01, 6.727913e-01, 6.728051e-01, 6.728190e-01, 6.728328e-01, 6.728466e-01, 6.728604e-01, 6.728742e-01, 6.728880e-01, 6.729018e-01, 6.729156e-01, 6.729294e-01, 6.729432e-01, 6.729570e-01, 6.729708e-01, 6.729846e-01, 6.729985e-01, 6.730123e-01, 6.730261e-01, 6.730399e-01, 6.730537e-01, 6.730675e-01, 6.730813e-01, 6.730950e-01, 6.731089e-01, 6.731227e-01, 6.731365e-01, 6.731503e-01, 6.731641e-01, 6.731780e-01, 6.731917e-01, 6.732056e-01, 6.732193e-01, 6.732332e-01, 6.732469e-01, 6.732607e-01, 6.732746e-01, 6.732884e-01, 6.733022e-01, 6.733160e-01, 6.733298e-01, 6.733436e-01, 6.733574e-01, 6.733712e-01, 6.733850e-01, 6.733988e-01, 6.734126e-01, 6.734264e-01, 6.734402e-01, 6.734540e-01, 6.734678e-01, 6.734816e-01, 6.734954e-01, 6.735092e-01, 6.735230e-01, 6.735368e-01, 6.735506e-01, 6.735644e-01, 6.735782e-01, 6.735920e-01, 6.736058e-01, 6.736196e-01, 6.736334e-01, 6.736472e-01, 6.736611e-01, 6.736748e-01, 6.736887e-01, 6.737024e-01, 6.737162e-01, 6.737300e-01, 6.737438e-01, 6.737576e-01, 6.737714e-01, 6.737853e-01, 6.737990e-01, 6.738129e-01, 6.738266e-01, 6.738405e-01, 6.738542e-01, 6.738681e-01, 6.738818e-01, 6.738956e-01, 6.739094e-01, 6.739232e-01, 6.739370e-01, 6.739508e-01, 6.739646e-01, 6.739784e-01, 6.739922e-01, 6.740060e-01, 6.740198e-01, 6.740336e-01, 6.740474e-01, 6.740612e-01, 6.740750e-01, 6.740888e-01, 6.741026e-01, 6.741164e-01, 6.741302e-01, 6.741440e-01, 6.741577e-01, 6.741716e-01, 6.741853e-01, 6.741992e-01, 6.742130e-01, 6.742268e-01, 6.742406e-01, 6.742543e-01, 6.742681e-01, 6.742820e-01, 6.742957e-01, 6.743096e-01, 6.743233e-01, 6.743371e-01, 6.743509e-01, 6.743647e-01, 6.743785e-01, 6.743923e-01, 6.744061e-01, 6.744199e-01, 6.744336e-01, 6.744475e-01, 6.744612e-01, 6.744751e-01, 6.744888e-01, 6.745026e-01, 6.745164e-01, 6.745302e-01, 6.745440e-01, 6.745578e-01, 6.745716e-01, 6.745854e-01, 6.745992e-01, 6.746129e-01, 6.746268e-01, 6.746405e-01, 6.746544e-01, 6.746681e-01, 6.746819e-01, 6.746957e-01, 6.747095e-01, 6.747233e-01, 6.747371e-01, 6.747509e-01, 6.747647e-01, 6.747785e-01, 6.747922e-01, 6.748061e-01, 6.748198e-01, 6.748336e-01, 6.748474e-01, 6.748612e-01, 6.748750e-01, 6.748888e-01, 6.749026e-01, 6.749164e-01, 6.749302e-01, 6.749439e-01, 6.749578e-01, 6.749715e-01, 6.749853e-01, 6.749991e-01, 6.750128e-01, 6.750267e-01, 6.750405e-01, 6.750542e-01, 6.750680e-01, 6.750818e-01, 6.750956e-01, 6.751094e-01, 6.751232e-01, 6.751369e-01, 6.751508e-01, 6.751645e-01, 6.751783e-01, 6.751921e-01, 6.752059e-01, 6.752197e-01, 6.752335e-01, 6.752473e-01, 6.752610e-01, 6.752748e-01, 6.752886e-01, 6.753024e-01, 6.753162e-01, 6.753299e-01, 6.753438e-01, 6.753575e-01, 6.753713e-01, 6.753851e-01, 6.753989e-01, 6.754127e-01, 6.754264e-01, 6.754403e-01, 6.754540e-01, 6.754678e-01, 6.754816e-01, 6.754953e-01, 6.755092e-01, 6.755229e-01, 6.755367e-01, 6.755505e-01, 6.755643e-01, 6.755781e-01, 6.755918e-01, 6.756057e-01, 6.756194e-01, 6.756332e-01, 6.756470e-01, 6.756607e-01, 6.756746e-01, 6.756883e-01, 6.757021e-01, 6.757159e-01, 6.757297e-01, 6.757435e-01, 6.757572e-01, 6.757710e-01, 6.757848e-01, 6.757985e-01, 6.758124e-01, 6.758261e-01, 6.758399e-01, 6.758537e-01, 6.758675e-01, 6.758813e-01, 6.758950e-01, 6.759088e-01, 6.759226e-01, 6.759363e-01, 6.759502e-01, 6.759639e-01, 6.759777e-01, 6.759915e-01, 6.760052e-01, 6.760190e-01, 6.760328e-01, 6.760466e-01, 6.760604e-01, 6.760741e-01, 6.760879e-01, 6.761017e-01, 6.761155e-01, 6.761292e-01, 6.761431e-01, 6.761568e-01, 6.761706e-01, 6.761844e-01, 6.761982e-01, 6.762119e-01, 6.762257e-01, 6.762395e-01, 6.762533e-01, 6.762670e-01, 6.762808e-01, 6.762946e-01, 6.763083e-01, 6.763221e-01, 6.763359e-01, 6.763497e-01, 6.763634e-01, 6.763772e-01, 6.763910e-01, 6.764048e-01, 6.764185e-01, 6.764323e-01, 6.764461e-01, 6.764598e-01, 6.764736e-01, 6.764874e-01, 6.765012e-01, 6.765149e-01, 6.765288e-01, 6.765425e-01, 6.765563e-01, 6.765701e-01, 6.765838e-01, 6.765976e-01, 6.766114e-01, 6.766251e-01, 6.766389e-01, 6.766527e-01, 6.766665e-01, 6.766802e-01, 6.766940e-01, 6.767078e-01, 6.767216e-01, 6.767353e-01, 6.767491e-01, 6.767629e-01, 6.767766e-01, 6.767904e-01, 6.768042e-01, 6.768180e-01, 6.768317e-01, 6.768455e-01, 6.768593e-01, 6.768730e-01, 6.768868e-01, 6.769006e-01, 6.769143e-01, 6.769281e-01, 6.769419e-01, 6.769556e-01, 6.769694e-01, 6.769832e-01, 6.769970e-01, 6.770107e-01, 6.770245e-01, 6.770383e-01, 6.770520e-01, 6.770658e-01, 6.770796e-01, 6.770933e-01, 6.771071e-01, 6.771209e-01, 6.771346e-01, 6.771484e-01, 6.771622e-01, 6.771759e-01, 6.771897e-01, 6.772035e-01, 6.772172e-01, 6.772310e-01, 6.772448e-01, 6.772585e-01, 6.772723e-01, 6.772861e-01, 6.772999e-01, 6.773136e-01, 6.773273e-01, 6.773412e-01, 6.773549e-01, 6.773687e-01, 6.773824e-01, 6.773962e-01, 6.774099e-01, 6.774237e-01, 6.774375e-01, 6.774513e-01, 6.774650e-01, 6.774788e-01, 6.774926e-01, 6.775063e-01, 6.775200e-01, 6.775338e-01, 6.775476e-01, 6.775614e-01, 6.775751e-01, 6.775889e-01, 6.776026e-01, 6.776164e-01, 6.776302e-01, 6.776440e-01, 6.776577e-01, 6.776715e-01, 6.776853e-01, 6.776990e-01, 6.777128e-01, 6.777265e-01, 6.777403e-01, 6.777540e-01, 6.777678e-01, 6.777816e-01, 6.777953e-01, 6.778091e-01, 6.778228e-01, 6.778366e-01, 6.778504e-01, 6.778641e-01, 6.778779e-01, 6.778917e-01, 6.779054e-01, 6.779192e-01, 6.779330e-01, 6.779467e-01, 6.779605e-01, 6.779742e-01, 6.779880e-01, 6.780018e-01, 6.780155e-01, 6.780292e-01, 6.780430e-01, 6.780568e-01, 6.780705e-01, 6.780843e-01, 6.780980e-01, 6.781118e-01, 6.781256e-01, 6.781393e-01, 6.781531e-01, 6.781669e-01, 6.781806e-01, 6.781943e-01, 6.782081e-01, 6.782219e-01, 6.782357e-01, 6.782494e-01, 6.782631e-01, 6.782769e-01, 6.782906e-01, 6.783044e-01, 6.783181e-01, 6.783319e-01, 6.783457e-01, 6.783594e-01, 6.783732e-01, 6.783869e-01, 6.784007e-01, 6.784145e-01, 6.784282e-01, 6.784420e-01, 6.784557e-01, 6.784695e-01, 6.784832e-01, 6.784970e-01, 6.785107e-01, 6.785245e-01, 6.785383e-01, 6.785520e-01, 6.785657e-01, 6.785795e-01, 6.785933e-01, 6.786070e-01, 6.786208e-01, 6.786345e-01, 6.786483e-01, 6.786620e-01, 6.786758e-01, 6.786895e-01, 6.787033e-01, 6.787170e-01, 6.787308e-01, 6.787446e-01, 6.787583e-01, 6.787720e-01, 6.787858e-01, 6.787996e-01, 6.788133e-01, 6.788270e-01, 6.788408e-01, 6.788546e-01, 6.788683e-01, 6.788821e-01, 6.788958e-01, 6.789095e-01, 6.789233e-01, 6.789371e-01, 6.789508e-01, 6.789646e-01, 6.789783e-01, 6.789920e-01, 6.790058e-01, 6.790196e-01, 6.790333e-01, 6.790470e-01, 6.790608e-01, 6.790746e-01, 6.790883e-01, 6.791021e-01, 6.791158e-01, 6.791295e-01, 6.791433e-01, 6.791570e-01, 6.791708e-01, 6.791846e-01, 6.791983e-01, 6.792120e-01, 6.792258e-01, 6.792396e-01, 6.792533e-01, 6.792670e-01, 6.792808e-01, 6.792945e-01, 6.793082e-01, 6.793220e-01, 6.793358e-01, 6.793495e-01, 6.793633e-01, 6.793770e-01, 6.793908e-01, 6.794045e-01, 6.794182e-01, 6.794320e-01, 6.794457e-01, 6.794595e-01, 6.794732e-01, 6.794870e-01, 6.795007e-01, 6.795145e-01, 6.795282e-01, 6.795419e-01, 6.795557e-01, 6.795694e-01, 6.795832e-01, 6.795969e-01, 6.796107e-01, 6.796244e-01, 6.796381e-01, 6.796519e-01, 6.796656e-01, 6.796794e-01, 6.796932e-01, 6.797069e-01, 6.797206e-01, 6.797344e-01, 6.797481e-01, 6.797618e-01, 6.797756e-01, 6.797893e-01, 6.798031e-01, 6.798168e-01, 6.798306e-01, 6.798443e-01, 6.798580e-01, 6.798718e-01, 6.798855e-01, 6.798993e-01, 6.799130e-01, 6.799268e-01, 6.799405e-01, 6.799542e-01, 6.799680e-01, 6.799817e-01, 6.799955e-01, 6.800092e-01, 6.800230e-01, 6.800367e-01, 6.800504e-01, 6.800641e-01, 6.800779e-01, 6.800916e-01, 6.801053e-01, 6.801191e-01, 6.801329e-01, 6.801466e-01, 6.801603e-01, 6.801741e-01, 6.801878e-01, 6.802015e-01, 6.802153e-01, 6.802290e-01, 6.802428e-01, 6.802565e-01, 6.802703e-01, 6.802840e-01, 6.802977e-01, 6.803114e-01, 6.803252e-01, 6.803389e-01, 6.803527e-01, 6.803664e-01, 6.803801e-01, 6.803939e-01, 6.804076e-01, 6.804214e-01, 6.804351e-01, 6.804488e-01, 6.804625e-01, 6.804762e-01, 6.804900e-01, 6.805037e-01, 6.805175e-01, 6.805312e-01, 6.805449e-01, 6.805587e-01, 6.805724e-01, 6.805862e-01, 6.805999e-01, 6.806136e-01, 6.806273e-01, 6.806411e-01, 6.806548e-01, 6.806685e-01, 6.806823e-01, 6.806960e-01, 6.807098e-01, 6.807235e-01, 6.807373e-01, 6.807510e-01, 6.807647e-01, 6.807784e-01, 6.807922e-01, 6.808059e-01, 6.808196e-01, 6.808333e-01, 6.808471e-01, 6.808608e-01, 6.808745e-01, 6.808883e-01, 6.809020e-01, 6.809158e-01, 6.809295e-01, 6.809432e-01, 6.809570e-01, 6.809707e-01, 6.809844e-01, 6.809981e-01, 6.810119e-01, 6.810256e-01, 6.810393e-01, 6.810530e-01, 6.810668e-01, 6.810805e-01, 6.810942e-01, 6.811079e-01, 6.811217e-01, 6.811354e-01, 6.811491e-01, 6.811629e-01, 6.811766e-01, 6.811904e-01, 6.812041e-01, 6.812178e-01, 6.812316e-01, 6.812453e-01, 6.812590e-01, 6.812727e-01, 6.812865e-01, 6.813002e-01, 6.813139e-01, 6.813276e-01, 6.813414e-01, 6.813551e-01, 6.813688e-01, 6.813825e-01, 6.813963e-01, 6.814100e-01, 6.814237e-01, 6.814374e-01, 6.814512e-01, 6.814649e-01, 6.814786e-01, 6.814923e-01, 6.815061e-01, 6.815198e-01, 6.815335e-01, 6.815472e-01, 6.815610e-01, 6.815747e-01, 6.815884e-01, 6.816022e-01, 6.816159e-01, 6.816297e-01, 6.816434e-01, 6.816571e-01, 6.816708e-01, 6.816846e-01, 6.816983e-01, 6.817120e-01, 6.817257e-01, 6.817394e-01, 6.817531e-01, 6.817669e-01, 6.817806e-01, 6.817943e-01, 6.818080e-01, 6.818218e-01, 6.818355e-01, 6.818492e-01, 6.818630e-01, 6.818767e-01, 6.818904e-01, 6.819041e-01, 6.819178e-01, 6.819316e-01, 6.819453e-01, 6.819590e-01, 6.819727e-01, 6.819864e-01, 6.820001e-01, 6.820138e-01, 6.820276e-01, 6.820413e-01, 6.820551e-01, 6.820688e-01, 6.820825e-01, 6.820962e-01, 6.821099e-01, 6.821236e-01, 6.821373e-01, 6.821511e-01, 6.821648e-01, 6.821785e-01, 6.821922e-01, 6.822059e-01, 6.822197e-01, 6.822334e-01, 6.822471e-01, 6.822608e-01, 6.822745e-01, 6.822882e-01, 6.823019e-01, 6.823157e-01, 6.823294e-01, 6.823431e-01, 6.823568e-01, 6.823706e-01, 6.823843e-01, 6.823980e-01, 6.824117e-01, 6.824254e-01, 6.824391e-01, 6.824529e-01, 6.824666e-01, 6.824803e-01, 6.824940e-01, 6.825078e-01, 6.825215e-01, 6.825352e-01, 6.825489e-01, 6.825626e-01, 6.825763e-01, 6.825900e-01, 6.826037e-01, 6.826174e-01, 6.826312e-01, 6.826449e-01, 6.826586e-01, 6.826723e-01, 6.826860e-01, 6.826997e-01, 6.827134e-01, 6.827272e-01, 6.827409e-01, 6.827546e-01, 6.827683e-01, 6.827821e-01, 6.827958e-01, 6.828095e-01, 6.828232e-01, 6.828369e-01, 6.828506e-01, 6.828643e-01, 6.828780e-01, 6.828917e-01, 6.829054e-01, 6.829191e-01, 6.829329e-01, 6.829466e-01, 6.829603e-01, 6.829740e-01, 6.829877e-01, 6.830015e-01, 6.830152e-01, 6.830289e-01, 6.830425e-01, 6.830563e-01, 6.830700e-01, 6.830837e-01, 6.830974e-01, 6.831111e-01, 6.831248e-01, 6.831385e-01, 6.831523e-01, 6.831660e-01, 6.831797e-01, 6.831934e-01, 6.832071e-01, 6.832208e-01, 6.832345e-01, 6.832482e-01, 6.832619e-01, 6.832756e-01, 6.832893e-01, 6.833031e-01, 6.833168e-01, 6.833305e-01, 6.833442e-01, 6.833579e-01, 6.833716e-01, 6.833853e-01, 6.833990e-01, 6.834127e-01, 6.834264e-01, 6.834401e-01, 6.834539e-01, 6.834676e-01, 6.834813e-01, 6.834949e-01, 6.835087e-01, 6.835224e-01, 6.835361e-01, 6.835498e-01, 6.835635e-01, 6.835772e-01, 6.835909e-01, 6.836047e-01, 6.836184e-01, 6.836320e-01, 6.836457e-01, 6.836594e-01, 6.836731e-01, 6.836869e-01, 6.837006e-01, 6.837143e-01, 6.837280e-01, 6.837417e-01, 6.837554e-01, 6.837691e-01, 6.837828e-01, 6.837965e-01, 6.838102e-01, 6.838239e-01, 6.838376e-01, 6.838513e-01, 6.838650e-01, 6.838787e-01, 6.838924e-01, 6.839061e-01, 6.839198e-01, 6.839335e-01, 6.839472e-01, 6.839609e-01, 6.839747e-01, 6.839883e-01, 6.840020e-01, 6.840158e-01, 6.840295e-01, 6.840432e-01, 6.840569e-01, 6.840705e-01, 6.840842e-01, 6.840979e-01, 6.841117e-01, 6.841254e-01, 6.841391e-01, 6.841527e-01, 6.841664e-01, 6.841802e-01, 6.841938e-01, 6.842076e-01, 6.842213e-01, 6.842350e-01, 6.842487e-01, 6.842623e-01, 6.842760e-01, 6.842898e-01, 6.843035e-01, 6.843172e-01, 6.843309e-01, 6.843445e-01, 6.843582e-01, 6.843719e-01, 6.843857e-01, 6.843994e-01, 6.844130e-01, 6.844268e-01, 6.844404e-01, 6.844541e-01, 6.844679e-01, 6.844816e-01, 6.844953e-01, 6.845089e-01, 6.845226e-01, 6.845363e-01, 6.845500e-01, 6.845638e-01, 6.845774e-01, 6.845911e-01, 6.846048e-01, 6.846185e-01, 6.846322e-01, 6.846459e-01, 6.846596e-01, 6.846733e-01, 6.846870e-01, 6.847007e-01, 6.847144e-01, 6.847281e-01, 6.847418e-01, 6.847554e-01, 6.847692e-01, 6.847829e-01, 6.847966e-01, 6.848102e-01, 6.848239e-01, 6.848376e-01, 6.848513e-01, 6.848650e-01, 6.848787e-01, 6.848924e-01, 6.849061e-01, 6.849198e-01, 6.849335e-01, 6.849472e-01, 6.849609e-01, 6.849746e-01, 6.849883e-01, 6.850020e-01, 6.850157e-01, 6.850293e-01, 6.850430e-01, 6.850567e-01, 6.850704e-01, 6.850841e-01, 6.850978e-01, 6.851115e-01, 6.851252e-01, 6.851389e-01, 6.851526e-01, 6.851662e-01, 6.851799e-01, 6.851936e-01, 6.852074e-01, 6.852210e-01, 6.852347e-01, 6.852484e-01, 6.852621e-01, 6.852758e-01, 6.852894e-01, 6.853032e-01, 6.853169e-01, 6.853305e-01, 6.853442e-01, 6.853579e-01, 6.853716e-01, 6.853853e-01, 6.853990e-01, 6.854127e-01, 6.854264e-01, 6.854401e-01, 6.854538e-01, 6.854674e-01, 6.854811e-01, 6.854948e-01, 6.855085e-01, 6.855222e-01, 6.855358e-01, 6.855496e-01, 6.855633e-01, 6.855769e-01, 6.855906e-01, 6.856043e-01, 6.856180e-01, 6.856317e-01, 6.856454e-01, 6.856591e-01, 6.856727e-01, 6.856865e-01, 6.857001e-01, 6.857138e-01, 6.857275e-01, 6.857412e-01, 6.857548e-01, 6.857685e-01, 6.857823e-01, 6.857959e-01, 6.858096e-01, 6.858233e-01, 6.858370e-01, 6.858506e-01, 6.858643e-01, 6.858780e-01, 6.858917e-01, 6.859054e-01, 6.859191e-01, 6.859328e-01, 6.859465e-01, 6.859601e-01, 6.859738e-01, 6.859875e-01, 6.860012e-01, 6.860148e-01, 6.860285e-01, 6.860422e-01, 6.860559e-01, 6.860695e-01, 6.860833e-01, 6.860970e-01, 6.861106e-01, 6.861243e-01, 6.861380e-01, 6.861517e-01, 6.861654e-01, 6.861790e-01, 6.861927e-01, 6.862064e-01, 6.862201e-01, 6.862338e-01, 6.862475e-01, 6.862611e-01, 6.862748e-01, 6.862885e-01, 6.863022e-01, 6.863158e-01, 6.863295e-01, 6.863432e-01, 6.863569e-01, 6.863706e-01, 6.863843e-01, 6.863979e-01, 6.864116e-01, 6.864253e-01, 6.864390e-01, 6.864527e-01, 6.864663e-01, 6.864800e-01, 6.864937e-01, 6.865073e-01, 6.865211e-01, 6.865347e-01, 6.865484e-01, 6.865621e-01, 6.865758e-01, 6.865894e-01, 6.866031e-01, 6.866168e-01, 6.866304e-01, 6.866441e-01, 6.866578e-01, 6.866715e-01, 6.866852e-01, 6.866989e-01, 6.867126e-01, 6.867262e-01, 6.867399e-01, 6.867536e-01, 6.867672e-01, 6.867809e-01, 6.867946e-01, 6.868082e-01, 6.868219e-01, 6.868356e-01, 6.868493e-01, 6.868630e-01, 6.868767e-01, 6.868903e-01, 6.869040e-01, 6.869177e-01, 6.869313e-01, 6.869450e-01, 6.869587e-01, 6.869724e-01, 6.869860e-01, 6.869997e-01, 6.870134e-01, 6.870270e-01, 6.870407e-01, 6.870544e-01, 6.870680e-01, 6.870818e-01, 6.870954e-01, 6.871091e-01, 6.871228e-01, 6.871364e-01, 6.871501e-01, 6.871638e-01, 6.871774e-01, 6.871911e-01, 6.872048e-01, 6.872185e-01, 6.872321e-01, 6.872458e-01, 6.872595e-01, 6.872731e-01, 6.872869e-01, 6.873005e-01, 6.873142e-01, 6.873279e-01, 6.873415e-01, 6.873552e-01, 6.873689e-01, 6.873825e-01, 6.873962e-01, 6.874098e-01, 6.874235e-01, 6.874372e-01, 6.874508e-01, 6.874645e-01, 6.874782e-01, 6.874919e-01, 6.875055e-01, 6.875192e-01, 6.875329e-01, 6.875466e-01, 6.875603e-01, 6.875739e-01, 6.875876e-01, 6.876012e-01, 6.876149e-01, 6.876286e-01, 6.876422e-01, 6.876559e-01, 6.876696e-01, 6.876832e-01, 6.876969e-01, 6.877105e-01, 6.877242e-01, 6.877379e-01, 6.877516e-01, 6.877652e-01, 6.877789e-01, 6.877925e-01, 6.878062e-01, 6.878199e-01, 6.878335e-01, 6.878473e-01, 6.878609e-01, 6.878746e-01, 6.878882e-01, 6.879019e-01, 6.879156e-01, 6.879292e-01, 6.879429e-01, 6.879565e-01, 6.879702e-01, 6.879839e-01, 6.879975e-01, 6.880112e-01, 6.880248e-01, 6.880385e-01, 6.880522e-01, 6.880659e-01, 6.880795e-01, 6.880932e-01, 6.881068e-01, 6.881205e-01, 6.881342e-01, 6.881478e-01, 6.881615e-01, 6.881751e-01, 6.881889e-01, 6.882025e-01, 6.882161e-01, 6.882298e-01, 6.882435e-01, 6.882572e-01, 6.882708e-01, 6.882845e-01, 6.882981e-01, 6.883118e-01, 6.883254e-01, 6.883391e-01, 6.883528e-01, 6.883665e-01, 6.883801e-01, 6.883938e-01, 6.884074e-01, 6.884211e-01, 6.884347e-01, 6.884484e-01, 6.884621e-01, 6.884757e-01, 6.884894e-01, 6.885030e-01, 6.885167e-01, 6.885303e-01, 6.885440e-01, 6.885576e-01, 6.885713e-01, 6.885850e-01, 6.885986e-01, 6.886123e-01, 6.886260e-01, 6.886396e-01, 6.886533e-01, 6.886669e-01, 6.886806e-01, 6.886942e-01, 6.887079e-01, 6.887215e-01, 6.887352e-01, 6.887489e-01, 6.887625e-01, 6.887762e-01, 6.887898e-01, 6.888035e-01, 6.888171e-01, 6.888308e-01, 6.888445e-01, 6.888582e-01, 6.888718e-01, 6.888855e-01, 6.888991e-01, 6.889127e-01, 6.889264e-01, 6.889400e-01, 6.889537e-01, 6.889674e-01, 6.889811e-01, 6.889947e-01, 6.890084e-01, 6.890220e-01, 6.890357e-01, 6.890493e-01, 6.890630e-01, 6.890766e-01, 6.890903e-01, 6.891039e-01, 6.891176e-01, 6.891312e-01, 6.891449e-01, 6.891586e-01, 6.891722e-01, 6.891859e-01, 6.891995e-01, 6.892132e-01, 6.892268e-01, 6.892405e-01, 6.892541e-01, 6.892678e-01, 6.892814e-01, 6.892951e-01, 6.893087e-01, 6.893224e-01, 6.893360e-01, 6.893497e-01, 6.893633e-01, 6.893770e-01, 6.893906e-01, 6.894042e-01, 6.894179e-01, 6.894316e-01, 6.894452e-01, 6.894589e-01, 6.894725e-01, 6.894862e-01, 6.894998e-01, 6.895135e-01, 6.895271e-01, 6.895408e-01, 6.895544e-01, 6.895681e-01, 6.895817e-01, 6.895954e-01, 6.896091e-01, 6.896226e-01, 6.896363e-01, 6.896499e-01, 6.896636e-01, 6.896772e-01, 6.896909e-01, 6.897045e-01, 6.897182e-01, 6.897318e-01, 6.897455e-01, 6.897591e-01, 6.897728e-01, 6.897865e-01, 6.898001e-01, 6.898137e-01, 6.898274e-01, 6.898410e-01, 6.898547e-01, 6.898683e-01, 6.898820e-01, 6.898956e-01, 6.899093e-01, 6.899229e-01, 6.899366e-01, 6.899502e-01, 6.899639e-01, 6.899775e-01, 6.899911e-01, 6.900048e-01, 6.900184e-01, 6.900321e-01, 6.900457e-01, 6.900594e-01, 6.900730e-01, 6.900867e-01, 6.901003e-01, 6.901140e-01, 6.901276e-01, 6.901412e-01, 6.901549e-01, 6.901685e-01, 6.901821e-01, 6.901958e-01, 6.902094e-01, 6.902231e-01, 6.902367e-01, 6.902504e-01, 6.902640e-01, 6.902777e-01, 6.902913e-01, 6.903049e-01, 6.903186e-01, 6.903322e-01, 6.903459e-01, 6.903595e-01, 6.903732e-01, 6.903868e-01, 6.904004e-01, 6.904141e-01, 6.904277e-01, 6.904414e-01, 6.904550e-01, 6.904687e-01, 6.904823e-01, 6.904959e-01, 6.905096e-01, 6.905233e-01, 6.905369e-01, 6.905505e-01, 6.905642e-01, 6.905778e-01, 6.905915e-01, 6.906050e-01, 6.906187e-01, 6.906323e-01, 6.906460e-01, 6.906596e-01, 6.906732e-01, 6.906869e-01, 6.907005e-01, 6.907142e-01, 6.907278e-01, 6.907414e-01, 6.907551e-01, 6.907687e-01, 6.907824e-01, 6.907960e-01, 6.908096e-01, 6.908233e-01, 6.908369e-01, 6.908506e-01, 6.908642e-01, 6.908779e-01, 6.908914e-01, 6.909051e-01, 6.909187e-01, 6.909324e-01, 6.909460e-01, 6.909596e-01, 6.909733e-01, 6.909869e-01, 6.910005e-01, 6.910142e-01, 6.910278e-01, 6.910415e-01, 6.910551e-01, 6.910687e-01, 6.910824e-01, 6.910960e-01, 6.911097e-01, 6.911233e-01, 6.911369e-01, 6.911505e-01, 6.911642e-01, 6.911778e-01, 6.911914e-01, 6.912051e-01, 6.912187e-01, 6.912323e-01, 6.912460e-01, 6.912596e-01, 6.912733e-01, 6.912869e-01, 6.913005e-01, 6.913142e-01, 6.913278e-01, 6.913414e-01, 6.913550e-01, 6.913686e-01, 6.913823e-01, 6.913959e-01, 6.914095e-01, 6.914232e-01, 6.914368e-01, 6.914505e-01, 6.914641e-01, 6.914777e-01, 6.914914e-01, 6.915050e-01, 6.915186e-01, 6.915323e-01, 6.915459e-01, 6.915595e-01, 6.915731e-01, 6.915868e-01, 6.916004e-01, 6.916140e-01, 6.916277e-01, 6.916413e-01, 6.916549e-01, 6.916686e-01, 6.916822e-01, 6.916958e-01, 6.917095e-01, 6.917230e-01, 6.917367e-01, 6.917503e-01, 6.917639e-01, 6.917776e-01, 6.917912e-01, 6.918048e-01, 6.918185e-01, 6.918321e-01, 6.918457e-01, 6.918594e-01, 6.918730e-01, 6.918866e-01, 6.919002e-01, 6.919138e-01, 6.919275e-01, 6.919411e-01, 6.919547e-01, 6.919684e-01, 6.919820e-01, 6.919956e-01, 6.920093e-01, 6.920229e-01, 6.920365e-01, 6.920502e-01, 6.920637e-01, 6.920774e-01, 6.920910e-01, 6.921046e-01, 6.921182e-01, 6.921319e-01, 6.921455e-01, 6.921591e-01, 6.921728e-01, 6.921864e-01, 6.922000e-01, 6.922136e-01, 6.922272e-01, 6.922409e-01, 6.922545e-01, 6.922681e-01, 6.922818e-01, 6.922954e-01, 6.923090e-01, 6.923226e-01, 6.923363e-01, 6.923499e-01, 6.923635e-01, 6.923772e-01, 6.923907e-01, 6.924044e-01, 6.924180e-01, 6.924316e-01, 6.924452e-01, 6.924589e-01, 6.924725e-01, 6.924861e-01, 6.924997e-01, 6.925133e-01, 6.925270e-01, 6.925406e-01, 6.925542e-01, 6.925678e-01, 6.925814e-01, 6.925951e-01, 6.926087e-01, 6.926223e-01, 6.926359e-01, 6.926495e-01, 6.926632e-01, 6.926768e-01, 6.926904e-01, 6.927040e-01, 6.927177e-01, 6.927313e-01, 6.927449e-01, 6.927585e-01, 6.927722e-01, 6.927857e-01, 6.927994e-01, 6.928130e-01, 6.928266e-01, 6.928402e-01, 6.928538e-01, 6.928675e-01, 6.928811e-01, 6.928947e-01, 6.929083e-01, 6.929219e-01, 6.929355e-01, 6.929492e-01, 6.929628e-01, 6.929764e-01, 6.929900e-01, 6.930036e-01, 6.930172e-01, 6.930309e-01, 6.930445e-01, 6.930581e-01, 6.930717e-01, 6.930854e-01, 6.930990e-01, 6.931126e-01, 6.931262e-01, 6.931398e-01, 6.931534e-01, 6.931670e-01, 6.931806e-01, 6.931943e-01, 6.932079e-01, 6.932214e-01, 6.932351e-01, 6.932487e-01, 6.932623e-01, 6.932759e-01, 6.932896e-01, 6.933032e-01, 6.933168e-01, 6.933304e-01, 6.933440e-01, 6.933576e-01, 6.933712e-01, 6.933849e-01, 6.933985e-01, 6.934121e-01, 6.934257e-01, 6.934393e-01, 6.934529e-01, 6.934665e-01, 6.934801e-01, 6.934938e-01, 6.935074e-01, 6.935210e-01, 6.935346e-01, 6.935482e-01, 6.935619e-01, 6.935754e-01, 6.935890e-01, 6.936027e-01, 6.936163e-01, 6.936299e-01, 6.936435e-01, 6.936571e-01, 6.936707e-01, 6.936843e-01, 6.936979e-01, 6.937115e-01, 6.937252e-01, 6.937388e-01, 6.937524e-01, 6.937660e-01, 6.937796e-01, 6.937932e-01, 6.938068e-01, 6.938204e-01, 6.938340e-01, 6.938476e-01, 6.938612e-01, 6.938748e-01, 6.938885e-01, 6.939021e-01, 6.939157e-01, 6.939293e-01, 6.939429e-01, 6.939565e-01, 6.939701e-01, 6.939837e-01, 6.939973e-01, 6.940109e-01, 6.940246e-01, 6.940382e-01, 6.940517e-01, 6.940653e-01, 6.940790e-01, 6.940926e-01, 6.941062e-01, 6.941198e-01, 6.941334e-01, 6.941470e-01, 6.941606e-01, 6.941742e-01, 6.941878e-01, 6.942014e-01, 6.942150e-01, 6.942286e-01, 6.942422e-01, 6.942559e-01, 6.942695e-01, 6.942831e-01, 6.942967e-01, 6.943102e-01, 6.943239e-01, 6.943375e-01, 6.943511e-01, 6.943647e-01, 6.943783e-01, 6.943919e-01, 6.944055e-01, 6.944191e-01, 6.944327e-01, 6.944463e-01, 6.944599e-01, 6.944735e-01, 6.944872e-01, 6.945007e-01, 6.945143e-01, 6.945279e-01, 6.945415e-01, 6.945551e-01, 6.945688e-01, 6.945823e-01, 6.945959e-01, 6.946095e-01, 6.946231e-01, 6.946368e-01, 6.946504e-01, 6.946639e-01, 6.946776e-01, 6.946912e-01, 6.947047e-01, 6.947184e-01, 6.947320e-01, 6.947455e-01, 6.947592e-01, 6.947728e-01, 6.947864e-01, 6.948000e-01, 6.948135e-01, 6.948271e-01, 6.948407e-01, 6.948544e-01, 6.948680e-01, 6.948816e-01, 6.948951e-01, 6.949087e-01, 6.949223e-01, 6.949359e-01, 6.949496e-01, 6.949632e-01, 6.949767e-01, 6.949903e-01, 6.950039e-01, 6.950175e-01, 6.950311e-01, 6.950448e-01, 6.950583e-01, 6.950719e-01, 6.950855e-01, 6.950991e-01, 6.951127e-01, 6.951263e-01, 6.951399e-01, 6.951535e-01, 6.951671e-01, 6.951807e-01, 6.951943e-01, 6.952079e-01, 6.952215e-01, 6.952351e-01, 6.952487e-01, 6.952623e-01, 6.952759e-01, 6.952895e-01, 6.953031e-01, 6.953167e-01, 6.953303e-01, 6.953439e-01, 6.953574e-01, 6.953710e-01, 6.953846e-01, 6.953982e-01, 6.954118e-01, 6.954255e-01, 6.954390e-01, 6.954526e-01, 6.954662e-01, 6.954798e-01, 6.954933e-01, 6.955070e-01, 6.955206e-01, 6.955342e-01, 6.955478e-01, 6.955613e-01, 6.955749e-01, 6.955886e-01, 6.956021e-01, 6.956157e-01, 6.956293e-01, 6.956429e-01, 6.956565e-01, 6.956701e-01, 6.956837e-01, 6.956973e-01, 6.957109e-01, 6.957245e-01, 6.957381e-01, 6.957517e-01, 6.957653e-01, 6.957788e-01, 6.957924e-01, 6.958060e-01, 6.958196e-01, 6.958332e-01, 6.958468e-01, 6.958604e-01, 6.958740e-01, 6.958876e-01, 6.959012e-01, 6.959147e-01, 6.959283e-01, 6.959419e-01, 6.959555e-01, 6.959690e-01, 6.959826e-01, 6.959962e-01, 6.960098e-01, 6.960234e-01, 6.960370e-01, 6.960506e-01, 6.960642e-01, 6.960778e-01, 6.960914e-01, 6.961050e-01, 6.961186e-01, 6.961321e-01, 6.961457e-01, 6.961593e-01, 6.961729e-01, 6.961865e-01, 6.962001e-01, 6.962137e-01, 6.962273e-01, 6.962408e-01, 6.962544e-01, 6.962680e-01, 6.962816e-01, 6.962952e-01, 6.963088e-01, 6.963224e-01, 6.963360e-01, 6.963496e-01, 6.963632e-01, 6.963767e-01, 6.963903e-01, 6.964039e-01, 6.964175e-01, 6.964310e-01, 6.964446e-01, 6.964582e-01, 6.964718e-01, 6.964853e-01, 6.964989e-01, 6.965125e-01, 6.965261e-01, 6.965397e-01, 6.965533e-01, 6.965669e-01, 6.965805e-01, 6.965941e-01, 6.966076e-01, 6.966212e-01, 6.966348e-01, 6.966484e-01, 6.966619e-01, 6.966755e-01, 6.966891e-01, 6.967027e-01, 6.967163e-01, 6.967299e-01, 6.967434e-01, 6.967570e-01, 6.967706e-01, 6.967842e-01, 6.967978e-01, 6.968114e-01, 6.968250e-01, 6.968386e-01, 6.968521e-01, 6.968657e-01, 6.968793e-01, 6.968929e-01, 6.969064e-01, 6.969200e-01, 6.969336e-01, 6.969472e-01, 6.969607e-01, 6.969743e-01, 6.969879e-01, 6.970015e-01, 6.970150e-01, 6.970286e-01, 6.970422e-01, 6.970558e-01, 6.970693e-01, 6.970829e-01, 6.970965e-01, 6.971101e-01, 6.971236e-01, 6.971372e-01, 6.971508e-01, 6.971644e-01, 6.971780e-01, 6.971916e-01, 6.972051e-01, 6.972187e-01, 6.972323e-01, 6.972459e-01, 6.972595e-01, 6.972730e-01, 6.972866e-01, 6.973002e-01, 6.973138e-01, 6.973274e-01, 6.973409e-01, 6.973545e-01, 6.973681e-01, 6.973817e-01, 6.973953e-01, 6.974088e-01, 6.974224e-01, 6.974360e-01, 6.974496e-01, 6.974631e-01, 6.974767e-01, 6.974903e-01, 6.975038e-01, 6.975174e-01, 6.975310e-01, 6.975446e-01, 6.975581e-01, 6.975717e-01, 6.975853e-01, 6.975988e-01, 6.976124e-01, 6.976260e-01, 6.976395e-01, 6.976531e-01, 6.976667e-01, 6.976802e-01, 6.976938e-01, 6.977074e-01, 6.977210e-01, 6.977345e-01, 6.977481e-01, 6.977617e-01, 6.977753e-01, 6.977888e-01, 6.978024e-01, 6.978160e-01, 6.978296e-01, 6.978431e-01, 6.978567e-01, 6.978703e-01, 6.978838e-01, 6.978974e-01, 6.979110e-01, 6.979246e-01, 6.979381e-01, 6.979517e-01, 6.979653e-01, 6.979789e-01, 6.979924e-01, 6.980060e-01, 6.980196e-01, 6.980331e-01, 6.980467e-01, 6.980603e-01, 6.980739e-01, 6.980874e-01, 6.981010e-01, 6.981146e-01, 6.981281e-01, 6.981417e-01, 6.981552e-01, 6.981688e-01, 6.981824e-01, 6.981959e-01, 6.982095e-01, 6.982231e-01, 6.982366e-01, 6.982502e-01, 6.982638e-01, 6.982774e-01, 6.982909e-01, 6.983045e-01, 6.983181e-01, 6.983317e-01, 6.983452e-01, 6.983588e-01, 6.983723e-01, 6.983859e-01, 6.983994e-01, 6.984130e-01, 6.984265e-01, 6.984401e-01, 6.984537e-01, 6.984673e-01, 6.984808e-01, 6.984944e-01, 6.985080e-01, 6.985216e-01, 6.985351e-01, 6.985487e-01, 6.985622e-01, 6.985758e-01, 6.985894e-01, 6.986029e-01, 6.986165e-01, 6.986301e-01, 6.986436e-01, 6.986572e-01, 6.986707e-01, 6.986843e-01, 6.986979e-01, 6.987115e-01, 6.987250e-01, 6.987386e-01, 6.987522e-01, 6.987657e-01, 6.987793e-01, 6.987928e-01, 6.988064e-01, 6.988199e-01, 6.988335e-01, 6.988471e-01, 6.988606e-01, 6.988742e-01, 6.988878e-01, 6.989014e-01, 6.989149e-01, 6.989285e-01, 6.989420e-01, 6.989555e-01, 6.989691e-01, 6.989827e-01, 6.989962e-01, 6.990098e-01, 6.990234e-01, 6.990370e-01, 6.990505e-01, 6.990640e-01, 6.990776e-01, 6.990911e-01, 6.991047e-01, 6.991183e-01, 6.991318e-01, 6.991454e-01, 6.991590e-01, 6.991725e-01, 6.991861e-01, 6.991996e-01, 6.992132e-01, 6.992267e-01, 6.992403e-01, 6.992539e-01, 6.992674e-01, 6.992810e-01, 6.992945e-01, 6.993081e-01, 6.993217e-01, 6.993352e-01, 6.993488e-01, 6.993623e-01, 6.993759e-01, 6.993895e-01, 6.994030e-01, 6.994166e-01, 6.994301e-01, 6.994437e-01, 6.994572e-01, 6.994708e-01, 6.994843e-01, 6.994979e-01, 6.995115e-01, 6.995250e-01, 6.995386e-01, 6.995521e-01, 6.995656e-01, 6.995792e-01, 6.995928e-01, 6.996064e-01, 6.996199e-01, 6.996335e-01, 6.996470e-01, 6.996605e-01, 6.996741e-01, 6.996877e-01, 6.997012e-01, 6.997148e-01, 6.997283e-01, 6.997419e-01, 6.997554e-01, 6.997690e-01, 6.997826e-01, 6.997961e-01, 6.998097e-01, 6.998232e-01, 6.998367e-01, 6.998503e-01, 6.998639e-01, 6.998774e-01, 6.998910e-01, 6.999045e-01, 6.999180e-01, 6.999316e-01, 6.999452e-01, 6.999587e-01, 6.999723e-01, 6.999858e-01, 6.999993e-01, 7.000129e-01, 7.000265e-01, 7.000400e-01, 7.000536e-01, 7.000671e-01, 7.000806e-01, 7.000942e-01, 7.001078e-01, 7.001213e-01, 7.001349e-01, 7.001484e-01, 7.001620e-01, 7.001755e-01, 7.001891e-01, 7.002026e-01, 7.002162e-01, 7.002297e-01, 7.002433e-01, 7.002568e-01, 7.002704e-01, 7.002839e-01, 7.002975e-01, 7.003110e-01, 7.003246e-01, 7.003381e-01, 7.003517e-01, 7.003652e-01, 7.003788e-01, 7.003923e-01, 7.004058e-01, 7.004194e-01, 7.004329e-01, 7.004465e-01, 7.004601e-01, 7.004736e-01, 7.004871e-01, 7.005007e-01, 7.005143e-01, 7.005278e-01, 7.005413e-01, 7.005548e-01, 7.005684e-01, 7.005820e-01, 7.005955e-01, 7.006090e-01, 7.006226e-01, 7.006361e-01, 7.006497e-01, 7.006632e-01, 7.006767e-01, 7.006903e-01, 7.007039e-01, 7.007174e-01, 7.007309e-01, 7.007445e-01, 7.007580e-01, 7.007716e-01, 7.007851e-01, 7.007986e-01, 7.008122e-01, 7.008258e-01, 7.008393e-01, 7.008528e-01, 7.008663e-01, 7.008799e-01, 7.008935e-01, 7.009070e-01, 7.009205e-01, 7.009341e-01, 7.009476e-01, 7.009612e-01, 7.009747e-01, 7.009882e-01, 7.010018e-01, 7.010154e-01, 7.010289e-01, 7.010424e-01, 7.010559e-01, 7.010695e-01, 7.010831e-01, 7.010966e-01, 7.011101e-01, 7.011237e-01, 7.011372e-01, 7.011507e-01, 7.011643e-01, 7.011778e-01, 7.011914e-01, 7.012049e-01, 7.012184e-01, 7.012320e-01, 7.012455e-01, 7.012591e-01, 7.012726e-01, 7.012862e-01, 7.012997e-01, 7.013132e-01, 7.013268e-01, 7.013403e-01, 7.013538e-01, 7.013674e-01, 7.013809e-01, 7.013945e-01, 7.014080e-01, 7.014215e-01, 7.014351e-01, 7.014486e-01, 7.014621e-01, 7.014757e-01, 7.014893e-01, 7.015027e-01, 7.015163e-01, 7.015298e-01, 7.015434e-01, 7.015569e-01, 7.015705e-01, 7.015840e-01, 7.015975e-01, 7.016110e-01, 7.016246e-01, 7.016382e-01, 7.016517e-01, 7.016652e-01, 7.016787e-01, 7.016923e-01, 7.017058e-01, 7.017193e-01, 7.017329e-01, 7.017464e-01, 7.017599e-01, 7.017735e-01, 7.017871e-01, 7.018005e-01, 7.018141e-01, 7.018276e-01, 7.018412e-01, 7.018546e-01, 7.018682e-01, 7.018818e-01, 7.018953e-01, 7.019088e-01, 7.019224e-01, 7.019359e-01, 7.019494e-01, 7.019629e-01, 7.019765e-01, 7.019900e-01, 7.020035e-01, 7.020171e-01, 7.020306e-01, 7.020441e-01, 7.020577e-01, 7.020712e-01, 7.020847e-01, 7.020983e-01, 7.021118e-01, 7.021253e-01, 7.021388e-01, 7.021524e-01, 7.021659e-01, 7.021794e-01, 7.021930e-01, 7.022065e-01, 7.022200e-01, 7.022336e-01, 7.022471e-01, 7.022606e-01, 7.022741e-01, 7.022877e-01, 7.023012e-01, 7.023147e-01, 7.023283e-01, 7.023418e-01, 7.023553e-01, 7.023689e-01, 7.023824e-01, 7.023959e-01, 7.024094e-01, 7.024230e-01, 7.024365e-01, 7.024500e-01, 7.024636e-01, 7.024771e-01, 7.024906e-01, 7.025042e-01, 7.025176e-01, 7.025312e-01, 7.025447e-01, 7.025582e-01, 7.025718e-01, 7.025853e-01, 7.025988e-01, 7.026124e-01, 7.026259e-01, 7.026394e-01, 7.026530e-01, 7.026665e-01, 7.026800e-01, 7.026935e-01, 7.027071e-01, 7.027205e-01, 7.027341e-01, 7.027476e-01, 7.027611e-01, 7.027747e-01, 7.027882e-01, 7.028017e-01, 7.028152e-01, 7.028288e-01, 7.028423e-01, 7.028558e-01, 7.028694e-01, 7.028829e-01, 7.028964e-01, 7.029099e-01, 7.029235e-01, 7.029369e-01, 7.029505e-01, 7.029640e-01, 7.029775e-01, 7.029910e-01, 7.030046e-01, 7.030181e-01, 7.030316e-01, 7.030452e-01, 7.030587e-01, 7.030722e-01, 7.030857e-01, 7.030993e-01, 7.031128e-01, 7.031263e-01, 7.031398e-01, 7.031534e-01, 7.031668e-01, 7.031804e-01, 7.031939e-01, 7.032074e-01, 7.032210e-01, 7.032344e-01, 7.032480e-01, 7.032615e-01, 7.032750e-01, 7.032885e-01, 7.033021e-01, 7.033156e-01, 7.033291e-01, 7.033426e-01, 7.033561e-01, 7.033697e-01, 7.033831e-01, 7.033967e-01, 7.034102e-01, 7.034237e-01, 7.034373e-01, 7.034507e-01, 7.034643e-01, 7.034778e-01, 7.034913e-01, 7.035049e-01, 7.035184e-01, 7.035319e-01, 7.035454e-01, 7.035589e-01, 7.035725e-01, 7.035860e-01, 7.035995e-01, 7.036130e-01, 7.036265e-01, 7.036400e-01, 7.036535e-01, 7.036670e-01, 7.036806e-01, 7.036941e-01, 7.037076e-01, 7.037211e-01, 7.037346e-01, 7.037482e-01, 7.037616e-01, 7.037752e-01, 7.037887e-01, 7.038022e-01, 7.038158e-01, 7.038292e-01, 7.038428e-01, 7.038563e-01, 7.038698e-01, 7.038833e-01, 7.038968e-01, 7.039104e-01, 7.039238e-01, 7.039374e-01, 7.039509e-01, 7.039644e-01, 7.039779e-01, 7.039914e-01, 7.040049e-01, 7.040185e-01, 7.040319e-01, 7.040455e-01, 7.040589e-01, 7.040725e-01, 7.040860e-01, 7.040995e-01, 7.041131e-01, 7.041265e-01, 7.041401e-01, 7.041535e-01, 7.041671e-01, 7.041806e-01, 7.041941e-01, 7.042076e-01, 7.042211e-01, 7.042347e-01, 7.042481e-01, 7.042617e-01, 7.042752e-01, 7.042887e-01, 7.043022e-01, 7.043157e-01, 7.043293e-01, 7.043427e-01, 7.043563e-01, 7.043697e-01, 7.043833e-01, 7.043968e-01, 7.044103e-01, 7.044238e-01, 7.044373e-01, 7.044508e-01, 7.044643e-01, 7.044778e-01, 7.044913e-01, 7.045048e-01, 7.045183e-01, 7.045318e-01, 7.045454e-01, 7.045588e-01, 7.045724e-01, 7.045859e-01, 7.045994e-01, 7.046129e-01, 7.046264e-01, 7.046399e-01, 7.046534e-01, 7.046669e-01, 7.046804e-01, 7.046940e-01, 7.047074e-01, 7.047210e-01, 7.047344e-01, 7.047480e-01, 7.047614e-01, 7.047750e-01, 7.047885e-01, 7.048020e-01, 7.048155e-01, 7.048290e-01, 7.048425e-01, 7.048560e-01, 7.048695e-01, 7.048830e-01, 7.048966e-01, 7.049100e-01, 7.049236e-01, 7.049370e-01, 7.049506e-01, 7.049640e-01, 7.049776e-01, 7.049910e-01, 7.050046e-01, 7.050180e-01, 7.050316e-01, 7.050451e-01, 7.050586e-01, 7.050721e-01, 7.050856e-01, 7.050991e-01, 7.051126e-01, 7.051261e-01, 7.051396e-01, 7.051531e-01, 7.051666e-01, 7.051801e-01, 7.051936e-01, 7.052071e-01, 7.052206e-01, 7.052341e-01, 7.052476e-01, 7.052611e-01, 7.052746e-01, 7.052881e-01, 7.053016e-01, 7.053151e-01, 7.053286e-01, 7.053421e-01, 7.053556e-01, 7.053691e-01, 7.053826e-01, 7.053961e-01, 7.054096e-01, 7.054231e-01, 7.054366e-01, 7.054501e-01, 7.054636e-01, 7.054771e-01, 7.054906e-01, 7.055041e-01, 7.055176e-01, 7.055311e-01, 7.055447e-01, 7.055581e-01, 7.055717e-01, 7.055851e-01, 7.055987e-01, 7.056121e-01, 7.056257e-01, 7.056391e-01, 7.056527e-01, 7.056661e-01, 7.056797e-01, 7.056931e-01, 7.057067e-01, 7.057201e-01, 7.057336e-01, 7.057471e-01, 7.057606e-01, 7.057741e-01, 7.057876e-01, 7.058011e-01, 7.058146e-01, 7.058281e-01, 7.058416e-01, 7.058551e-01, 7.058686e-01, 7.058821e-01, 7.058955e-01, 7.059091e-01, 7.059225e-01, 7.059361e-01, 7.059495e-01, 7.059631e-01, 7.059765e-01, 7.059900e-01, 7.060035e-01, 7.060170e-01, 7.060305e-01, 7.060440e-01, 7.060575e-01, 7.060710e-01, 7.060845e-01, 7.060980e-01, 7.061115e-01, 7.061250e-01, 7.061385e-01, 7.061520e-01, 7.061654e-01, 7.061790e-01, 7.061924e-01, 7.062060e-01, 7.062194e-01, 7.062330e-01, 7.062464e-01, 7.062599e-01, 7.062734e-01, 7.062869e-01, 7.063004e-01, 7.063138e-01, 7.063274e-01, 7.063408e-01, 7.063544e-01, 7.063679e-01, 7.063813e-01, 7.063949e-01, 7.064083e-01, 7.064219e-01, 7.064353e-01, 7.064488e-01, 7.064623e-01, 7.064758e-01, 7.064893e-01, 7.065027e-01, 7.065163e-01, 7.065297e-01, 7.065433e-01, 7.065567e-01, 7.065702e-01, 7.065837e-01, 7.065971e-01, 7.066107e-01, 7.066242e-01, 7.066377e-01, 7.066512e-01, 7.066646e-01, 7.066782e-01, 7.066916e-01, 7.067051e-01, 7.067186e-01, 7.067321e-01, 7.067456e-01, 7.067590e-01, 7.067726e-01, 7.067860e-01, 7.067995e-01, 7.068130e-01, 7.068265e-01, 7.068400e-01, 7.068534e-01, 7.068670e-01, 7.068805e-01, 7.068939e-01, 7.069075e-01, 7.069209e-01, 7.069344e-01, 7.069479e-01, 7.069613e-01, 7.069749e-01, 7.069883e-01, 7.070018e-01, 7.070153e-01, 7.070287e-01, 7.070423e-01, 7.070557e-01, 7.070692e-01, 7.070827e-01, 7.070962e-01, 7.071097e-01, 7.071232e-01, 7.071367e-01, 7.071502e-01, 7.071636e-01, 7.071771e-01, 7.071906e-01, 7.072041e-01, 7.072176e-01, 7.072310e-01, 7.072445e-01, 7.072580e-01, 7.072715e-01, 7.072850e-01, 7.072985e-01, 7.073119e-01, 7.073255e-01, 7.073389e-01, 7.073524e-01, 7.073659e-01, 7.073793e-01, 7.073929e-01, 7.074063e-01, 7.074198e-01, 7.074333e-01, 7.074468e-01, 7.074603e-01, 7.074737e-01, 7.074872e-01, 7.075007e-01, 7.075142e-01, 7.075276e-01, 7.075412e-01, 7.075546e-01, 7.075681e-01, 7.075816e-01, 7.075951e-01, 7.076085e-01, 7.076220e-01, 7.076355e-01, 7.076490e-01, 7.076624e-01, 7.076759e-01, 7.076894e-01, 7.077029e-01, 7.077163e-01, 7.077298e-01, 7.077433e-01, 7.077568e-01, 7.077703e-01, 7.077838e-01, 7.077972e-01, 7.078107e-01, 7.078242e-01, 7.078377e-01, 7.078511e-01, 7.078646e-01, 7.078781e-01, 7.078916e-01, 7.079051e-01, 7.079185e-01, 7.079320e-01, 7.079455e-01, 7.079590e-01, 7.079724e-01, 7.079859e-01, 7.079994e-01, 7.080128e-01, 7.080263e-01, 7.080398e-01, 7.080533e-01, 7.080668e-01, 7.080802e-01, 7.080937e-01, 7.081072e-01, 7.081207e-01, 7.081341e-01, 7.081476e-01, 7.081611e-01, 7.081745e-01, 7.081881e-01, 7.082015e-01, 7.082150e-01, 7.082285e-01, 7.082419e-01, 7.082554e-01, 7.082689e-01, 7.082824e-01, 7.082958e-01, 7.083093e-01, 7.083228e-01, 7.083362e-01, 7.083497e-01, 7.083632e-01, 7.083766e-01, 7.083901e-01, 7.084036e-01, 7.084171e-01, 7.084305e-01, 7.084441e-01, 7.084575e-01, 7.084709e-01, 7.084845e-01, 7.084979e-01, 7.085114e-01, 7.085249e-01, 7.085384e-01, 7.085518e-01, 7.085653e-01, 7.085788e-01, 7.085922e-01, 7.086056e-01, 7.086192e-01, 7.086326e-01, 7.086461e-01, 7.086596e-01, 7.086731e-01, 7.086865e-01, 7.086999e-01, 7.087135e-01, 7.087269e-01, 7.087404e-01, 7.087539e-01, 7.087674e-01, 7.087808e-01, 7.087942e-01, 7.088078e-01, 7.088212e-01, 7.088346e-01, 7.088481e-01, 7.088616e-01, 7.088751e-01, 7.088885e-01, 7.089020e-01, 7.089155e-01, 7.089289e-01, 7.089424e-01, 7.089559e-01, 7.089694e-01, 7.089828e-01, 7.089963e-01, 7.090098e-01, 7.090232e-01, 7.090367e-01, 7.090502e-01, 7.090636e-01, 7.090771e-01, 7.090905e-01, 7.091040e-01, 7.091175e-01, 7.091309e-01, 7.091444e-01, 7.091579e-01, 7.091713e-01, 7.091848e-01, 7.091983e-01, 7.092117e-01, 7.092252e-01, 7.092386e-01, 7.092521e-01, 7.092656e-01, 7.092791e-01, 7.092925e-01, 7.093060e-01, 7.093194e-01, 7.093329e-01, 7.093464e-01, 7.093599e-01, 7.093733e-01, 7.093868e-01, 7.094002e-01, 7.094137e-01, 7.094271e-01, 7.094406e-01, 7.094541e-01, 7.094675e-01, 7.094810e-01, 7.094945e-01, 7.095079e-01, 7.095214e-01, 7.095348e-01, 7.095483e-01, 7.095618e-01, 7.095752e-01, 7.095887e-01, 7.096022e-01, 7.096156e-01, 7.096291e-01, 7.096425e-01, 7.096560e-01, 7.096695e-01, 7.096829e-01, 7.096964e-01, 7.097098e-01, 7.097233e-01, 7.097368e-01, 7.097502e-01, 7.097636e-01, 7.097771e-01, 7.097906e-01, 7.098041e-01, 7.098175e-01, 7.098310e-01, 7.098445e-01, 7.098579e-01, 7.098714e-01, 7.098848e-01, 7.098983e-01, 7.099118e-01, 7.099252e-01, 7.099386e-01, 7.099521e-01, 7.099656e-01, 7.099791e-01, 7.099925e-01, 7.100059e-01, 7.100194e-01, 7.100329e-01, 7.100464e-01, 7.100598e-01, 7.100732e-01, 7.100867e-01, 7.101002e-01, 7.101136e-01, 7.101271e-01, 7.101405e-01, 7.101539e-01, 7.101674e-01, 7.101809e-01, 7.101943e-01, 7.102078e-01, 7.102212e-01, 7.102347e-01, 7.102482e-01, 7.102616e-01, 7.102751e-01, 7.102885e-01, 7.103020e-01, 7.103154e-01, 7.103289e-01, 7.103423e-01, 7.103558e-01, 7.103692e-01, 7.103827e-01, 7.103961e-01, 7.104096e-01, 7.104231e-01, 7.104365e-01, 7.104500e-01, 7.104634e-01, 7.104769e-01, 7.104903e-01, 7.105038e-01, 7.105172e-01, 7.105307e-01, 7.105441e-01, 7.105576e-01, 7.105711e-01, 7.105845e-01, 7.105979e-01, 7.106114e-01, 7.106248e-01, 7.106383e-01, 7.106518e-01, 7.106652e-01, 7.106786e-01, 7.106921e-01, 7.107055e-01, 7.107190e-01, 7.107325e-01, 7.107459e-01, 7.107593e-01, 7.107728e-01, 7.107862e-01, 7.107997e-01, 7.108132e-01, 7.108266e-01, 7.108400e-01, 7.108535e-01, 7.108669e-01, 7.108804e-01, 7.108939e-01, 7.109073e-01, 7.109208e-01, 7.109342e-01, 7.109476e-01, 7.109611e-01, 7.109746e-01, 7.109880e-01, 7.110015e-01, 7.110149e-01, 7.110283e-01, 7.110418e-01, 7.110552e-01, 7.110687e-01, 7.110822e-01, 7.110956e-01, 7.111090e-01, 7.111225e-01, 7.111359e-01, 7.111494e-01, 7.111628e-01, 7.111763e-01, 7.111897e-01, 7.112032e-01, 7.112166e-01, 7.112300e-01, 7.112435e-01, 7.112570e-01, 7.112704e-01, 7.112838e-01, 7.112973e-01, 7.113107e-01, 7.113242e-01, 7.113376e-01, 7.113511e-01, 7.113645e-01, 7.113779e-01, 7.113914e-01, 7.114048e-01, 7.114183e-01, 7.114317e-01, 7.114452e-01, 7.114586e-01, 7.114720e-01, 7.114854e-01, 7.114989e-01, 7.115124e-01, 7.115258e-01, 7.115393e-01, 7.115527e-01, 7.115662e-01, 7.115796e-01, 7.115930e-01, 7.116064e-01, 7.116199e-01, 7.116334e-01, 7.116468e-01, 7.116603e-01, 7.116737e-01, 7.116871e-01, 7.117006e-01, 7.117140e-01, 7.117274e-01, 7.117409e-01, 7.117543e-01, 7.117678e-01, 7.117813e-01, 7.117947e-01, 7.118081e-01, 7.118216e-01, 7.118350e-01, 7.118484e-01, 7.118618e-01, 7.118753e-01, 7.118887e-01, 7.119022e-01, 7.119157e-01, 7.119291e-01, 7.119425e-01, 7.119559e-01, 7.119694e-01, 7.119828e-01, 7.119963e-01, 7.120097e-01, 7.120231e-01, 7.120366e-01, 7.120500e-01, 7.120635e-01, 7.120769e-01, 7.120903e-01, 7.121037e-01, 7.121172e-01, 7.121306e-01, 7.121441e-01, 7.121575e-01, 7.121710e-01, 7.121844e-01, 7.121978e-01, 7.122113e-01, 7.122247e-01, 7.122381e-01, 7.122515e-01, 7.122650e-01, 7.122784e-01, 7.122919e-01, 7.123053e-01, 7.123188e-01, 7.123322e-01, 7.123457e-01, 7.123591e-01, 7.123725e-01, 7.123860e-01, 7.123994e-01, 7.124128e-01, 7.124262e-01, 7.124397e-01, 7.124531e-01, 7.124665e-01, 7.124799e-01, 7.124934e-01, 7.125068e-01, 7.125203e-01, 7.125337e-01, 7.125472e-01, 7.125606e-01, 7.125740e-01, 7.125875e-01, 7.126009e-01, 7.126143e-01, 7.126278e-01, 7.126412e-01, 7.126546e-01, 7.126680e-01, 7.126815e-01, 7.126949e-01, 7.127084e-01, 7.127218e-01, 7.127352e-01, 7.127486e-01, 7.127621e-01, 7.127755e-01, 7.127889e-01, 7.128024e-01, 7.128158e-01, 7.128292e-01, 7.128427e-01, 7.128561e-01, 7.128695e-01, 7.128829e-01, 7.128964e-01, 7.129098e-01, 7.129232e-01, 7.129366e-01, 7.129501e-01, 7.129635e-01, 7.129769e-01, 7.129904e-01, 7.130038e-01, 7.130172e-01, 7.130307e-01, 7.130441e-01, 7.130575e-01, 7.130710e-01, 7.130844e-01, 7.130978e-01, 7.131113e-01, 7.131247e-01, 7.131381e-01, 7.131516e-01, 7.131650e-01, 7.131784e-01, 7.131919e-01, 7.132053e-01, 7.132187e-01, 7.132321e-01, 7.132456e-01, 7.132590e-01, 7.132724e-01, 7.132858e-01, 7.132993e-01, 7.133127e-01, 7.133261e-01, 7.133395e-01, 7.133529e-01, 7.133664e-01, 7.133798e-01, 7.133932e-01, 7.134066e-01, 7.134201e-01, 7.134335e-01, 7.134469e-01, 7.134603e-01, 7.134737e-01, 7.134872e-01, 7.135006e-01, 7.135140e-01, 7.135274e-01, 7.135409e-01, 7.135543e-01, 7.135677e-01, 7.135811e-01, 7.135946e-01, 7.136080e-01, 7.136214e-01, 7.136348e-01, 7.136483e-01, 7.136617e-01, 7.136751e-01, 7.136886e-01, 7.137020e-01, 7.137154e-01, 7.137288e-01, 7.137423e-01, 7.137557e-01, 7.137691e-01, 7.137825e-01, 7.137960e-01, 7.138094e-01, 7.138228e-01, 7.138362e-01, 7.138496e-01, 7.138631e-01, 7.138765e-01, 7.138899e-01, 7.139033e-01, 7.139168e-01, 7.139302e-01, 7.139436e-01, 7.139570e-01, 7.139704e-01, 7.139838e-01, 7.139973e-01, 7.140107e-01, 7.140241e-01, 7.140375e-01, 7.140509e-01, 7.140644e-01, 7.140778e-01, 7.140912e-01, 7.141047e-01, 7.141181e-01, 7.141315e-01, 7.141449e-01, 7.141583e-01, 7.141717e-01, 7.141851e-01, 7.141985e-01, 7.142119e-01, 7.142254e-01, 7.142388e-01, 7.142522e-01, 7.142656e-01, 7.142791e-01, 7.142925e-01, 7.143059e-01, 7.143193e-01, 7.143328e-01, 7.143462e-01, 7.143596e-01, 7.143730e-01, 7.143864e-01, 7.143998e-01, 7.144132e-01, 7.144266e-01, 7.144400e-01, 7.144535e-01, 7.144669e-01, 7.144803e-01, 7.144937e-01, 7.145071e-01, 7.145205e-01, 7.145339e-01, 7.145474e-01, 7.145608e-01, 7.145742e-01, 7.145876e-01, 7.146010e-01, 7.146145e-01, 7.146279e-01, 7.146413e-01, 7.146547e-01, 7.146681e-01, 7.146815e-01, 7.146949e-01, 7.147083e-01, 7.147217e-01, 7.147352e-01, 7.147486e-01, 7.147620e-01, 7.147754e-01, 7.147889e-01, 7.148023e-01, 7.148157e-01, 7.148291e-01, 7.148425e-01, 7.148559e-01, 7.148693e-01, 7.148827e-01, 7.148961e-01, 7.149096e-01, 7.149230e-01, 7.149364e-01, 7.149498e-01, 7.149632e-01, 7.149766e-01, 7.149900e-01, 7.150034e-01, 7.150168e-01, 7.150303e-01, 7.150437e-01, 7.150571e-01, 7.150705e-01, 7.150839e-01, 7.150973e-01, 7.151107e-01, 7.151241e-01, 7.151375e-01, 7.151510e-01, 7.151644e-01, 7.151778e-01, 7.151912e-01, 7.152046e-01, 7.152179e-01, 7.152314e-01, 7.152448e-01, 7.152582e-01, 7.152717e-01, 7.152851e-01, 7.152985e-01, 7.153118e-01, 7.153252e-01, 7.153386e-01, 7.153521e-01, 7.153655e-01, 7.153789e-01, 7.153923e-01, 7.154057e-01, 7.154191e-01, 7.154325e-01, 7.154459e-01, 7.154593e-01, 7.154727e-01, 7.154861e-01, 7.154995e-01, 7.155130e-01, 7.155264e-01, 7.155398e-01, 7.155532e-01, 7.155666e-01, 7.155800e-01, 7.155933e-01, 7.156068e-01, 7.156202e-01, 7.156336e-01, 7.156470e-01, 7.156604e-01, 7.156738e-01, 7.156872e-01, 7.157006e-01, 7.157140e-01, 7.157274e-01, 7.157409e-01, 7.157543e-01, 7.157676e-01, 7.157810e-01, 7.157944e-01, 7.158079e-01, 7.158213e-01, 7.158347e-01, 7.158481e-01, 7.158615e-01, 7.158749e-01, 7.158883e-01, 7.159017e-01, 7.159151e-01, 7.159285e-01, 7.159419e-01, 7.159553e-01, 7.159687e-01, 7.159821e-01, 7.159955e-01, 7.160089e-01, 7.160223e-01, 7.160357e-01, 7.160491e-01, 7.160625e-01, 7.160759e-01, 7.160893e-01, 7.161027e-01, 7.161161e-01, 7.161295e-01, 7.161429e-01, 7.161563e-01, 7.161697e-01, 7.161831e-01, 7.161965e-01, 7.162099e-01, 7.162233e-01, 7.162367e-01, 7.162501e-01, 7.162635e-01, 7.162769e-01, 7.162903e-01, 7.163037e-01, 7.163171e-01, 7.163305e-01, 7.163439e-01, 7.163573e-01, 7.163707e-01, 7.163841e-01, 7.163975e-01, 7.164109e-01, 7.164243e-01, 7.164377e-01, 7.164511e-01, 7.164645e-01, 7.164779e-01, 7.164913e-01, 7.165046e-01, 7.165180e-01, 7.165315e-01, 7.165449e-01, 7.165582e-01, 7.165716e-01, 7.165850e-01, 7.165985e-01, 7.166119e-01, 7.166252e-01, 7.166386e-01, 7.166520e-01, 7.166654e-01, 7.166789e-01, 7.166922e-01, 7.167056e-01, 7.167190e-01, 7.167324e-01, 7.167458e-01, 7.167592e-01, 7.167726e-01, 7.167860e-01, 7.167994e-01, 7.168128e-01, 7.168261e-01, 7.168396e-01, 7.168529e-01, 7.168663e-01, 7.168797e-01, 7.168931e-01, 7.169065e-01, 7.169199e-01, 7.169333e-01, 7.169467e-01, 7.169601e-01, 7.169735e-01, 7.169868e-01, 7.170002e-01, 7.170137e-01, 7.170271e-01, 7.170404e-01, 7.170538e-01, 7.170672e-01, 7.170807e-01, 7.170940e-01, 7.171074e-01, 7.171208e-01, 7.171342e-01, 7.171476e-01, 7.171609e-01, 7.171744e-01, 7.171877e-01, 7.172012e-01, 7.172145e-01, 7.172279e-01, 7.172413e-01, 7.172547e-01, 7.172681e-01, 7.172815e-01, 7.172949e-01, 7.173082e-01, 7.173216e-01, 7.173350e-01, 7.173484e-01, 7.173618e-01, 7.173752e-01, 7.173886e-01, 7.174020e-01, 7.174153e-01, 7.174287e-01, 7.174422e-01, 7.174556e-01, 7.174689e-01, 7.174823e-01, 7.174957e-01, 7.175091e-01, 7.175224e-01, 7.175359e-01, 7.175493e-01, 7.175627e-01, 7.175760e-01, 7.175894e-01, 7.176028e-01, 7.176162e-01, 7.176296e-01, 7.176430e-01, 7.176563e-01, 7.176697e-01, 7.176831e-01, 7.176965e-01, 7.177099e-01, 7.177233e-01, 7.177367e-01, 7.177500e-01, 7.177634e-01, 7.177768e-01, 7.177902e-01, 7.178036e-01, 7.178169e-01, 7.178304e-01, 7.178437e-01, 7.178571e-01, 7.178705e-01, 7.178839e-01, 7.178973e-01, 7.179106e-01, 7.179241e-01, 7.179375e-01, 7.179508e-01, 7.179642e-01, 7.179776e-01, 7.179910e-01, 7.180043e-01, 7.180177e-01, 7.180311e-01, 7.180445e-01, 7.180579e-01, 7.180712e-01, 7.180846e-01, 7.180980e-01, 7.181114e-01, 7.181248e-01, 7.181382e-01, 7.181516e-01, 7.181649e-01, 7.181783e-01, 7.181917e-01, 7.182051e-01, 7.182184e-01, 7.182319e-01, 7.182452e-01, 7.182586e-01, 7.182720e-01, 7.182854e-01, 7.182987e-01, 7.183121e-01, 7.183255e-01, 7.183389e-01, 7.183523e-01, 7.183657e-01, 7.183790e-01, 7.183924e-01, 7.184058e-01, 7.184192e-01, 7.184325e-01, 7.184459e-01, 7.184593e-01, 7.184727e-01, 7.184861e-01, 7.184994e-01, 7.185128e-01, 7.185262e-01, 7.185395e-01, 7.185529e-01, 7.185663e-01, 7.185797e-01, 7.185931e-01, 7.186065e-01, 7.186198e-01, 7.186332e-01, 7.186466e-01, 7.186599e-01, 7.186733e-01, 7.186868e-01, 7.187001e-01, 7.187135e-01, 7.187269e-01, 7.187402e-01, 7.187536e-01, 7.187670e-01, 7.187803e-01, 7.187937e-01, 7.188071e-01, 7.188205e-01, 7.188339e-01, 7.188472e-01, 7.188606e-01, 7.188740e-01, 7.188873e-01, 7.189007e-01, 7.189141e-01, 7.189274e-01, 7.189409e-01, 7.189542e-01, 7.189676e-01, 7.189810e-01, 7.189944e-01, 7.190077e-01, 7.190211e-01, 7.190345e-01, 7.190478e-01, 7.190612e-01, 7.190746e-01, 7.190880e-01, 7.191013e-01, 7.191147e-01, 7.191281e-01, 7.191415e-01, 7.191548e-01, 7.191682e-01, 7.191816e-01, 7.191949e-01, 7.192083e-01, 7.192217e-01, 7.192351e-01, 7.192484e-01, 7.192618e-01, 7.192752e-01, 7.192885e-01, 7.193019e-01, 7.193153e-01, 7.193286e-01, 7.193421e-01, 7.193554e-01, 7.193688e-01, 7.193822e-01, 7.193955e-01, 7.194089e-01, 7.194223e-01, 7.194356e-01, 7.194490e-01, 7.194624e-01, 7.194757e-01, 7.194891e-01, 7.195024e-01, 7.195158e-01, 7.195292e-01, 7.195426e-01, 7.195559e-01, 7.195693e-01, 7.195827e-01, 7.195960e-01, 7.196094e-01, 7.196228e-01, 7.196361e-01, 7.196496e-01, 7.196628e-01, 7.196763e-01, 7.196896e-01, 7.197030e-01, 7.197164e-01, 7.197297e-01, 7.197431e-01, 7.197565e-01, 7.197698e-01, 7.197832e-01, 7.197965e-01, 7.198099e-01, 7.198233e-01, 7.198367e-01, 7.198500e-01, 7.198634e-01, 7.198768e-01, 7.198901e-01, 7.199035e-01, 7.199168e-01, 7.199302e-01, 7.199436e-01, 7.199569e-01, 7.199703e-01, 7.199836e-01, 7.199970e-01, 7.200104e-01, 7.200238e-01, 7.200372e-01, 7.200505e-01, 7.200639e-01, 7.200772e-01, 7.200906e-01, 7.201040e-01, 7.201173e-01, 7.201307e-01, 7.201440e-01, 7.201574e-01, 7.201708e-01, 7.201841e-01, 7.201975e-01, 7.202109e-01, 7.202242e-01, 7.202376e-01, 7.202510e-01, 7.202643e-01, 7.202777e-01, 7.202910e-01, 7.203044e-01, 7.203177e-01, 7.203311e-01, 7.203445e-01, 7.203578e-01, 7.203712e-01, 7.203845e-01, 7.203979e-01, 7.204113e-01, 7.204246e-01, 7.204380e-01, 7.204514e-01, 7.204647e-01, 7.204781e-01, 7.204914e-01, 7.205048e-01, 7.205182e-01, 7.205315e-01, 7.205449e-01, 7.205582e-01, 7.205716e-01, 7.205849e-01, 7.205983e-01, 7.206117e-01, 7.206250e-01, 7.206384e-01, 7.206517e-01, 7.206651e-01, 7.206784e-01, 7.206919e-01, 7.207052e-01, 7.207186e-01, 7.207319e-01, 7.207452e-01, 7.207586e-01, 7.207720e-01, 7.207853e-01, 7.207987e-01, 7.208120e-01, 7.208254e-01, 7.208387e-01, 7.208521e-01, 7.208654e-01, 7.208788e-01, 7.208922e-01, 7.209055e-01, 7.209189e-01, 7.209322e-01, 7.209456e-01, 7.209589e-01, 7.209723e-01, 7.209857e-01, 7.209991e-01, 7.210124e-01, 7.210258e-01, 7.210391e-01, 7.210525e-01, 7.210658e-01, 7.210791e-01, 7.210925e-01, 7.211059e-01, 7.211192e-01, 7.211326e-01, 7.211459e-01, 7.211593e-01, 7.211726e-01, 7.211860e-01, 7.211993e-01, 7.212127e-01, 7.212260e-01, 7.212394e-01, 7.212527e-01, 7.212662e-01, 7.212794e-01, 7.212929e-01, 7.213061e-01, 7.213196e-01, 7.213328e-01, 7.213462e-01, 7.213596e-01, 7.213729e-01, 7.213863e-01, 7.213996e-01, 7.214130e-01, 7.214264e-01, 7.214397e-01, 7.214530e-01, 7.214664e-01, 7.214798e-01, 7.214931e-01, 7.215064e-01, 7.215198e-01, 7.215332e-01, 7.215465e-01, 7.215598e-01, 7.215732e-01, 7.215866e-01, 7.215999e-01, 7.216132e-01, 7.216266e-01, 7.216400e-01, 7.216533e-01, 7.216666e-01, 7.216800e-01, 7.216933e-01, 7.217067e-01, 7.217200e-01, 7.217334e-01, 7.217467e-01, 7.217601e-01, 7.217734e-01, 7.217867e-01, 7.218001e-01, 7.218135e-01, 7.218269e-01, 7.218401e-01, 7.218535e-01, 7.218668e-01, 7.218803e-01, 7.218935e-01, 7.219069e-01, 7.219202e-01, 7.219335e-01, 7.219470e-01, 7.219603e-01, 7.219736e-01, 7.219869e-01, 7.220004e-01, 7.220137e-01, 7.220270e-01, 7.220404e-01, 7.220537e-01, 7.220671e-01, 7.220804e-01, 7.220938e-01, 7.221071e-01, 7.221204e-01, 7.221338e-01, 7.221472e-01, 7.221605e-01, 7.221738e-01, 7.221872e-01, 7.222005e-01, 7.222139e-01, 7.222272e-01, 7.222406e-01, 7.222539e-01, 7.222672e-01, 7.222805e-01, 7.222939e-01, 7.223073e-01, 7.223206e-01, 7.223339e-01, 7.223473e-01, 7.223606e-01, 7.223740e-01, 7.223873e-01, 7.224007e-01, 7.224140e-01, 7.224273e-01, 7.224407e-01, 7.224541e-01, 7.224674e-01, 7.224807e-01, 7.224941e-01, 7.225074e-01, 7.225207e-01, 7.225340e-01, 7.225474e-01, 7.225608e-01, 7.225741e-01, 7.225874e-01, 7.226008e-01, 7.226141e-01, 7.226274e-01, 7.226408e-01, 7.226542e-01, 7.226675e-01, 7.226808e-01, 7.226942e-01, 7.227075e-01, 7.227208e-01, 7.227342e-01, 7.227476e-01, 7.227609e-01, 7.227742e-01, 7.227875e-01, 7.228009e-01, 7.228142e-01, 7.228275e-01, 7.228408e-01, 7.228542e-01, 7.228676e-01, 7.228809e-01, 7.228943e-01, 7.229076e-01, 7.229209e-01, 7.229342e-01, 7.229475e-01, 7.229609e-01, 7.229742e-01, 7.229877e-01, 7.230009e-01, 7.230143e-01, 7.230276e-01, 7.230409e-01, 7.230543e-01, 7.230676e-01, 7.230809e-01, 7.230943e-01, 7.231076e-01, 7.231209e-01, 7.231342e-01, 7.231477e-01, 7.231610e-01, 7.231743e-01, 7.231876e-01, 7.232010e-01, 7.232143e-01, 7.232276e-01, 7.232410e-01, 7.232543e-01, 7.232676e-01, 7.232810e-01, 7.232943e-01, 7.233076e-01, 7.233210e-01, 7.233343e-01, 7.233477e-01, 7.233610e-01, 7.233743e-01, 7.233877e-01, 7.234010e-01, 7.234143e-01, 7.234277e-01, 7.234410e-01, 7.234543e-01, 7.234676e-01, 7.234809e-01, 7.234943e-01, 7.235076e-01, 7.235209e-01, 7.235343e-01, 7.235476e-01, 7.235609e-01, 7.235743e-01, 7.235876e-01, 7.236009e-01, 7.236143e-01, 7.236276e-01, 7.236409e-01, 7.236542e-01, 7.236676e-01, 7.236810e-01, 7.236943e-01, 7.237076e-01, 7.237210e-01, 7.237343e-01, 7.237476e-01, 7.237610e-01, 7.237743e-01, 7.237876e-01, 7.238010e-01, 7.238142e-01, 7.238276e-01, 7.238410e-01, 7.238542e-01, 7.238676e-01, 7.238809e-01, 7.238942e-01, 7.239076e-01, 7.239209e-01, 7.239342e-01, 7.239475e-01, 7.239609e-01, 7.239742e-01, 7.239875e-01, 7.240009e-01, 7.240142e-01, 7.240275e-01, 7.240409e-01, 7.240542e-01, 7.240675e-01, 7.240809e-01, 7.240941e-01, 7.241074e-01, 7.241207e-01, 7.241341e-01, 7.241474e-01, 7.241607e-01, 7.241741e-01, 7.241874e-01, 7.242007e-01, 7.242140e-01, 7.242274e-01, 7.242407e-01, 7.242540e-01, 7.242674e-01, 7.242807e-01, 7.242940e-01, 7.243074e-01, 7.243207e-01, 7.243340e-01, 7.243474e-01, 7.243606e-01, 7.243740e-01, 7.243873e-01, 7.244006e-01, 7.244140e-01, 7.244272e-01, 7.244405e-01, 7.244539e-01, 7.244672e-01, 7.244805e-01, 7.244939e-01, 7.245072e-01, 7.245205e-01, 7.245339e-01, 7.245471e-01, 7.245605e-01, 7.245739e-01, 7.245871e-01, 7.246005e-01, 7.246137e-01, 7.246271e-01, 7.246404e-01, 7.246537e-01, 7.246670e-01, 7.246804e-01, 7.246937e-01, 7.247070e-01, 7.247204e-01, 7.247337e-01, 7.247470e-01, 7.247604e-01, 7.247736e-01, 7.247869e-01, 7.248002e-01, 7.248136e-01, 7.248269e-01, 7.248402e-01, 7.248536e-01, 7.248669e-01, 7.248802e-01, 7.248936e-01, 7.249068e-01, 7.249201e-01, 7.249334e-01, 7.249468e-01, 7.249601e-01, 7.249734e-01, 7.249867e-01, 7.250001e-01, 7.250133e-01, 7.250267e-01, 7.250400e-01, 7.250533e-01, 7.250667e-01, 7.250800e-01, 7.250933e-01, 7.251067e-01, 7.251199e-01, 7.251332e-01, 7.251465e-01, 7.251599e-01, 7.251732e-01, 7.251865e-01, 7.251998e-01, 7.252131e-01, 7.252264e-01, 7.252398e-01, 7.252530e-01, 7.252664e-01, 7.252797e-01, 7.252930e-01, 7.253063e-01, 7.253196e-01, 7.253330e-01, 7.253463e-01, 7.253596e-01, 7.253730e-01, 7.253862e-01, 7.253995e-01, 7.254128e-01, 7.254262e-01, 7.254395e-01, 7.254528e-01, 7.254661e-01, 7.254794e-01, 7.254927e-01, 7.255061e-01, 7.255194e-01, 7.255327e-01, 7.255459e-01, 7.255593e-01, 7.255726e-01, 7.255859e-01, 7.255993e-01, 7.256126e-01, 7.256259e-01, 7.256392e-01, 7.256525e-01, 7.256658e-01, 7.256792e-01, 7.256924e-01, 7.257057e-01, 7.257190e-01, 7.257324e-01, 7.257457e-01, 7.257590e-01, 7.257723e-01, 7.257856e-01, 7.257990e-01, 7.258123e-01, 7.258255e-01, 7.258388e-01, 7.258522e-01, 7.258655e-01, 7.258788e-01, 7.258921e-01, 7.259054e-01, 7.259187e-01, 7.259321e-01, 7.259453e-01, 7.259586e-01, 7.259719e-01, 7.259853e-01, 7.259986e-01, 7.260119e-01, 7.260252e-01, 7.260385e-01, 7.260519e-01, 7.260651e-01, 7.260784e-01, 7.260917e-01, 7.261051e-01, 7.261183e-01, 7.261316e-01, 7.261450e-01, 7.261583e-01, 7.261716e-01, 7.261848e-01, 7.261982e-01, 7.262115e-01, 7.262248e-01, 7.262381e-01, 7.262514e-01, 7.262648e-01, 7.262780e-01, 7.262914e-01, 7.263047e-01, 7.263180e-01, 7.263312e-01, 7.263446e-01, 7.263579e-01, 7.263712e-01, 7.263845e-01, 7.263978e-01, 7.264111e-01, 7.264243e-01, 7.264377e-01, 7.264510e-01, 7.264643e-01, 7.264776e-01, 7.264909e-01, 7.265043e-01, 7.265176e-01, 7.265308e-01, 7.265441e-01, 7.265575e-01, 7.265707e-01, 7.265840e-01, 7.265974e-01, 7.266107e-01, 7.266240e-01, 7.266373e-01, 7.266506e-01, 7.266638e-01, 7.266772e-01, 7.266905e-01, 7.267038e-01, 7.267171e-01, 7.267304e-01, 7.267438e-01, 7.267570e-01, 7.267703e-01, 7.267836e-01, 7.267969e-01, 7.268102e-01, 7.268235e-01, 7.268368e-01, 7.268501e-01, 7.268634e-01, 7.268767e-01, 7.268900e-01, 7.269033e-01, 7.269166e-01, 7.269299e-01, 7.269433e-01, 7.269565e-01, 7.269698e-01, 7.269831e-01, 7.269964e-01, 7.270097e-01, 7.270230e-01, 7.270363e-01, 7.270496e-01, 7.270629e-01, 7.270762e-01, 7.270895e-01, 7.271028e-01, 7.271160e-01, 7.271294e-01, 7.271428e-01, 7.271560e-01, 7.271693e-01, 7.271826e-01, 7.271959e-01, 7.272092e-01, 7.272224e-01, 7.272358e-01, 7.272491e-01, 7.272623e-01, 7.272757e-01, 7.272890e-01, 7.273023e-01, 7.273155e-01, 7.273289e-01, 7.273421e-01, 7.273555e-01, 7.273687e-01, 7.273821e-01, 7.273954e-01, 7.274086e-01, 7.274219e-01, 7.274353e-01, 7.274485e-01, 7.274619e-01, 7.274751e-01, 7.274884e-01, 7.275017e-01, 7.275150e-01, 7.275283e-01, 7.275416e-01, 7.275549e-01, 7.275682e-01, 7.275814e-01, 7.275948e-01, 7.276080e-01, 7.276214e-01, 7.276347e-01, 7.276480e-01, 7.276613e-01, 7.276745e-01, 7.276878e-01, 7.277012e-01, 7.277144e-01, 7.277277e-01, 7.277410e-01, 7.277543e-01, 7.277676e-01, 7.277809e-01, 7.277942e-01, 7.278075e-01, 7.278208e-01, 7.278340e-01, 7.278473e-01, 7.278607e-01, 7.278739e-01, 7.278873e-01, 7.279005e-01, 7.279138e-01, 7.279270e-01, 7.279404e-01, 7.279537e-01, 7.279670e-01, 7.279803e-01, 7.279935e-01, 7.280068e-01, 7.280201e-01, 7.280334e-01, 7.280467e-01, 7.280600e-01, 7.280734e-01, 7.280866e-01, 7.280999e-01, 7.281131e-01, 7.281265e-01, 7.281397e-01, 7.281530e-01, 7.281663e-01, 7.281796e-01, 7.281929e-01, 7.282062e-01, 7.282195e-01, 7.282327e-01, 7.282461e-01, 7.282593e-01, 7.282727e-01, 7.282859e-01, 7.282992e-01, 7.283125e-01, 7.283258e-01, 7.283390e-01, 7.283524e-01, 7.283656e-01, 7.283790e-01, 7.283922e-01, 7.284055e-01, 7.284188e-01, 7.284321e-01, 7.284454e-01, 7.284586e-01, 7.284719e-01, 7.284852e-01, 7.284985e-01, 7.285118e-01, 7.285250e-01, 7.285384e-01, 7.285516e-01, 7.285649e-01, 7.285782e-01, 7.285915e-01, 7.286047e-01, 7.286181e-01, 7.286313e-01, 7.286447e-01, 7.286579e-01, 7.286713e-01, 7.286845e-01, 7.286978e-01, 7.287111e-01, 7.287244e-01, 7.287376e-01, 7.287509e-01, 7.287642e-01, 7.287775e-01, 7.287908e-01, 7.288041e-01, 7.288173e-01, 7.288306e-01, 7.288439e-01, 7.288572e-01, 7.288705e-01, 7.288837e-01, 7.288970e-01, 7.289103e-01, 7.289236e-01, 7.289369e-01, 7.289502e-01, 7.289634e-01, 7.289767e-01, 7.289900e-01, 7.290033e-01, 7.290165e-01, 7.290298e-01, 7.290431e-01, 7.290564e-01, 7.290697e-01, 7.290829e-01, 7.290963e-01, 7.291095e-01, 7.291229e-01, 7.291361e-01, 7.291493e-01, 7.291627e-01, 7.291759e-01, 7.291892e-01, 7.292025e-01, 7.292158e-01, 7.292290e-01, 7.292423e-01, 7.292556e-01, 7.292688e-01, 7.292822e-01, 7.292954e-01, 7.293088e-01, 7.293220e-01, 7.293352e-01, 7.293486e-01, 7.293618e-01, 7.293751e-01, 7.293884e-01, 7.294016e-01, 7.294149e-01, 7.294282e-01, 7.294415e-01, 7.294548e-01, 7.294680e-01, 7.294813e-01, 7.294946e-01, 7.295079e-01, 7.295212e-01, 7.295344e-01, 7.295477e-01, 7.295610e-01, 7.295743e-01, 7.295876e-01, 7.296008e-01, 7.296141e-01, 7.296274e-01, 7.296407e-01, 7.296540e-01, 7.296672e-01, 7.296805e-01, 7.296938e-01, 7.297070e-01, 7.297203e-01, 7.297336e-01, 7.297469e-01, 7.297601e-01, 7.297734e-01, 7.297867e-01, 7.297999e-01, 7.298132e-01, 7.298265e-01, 7.298397e-01, 7.298530e-01, 7.298663e-01, 7.298796e-01, 7.298929e-01, 7.299061e-01, 7.299194e-01, 7.299327e-01, 7.299460e-01, 7.299592e-01, 7.299725e-01, 7.299858e-01, 7.299990e-01, 7.300124e-01, 7.300256e-01, 7.300388e-01, 7.300522e-01, 7.300654e-01, 7.300786e-01, 7.300920e-01, 7.301052e-01, 7.301185e-01, 7.301318e-01, 7.301450e-01, 7.301583e-01, 7.301716e-01, 7.301849e-01, 7.301981e-01, 7.302114e-01, 7.302247e-01, 7.302379e-01, 7.302513e-01, 7.302645e-01, 7.302777e-01, 7.302911e-01, 7.303043e-01, 7.303175e-01, 7.303308e-01, 7.303441e-01, 7.303573e-01, 7.303706e-01, 7.303839e-01, 7.303972e-01, 7.304104e-01, 7.304237e-01, 7.304370e-01, 7.304502e-01, 7.304634e-01, 7.304768e-01, 7.304900e-01, 7.305033e-01, 7.305166e-01, 7.305298e-01, 7.305431e-01, 7.305564e-01, 7.305697e-01, 7.305829e-01, 7.305961e-01, 7.306095e-01, 7.306227e-01, 7.306359e-01, 7.306492e-01, 7.306625e-01, 7.306758e-01, 7.306890e-01, 7.307023e-01, 7.307156e-01, 7.307288e-01, 7.307421e-01, 7.307554e-01, 7.307686e-01, 7.307819e-01, 7.307951e-01, 7.308084e-01, 7.308217e-01, 7.308350e-01, 7.308482e-01, 7.308615e-01, 7.308748e-01, 7.308880e-01, 7.309012e-01, 7.309146e-01, 7.309278e-01, 7.309411e-01, 7.309543e-01, 7.309676e-01, 7.309809e-01, 7.309941e-01, 7.310073e-01, 7.310207e-01, 7.310339e-01, 7.310472e-01, 7.310604e-01, 7.310737e-01, 7.310870e-01, 7.311002e-01, 7.311135e-01, 7.311267e-01, 7.311400e-01, 7.311533e-01, 7.311665e-01, 7.311798e-01, 7.311931e-01, 7.312064e-01, 7.312196e-01, 7.312328e-01, 7.312461e-01, 7.312594e-01, 7.312726e-01, 7.312859e-01, 7.312991e-01, 7.313124e-01, 7.313257e-01, 7.313389e-01, 7.313522e-01, 7.313654e-01, 7.313787e-01, 7.313920e-01, 7.314053e-01, 7.314185e-01, 7.314317e-01, 7.314450e-01, 7.314583e-01, 7.314715e-01, 7.314848e-01, 7.314980e-01, 7.315112e-01, 7.315245e-01, 7.315378e-01, 7.315511e-01, 7.315643e-01, 7.315776e-01, 7.315908e-01, 7.316042e-01, 7.316174e-01, 7.316306e-01, 7.316439e-01, 7.316571e-01, 7.316703e-01, 7.316837e-01, 7.316969e-01, 7.317101e-01, 7.317234e-01, 7.317367e-01, 7.317499e-01, 7.317631e-01, 7.317765e-01, 7.317897e-01, 7.318029e-01, 7.318162e-01, 7.318294e-01, 7.318427e-01, 7.318560e-01, 7.318692e-01, 7.318825e-01, 7.318957e-01, 7.319090e-01, 7.319222e-01, 7.319354e-01, 7.319488e-01, 7.319620e-01, 7.319753e-01, 7.319885e-01, 7.320018e-01, 7.320150e-01, 7.320282e-01, 7.320415e-01, 7.320548e-01, 7.320681e-01, 7.320813e-01, 7.320945e-01, 7.321078e-01, 7.321211e-01, 7.321343e-01, 7.321475e-01, 7.321607e-01, 7.321741e-01, 7.321873e-01, 7.322006e-01, 7.322138e-01, 7.322270e-01, 7.322403e-01, 7.322536e-01, 7.322668e-01, 7.322800e-01, 7.322934e-01, 7.323066e-01, 7.323198e-01, 7.323331e-01, 7.323463e-01, 7.323596e-01, 7.323728e-01, 7.323861e-01, 7.323993e-01, 7.324125e-01, 7.324258e-01, 7.324391e-01, 7.324523e-01, 7.324656e-01, 7.324789e-01, 7.324921e-01, 7.325053e-01, 7.325186e-01, 7.325318e-01, 7.325451e-01, 7.325583e-01, 7.325715e-01, 7.325848e-01, 7.325980e-01, 7.326112e-01, 7.326246e-01, 7.326378e-01, 7.326511e-01, 7.326643e-01, 7.326776e-01, 7.326908e-01, 7.327040e-01, 7.327173e-01, 7.327305e-01, 7.327438e-01, 7.327570e-01, 7.327703e-01, 7.327835e-01, 7.327967e-01, 7.328100e-01, 7.328233e-01, 7.328365e-01, 7.328497e-01, 7.328629e-01, 7.328762e-01, 7.328895e-01, 7.329028e-01, 7.329160e-01, 7.329293e-01, 7.329425e-01, 7.329558e-01, 7.329690e-01, 7.329822e-01, 7.329955e-01, 7.330087e-01, 7.330220e-01, 7.330352e-01, 7.330484e-01, 7.330617e-01, 7.330749e-01, 7.330882e-01, 7.331014e-01, 7.331147e-01, 7.331279e-01, 7.331411e-01, 7.331544e-01, 7.331676e-01, 7.331809e-01, 7.331941e-01, 7.332073e-01, 7.332206e-01, 7.332339e-01, 7.332471e-01, 7.332603e-01, 7.332736e-01, 7.332868e-01, 7.333000e-01, 7.333133e-01, 7.333266e-01, 7.333398e-01, 7.333530e-01, 7.333663e-01, 7.333795e-01, 7.333928e-01, 7.334060e-01, 7.334192e-01, 7.334325e-01, 7.334457e-01, 7.334590e-01, 7.334722e-01, 7.334855e-01, 7.334987e-01, 7.335119e-01, 7.335252e-01, 7.335384e-01, 7.335516e-01, 7.335648e-01, 7.335781e-01, 7.335913e-01, 7.336046e-01, 7.336178e-01, 7.336310e-01, 7.336443e-01, 7.336575e-01, 7.336708e-01, 7.336840e-01, 7.336972e-01, 7.337105e-01, 7.337238e-01, 7.337370e-01, 7.337502e-01, 7.337635e-01, 7.337767e-01, 7.337899e-01, 7.338032e-01, 7.338163e-01, 7.338296e-01, 7.338428e-01, 7.338561e-01, 7.338693e-01, 7.338825e-01, 7.338958e-01, 7.339091e-01, 7.339223e-01, 7.339355e-01, 7.339488e-01, 7.339620e-01, 7.339752e-01, 7.339885e-01, 7.340016e-01, 7.340149e-01, 7.340282e-01, 7.340414e-01, 7.340546e-01, 7.340679e-01, 7.340811e-01, 7.340944e-01, 7.341076e-01, 7.341208e-01, 7.341341e-01, 7.341473e-01, 7.341605e-01, 7.341737e-01, 7.341869e-01, 7.342002e-01, 7.342135e-01, 7.342267e-01, 7.342399e-01, 7.342532e-01, 7.342663e-01, 7.342796e-01, 7.342928e-01, 7.343060e-01, 7.343193e-01, 7.343326e-01, 7.343458e-01, 7.343590e-01, 7.343723e-01, 7.343854e-01, 7.343987e-01, 7.344119e-01, 7.344252e-01, 7.344384e-01, 7.344517e-01, 7.344649e-01, 7.344781e-01, 7.344913e-01, 7.345045e-01, 7.345178e-01, 7.345310e-01, 7.345443e-01, 7.345575e-01, 7.345707e-01, 7.345839e-01, 7.345971e-01, 7.346104e-01, 7.346236e-01, 7.346369e-01, 7.346501e-01, 7.346632e-01, 7.346765e-01, 7.346898e-01, 7.347030e-01, 7.347162e-01, 7.347295e-01, 7.347428e-01, 7.347559e-01, 7.347691e-01, 7.347824e-01, 7.347956e-01, 7.348089e-01, 7.348221e-01, 7.348353e-01, 7.348485e-01, 7.348617e-01, 7.348750e-01, 7.348883e-01, 7.349014e-01, 7.349146e-01, 7.349279e-01, 7.349411e-01, 7.349544e-01, 7.349676e-01, 7.349808e-01, 7.349940e-01, 7.350072e-01, 7.350205e-01, 7.350338e-01, 7.350469e-01, 7.350601e-01, 7.350734e-01, 7.350866e-01, 7.350999e-01, 7.351130e-01, 7.351263e-01, 7.351395e-01, 7.351527e-01, 7.351660e-01, 7.351791e-01, 7.351924e-01, 7.352057e-01, 7.352189e-01, 7.352321e-01, 7.352453e-01, 7.352585e-01, 7.352718e-01, 7.352850e-01, 7.352982e-01, 7.353114e-01, 7.353246e-01, 7.353379e-01, 7.353511e-01, 7.353643e-01, 7.353775e-01, 7.353908e-01, 7.354040e-01, 7.354172e-01, 7.354304e-01, 7.354437e-01, 7.354569e-01, 7.354701e-01, 7.354833e-01, 7.354965e-01, 7.355098e-01, 7.355229e-01, 7.355362e-01, 7.355494e-01, 7.355627e-01, 7.355758e-01, 7.355891e-01, 7.356023e-01, 7.356156e-01, 7.356287e-01, 7.356420e-01, 7.356552e-01, 7.356684e-01, 7.356816e-01, 7.356948e-01, 7.357081e-01, 7.357213e-01, 7.357345e-01, 7.357477e-01, 7.357609e-01, 7.357742e-01, 7.357873e-01, 7.358006e-01, 7.358139e-01, 7.358270e-01, 7.358403e-01, 7.358535e-01, 7.358667e-01, 7.358799e-01, 7.358931e-01, 7.359064e-01, 7.359195e-01, 7.359328e-01, 7.359460e-01, 7.359592e-01, 7.359724e-01, 7.359856e-01, 7.359989e-01, 7.360120e-01, 7.360253e-01, 7.360385e-01, 7.360517e-01, 7.360649e-01, 7.360782e-01, 7.360914e-01, 7.361045e-01, 7.361178e-01, 7.361311e-01, 7.361442e-01, 7.361575e-01, 7.361707e-01, 7.361839e-01, 7.361971e-01, 7.362103e-01, 7.362235e-01, 7.362368e-01, 7.362500e-01, 7.362632e-01, 7.362764e-01, 7.362896e-01, 7.363028e-01, 7.363160e-01, 7.363293e-01, 7.363424e-01, 7.363557e-01, 7.363689e-01, 7.363821e-01, 7.363953e-01, 7.364085e-01, 7.364217e-01, 7.364349e-01, 7.364482e-01, 7.364613e-01, 7.364746e-01, 7.364879e-01, 7.365010e-01, 7.365142e-01, 7.365275e-01, 7.365406e-01, 7.365539e-01, 7.365671e-01, 7.365803e-01, 7.365935e-01, 7.366068e-01, 7.366199e-01, 7.366332e-01, 7.366463e-01, 7.366596e-01, 7.366728e-01, 7.366860e-01, 7.366992e-01, 7.367125e-01, 7.367256e-01, 7.367389e-01, 7.367520e-01, 7.367653e-01, 7.367785e-01, 7.367917e-01, 7.368049e-01, 7.368181e-01, 7.368313e-01, 7.368445e-01, 7.368577e-01, 7.368709e-01, 7.368842e-01, 7.368973e-01, 7.369106e-01, 7.369238e-01, 7.369370e-01, 7.369502e-01, 7.369634e-01, 7.369766e-01, 7.369898e-01, 7.370030e-01, 7.370163e-01, 7.370294e-01, 7.370427e-01, 7.370558e-01, 7.370691e-01, 7.370823e-01, 7.370955e-01, 7.371087e-01, 7.371219e-01, 7.371351e-01, 7.371482e-01, 7.371615e-01, 7.371747e-01, 7.371879e-01, 7.372012e-01, 7.372143e-01, 7.372276e-01, 7.372408e-01, 7.372540e-01, 7.372672e-01, 7.372803e-01, 7.372936e-01, 7.373067e-01, 7.373200e-01, 7.373331e-01, 7.373464e-01, 7.373596e-01, 7.373728e-01, 7.373860e-01, 7.373992e-01, 7.374124e-01, 7.374256e-01, 7.374388e-01, 7.374520e-01, 7.374652e-01, 7.374784e-01, 7.374916e-01, 7.375048e-01, 7.375180e-01, 7.375312e-01, 7.375444e-01, 7.375576e-01, 7.375708e-01, 7.375841e-01, 7.375972e-01, 7.376105e-01, 7.376236e-01, 7.376369e-01, 7.376501e-01, 7.376633e-01, 7.376765e-01, 7.376897e-01, 7.377029e-01, 7.377161e-01, 7.377293e-01, 7.377424e-01, 7.377557e-01, 7.377688e-01, 7.377821e-01, 7.377952e-01, 7.378085e-01, 7.378216e-01, 7.378349e-01, 7.378480e-01, 7.378613e-01, 7.378744e-01, 7.378877e-01, 7.379009e-01, 7.379141e-01, 7.379273e-01, 7.379405e-01, 7.379537e-01, 7.379669e-01, 7.379801e-01, 7.379933e-01, 7.380065e-01, 7.380197e-01, 7.380328e-01, 7.380461e-01, 7.380592e-01, 7.380725e-01, 7.380856e-01, 7.380989e-01, 7.381120e-01, 7.381253e-01, 7.381384e-01, 7.381517e-01, 7.381648e-01, 7.381781e-01, 7.381912e-01, 7.382044e-01, 7.382177e-01, 7.382308e-01, 7.382441e-01, 7.382572e-01, 7.382705e-01, 7.382836e-01, 7.382969e-01, 7.383100e-01, 7.383232e-01, 7.383364e-01, 7.383496e-01, 7.383628e-01, 7.383760e-01, 7.383892e-01, 7.384024e-01, 7.384156e-01, 7.384288e-01, 7.384420e-01, 7.384552e-01, 7.384684e-01, 7.384815e-01, 7.384947e-01, 7.385079e-01, 7.385211e-01, 7.385343e-01, 7.385475e-01, 7.385607e-01, 7.385739e-01, 7.385871e-01, 7.386003e-01, 7.386135e-01, 7.386267e-01, 7.386398e-01, 7.386531e-01, 7.386662e-01, 7.386794e-01, 7.386926e-01, 7.387058e-01, 7.387190e-01, 7.387322e-01, 7.387454e-01, 7.387586e-01, 7.387718e-01, 7.387850e-01, 7.387981e-01, 7.388113e-01, 7.388245e-01, 7.388377e-01, 7.388510e-01, 7.388641e-01, 7.388773e-01, 7.388905e-01, 7.389037e-01, 7.389169e-01, 7.389301e-01, 7.389432e-01, 7.389565e-01, 7.389696e-01, 7.389829e-01, 7.389960e-01, 7.390092e-01, 7.390224e-01, 7.390356e-01, 7.390488e-01, 7.390620e-01, 7.390751e-01, 7.390884e-01, 7.391015e-01, 7.391147e-01, 7.391279e-01, 7.391411e-01, 7.391543e-01, 7.391675e-01, 7.391807e-01, 7.391939e-01, 7.392070e-01, 7.392202e-01, 7.392334e-01, 7.392466e-01, 7.392598e-01, 7.392730e-01, 7.392862e-01, 7.392993e-01, 7.393126e-01, 7.393257e-01, 7.393390e-01, 7.393521e-01, 7.393653e-01, 7.393785e-01, 7.393917e-01, 7.394049e-01, 7.394181e-01, 7.394313e-01, 7.394444e-01, 7.394576e-01, 7.394708e-01, 7.394840e-01, 7.394972e-01, 7.395104e-01, 7.395235e-01, 7.395368e-01, 7.395499e-01, 7.395630e-01, 7.395763e-01, 7.395895e-01, 7.396026e-01, 7.396159e-01, 7.396290e-01, 7.396421e-01, 7.396553e-01, 7.396685e-01, 7.396817e-01, 7.396949e-01, 7.397081e-01, 7.397213e-01, 7.397345e-01, 7.397477e-01, 7.397608e-01, 7.397740e-01, 7.397872e-01, 7.398004e-01, 7.398136e-01, 7.398267e-01, 7.398400e-01, 7.398531e-01, 7.398663e-01, 7.398795e-01, 7.398927e-01, 7.399058e-01, 7.399190e-01, 7.399322e-01, 7.399454e-01, 7.399585e-01, 7.399718e-01, 7.399849e-01, 7.399981e-01, 7.400113e-01, 7.400245e-01, 7.400376e-01, 7.400508e-01, 7.400640e-01, 7.400772e-01, 7.400904e-01, 7.401035e-01, 7.401168e-01, 7.401299e-01, 7.401431e-01, 7.401562e-01, 7.401695e-01, 7.401826e-01, 7.401958e-01, 7.402089e-01, 7.402222e-01, 7.402353e-01, 7.402485e-01, 7.402617e-01, 7.402749e-01, 7.402881e-01, 7.403012e-01, 7.403144e-01, 7.403276e-01, 7.403408e-01, 7.403539e-01, 7.403671e-01, 7.403803e-01, 7.403935e-01, 7.404066e-01, 7.404198e-01, 7.404330e-01, 7.404462e-01, 7.404593e-01, 7.404725e-01, 7.404857e-01, 7.404989e-01, 7.405121e-01, 7.405252e-01, 7.405384e-01, 7.405516e-01, 7.405648e-01, 7.405779e-01, 7.405911e-01, 7.406042e-01, 7.406175e-01, 7.406306e-01, 7.406438e-01, 7.406570e-01, 7.406701e-01, 7.406834e-01, 7.406965e-01, 7.407097e-01, 7.407228e-01, 7.407360e-01, 7.407492e-01, 7.407624e-01, 7.407755e-01, 7.407887e-01, 7.408019e-01, 7.408151e-01, 7.408283e-01, 7.408414e-01, 7.408546e-01, 7.408677e-01, 7.408810e-01, 7.408941e-01, 7.409073e-01, 7.409204e-01, 7.409336e-01, 7.409468e-01, 7.409600e-01, 7.409732e-01, 7.409863e-01, 7.409995e-01, 7.410126e-01, 7.410259e-01, 7.410390e-01, 7.410522e-01, 7.410653e-01, 7.410785e-01, 7.410917e-01, 7.411049e-01, 7.411180e-01, 7.411312e-01, 7.411444e-01, 7.411575e-01, 7.411706e-01, 7.411838e-01, 7.411970e-01, 7.412102e-01, 7.412234e-01, 7.412366e-01, 7.412497e-01, 7.412629e-01, 7.412760e-01, 7.412893e-01, 7.413024e-01, 7.413155e-01, 7.413287e-01, 7.413419e-01, 7.413551e-01, 7.413682e-01, 7.413814e-01, 7.413946e-01, 7.414078e-01, 7.414209e-01, 7.414340e-01, 7.414472e-01, 7.414604e-01, 7.414736e-01, 7.414868e-01, 7.414999e-01, 7.415131e-01, 7.415262e-01, 7.415394e-01, 7.415525e-01, 7.415657e-01, 7.415789e-01, 7.415920e-01, 7.416053e-01, 7.416185e-01, 7.416316e-01, 7.416447e-01, 7.416579e-01, 7.416710e-01, 7.416842e-01, 7.416974e-01, 7.417105e-01, 7.417237e-01, 7.417369e-01, 7.417501e-01, 7.417632e-01, 7.417764e-01, 7.417895e-01, 7.418027e-01, 7.418159e-01, 7.418290e-01, 7.418422e-01, 7.418553e-01, 7.418685e-01, 7.418817e-01, 7.418949e-01, 7.419081e-01, 7.419212e-01, 7.419344e-01, 7.419475e-01, 7.419606e-01, 7.419738e-01, 7.419870e-01, 7.420002e-01, 7.420133e-01, 7.420264e-01, 7.420396e-01, 7.420528e-01, 7.420659e-01, 7.420791e-01, 7.420923e-01, 7.421055e-01, 7.421187e-01, 7.421318e-01, 7.421449e-01, 7.421581e-01, 7.421713e-01, 7.421844e-01, 7.421976e-01, 7.422107e-01, 7.422239e-01, 7.422370e-01, 7.422502e-01, 7.422634e-01, 7.422765e-01, 7.422897e-01, 7.423028e-01, 7.423160e-01, 7.423291e-01, 7.423423e-01, 7.423555e-01, 7.423686e-01, 7.423818e-01, 7.423949e-01, 7.424081e-01, 7.424213e-01, 7.424345e-01, 7.424476e-01, 7.424608e-01, 7.424740e-01, 7.424871e-01, 7.425002e-01, 7.425134e-01, 7.425266e-01, 7.425398e-01, 7.425529e-01, 7.425660e-01, 7.425792e-01, 7.425923e-01, 7.426055e-01, 7.426187e-01, 7.426319e-01, 7.426450e-01, 7.426581e-01, 7.426713e-01, 7.426845e-01, 7.426976e-01, 7.427108e-01, 7.427239e-01, 7.427371e-01, 7.427502e-01, 7.427634e-01, 7.427766e-01, 7.427897e-01, 7.428029e-01, 7.428159e-01, 7.428291e-01, 7.428423e-01, 7.428554e-01, 7.428685e-01, 7.428817e-01, 7.428949e-01, 7.429081e-01, 7.429212e-01, 7.429343e-01, 7.429475e-01, 7.429607e-01, 7.429738e-01, 7.429870e-01, 7.430001e-01, 7.430133e-01, 7.430264e-01, 7.430396e-01, 7.430528e-01, 7.430659e-01, 7.430791e-01, 7.430922e-01, 7.431054e-01, 7.431185e-01, 7.431317e-01, 7.431449e-01, 7.431579e-01, 7.431711e-01, 7.431843e-01, 7.431974e-01, 7.432106e-01, 7.432237e-01, 7.432368e-01, 7.432500e-01, 7.432632e-01, 7.432764e-01, 7.432895e-01, 7.433026e-01, 7.433158e-01, 7.433290e-01, 7.433421e-01, 7.433552e-01, 7.433683e-01, 7.433815e-01, 7.433947e-01, 7.434078e-01, 7.434210e-01, 7.434341e-01, 7.434473e-01, 7.434604e-01, 7.434736e-01, 7.434868e-01, 7.434998e-01, 7.435130e-01, 7.435262e-01, 7.435393e-01, 7.435524e-01, 7.435656e-01, 7.435788e-01, 7.435919e-01, 7.436051e-01, 7.436182e-01, 7.436313e-01, 7.436445e-01, 7.436576e-01, 7.436708e-01, 7.436839e-01, 7.436971e-01, 7.437103e-01, 7.437234e-01, 7.437366e-01, 7.437496e-01, 7.437628e-01, 7.437760e-01, 7.437891e-01, 7.438022e-01, 7.438154e-01, 7.438286e-01, 7.438417e-01, 7.438548e-01, 7.438679e-01, 7.438811e-01, 7.438943e-01, 7.439075e-01, 7.439206e-01, 7.439337e-01, 7.439468e-01, 7.439600e-01, 7.439731e-01, 7.439863e-01, 7.439994e-01, 7.440126e-01, 7.440258e-01, 7.440388e-01, 7.440520e-01, 7.440652e-01, 7.440783e-01, 7.440915e-01, 7.441046e-01, 7.441177e-01, 7.441308e-01, 7.441440e-01, 7.441571e-01, 7.441703e-01, 7.441835e-01, 7.441966e-01, 7.442097e-01, 7.442228e-01, 7.442360e-01, 7.442492e-01, 7.442623e-01, 7.442755e-01, 7.442886e-01, 7.443017e-01, 7.443148e-01, 7.443280e-01, 7.443412e-01, 7.443542e-01, 7.443674e-01, 7.443805e-01, 7.443937e-01, 7.444069e-01, 7.444199e-01, 7.444331e-01, 7.444463e-01, 7.444594e-01, 7.444726e-01, 7.444857e-01, 7.444988e-01, 7.445120e-01, 7.445251e-01, 7.445382e-01, 7.445514e-01, 7.445645e-01, 7.445776e-01, 7.445908e-01, 7.446039e-01, 7.446170e-01, 7.446302e-01, 7.446433e-01, 7.446565e-01, 7.446697e-01, 7.446827e-01, 7.446959e-01, 7.447090e-01, 7.447222e-01, 7.447352e-01, 7.447484e-01, 7.447616e-01, 7.447748e-01, 7.447879e-01, 7.448010e-01, 7.448141e-01, 7.448273e-01, 7.448404e-01, 7.448535e-01, 7.448667e-01, 7.448798e-01, 7.448930e-01, 7.449061e-01, 7.449192e-01, 7.449324e-01, 7.449455e-01, 7.449586e-01, 7.449718e-01, 7.449849e-01, 7.449980e-01, 7.450112e-01, 7.450243e-01, 7.450374e-01, 7.450506e-01, 7.450637e-01, 7.450768e-01, 7.450900e-01, 7.451031e-01, 7.451162e-01, 7.451293e-01, 7.451425e-01, 7.451557e-01, 7.451687e-01, 7.451819e-01, 7.451951e-01, 7.452081e-01, 7.452213e-01, 7.452344e-01, 7.452476e-01, 7.452607e-01, 7.452738e-01, 7.452870e-01, 7.453002e-01, 7.453132e-01, 7.453264e-01, 7.453395e-01, 7.453526e-01, 7.453657e-01, 7.453789e-01, 7.453920e-01, 7.454051e-01, 7.454183e-01, 7.454314e-01, 7.454445e-01, 7.454577e-01, 7.454708e-01, 7.454839e-01, 7.454970e-01, 7.455102e-01, 7.455233e-01, 7.455364e-01, 7.455496e-01, 7.455627e-01, 7.455758e-01, 7.455890e-01, 7.456021e-01, 7.456152e-01, 7.456284e-01, 7.456415e-01, 7.456546e-01, 7.456678e-01, 7.456809e-01, 7.456940e-01, 7.457072e-01, 7.457203e-01, 7.457334e-01, 7.457466e-01, 7.457597e-01, 7.457728e-01, 7.457859e-01, 7.457991e-01, 7.458121e-01, 7.458253e-01, 7.458385e-01, 7.458515e-01, 7.458647e-01, 7.458779e-01, 7.458909e-01, 7.459041e-01, 7.459172e-01, 7.459303e-01, 7.459434e-01, 7.459566e-01, 7.459697e-01, 7.459828e-01, 7.459959e-01, 7.460091e-01, 7.460222e-01, 7.460353e-01, 7.460485e-01, 7.460616e-01, 7.460747e-01, 7.460878e-01, 7.461010e-01, 7.461141e-01, 7.461272e-01, 7.461403e-01, 7.461534e-01, 7.461666e-01, 7.461796e-01, 7.461928e-01, 7.462060e-01, 7.462190e-01, 7.462322e-01, 7.462453e-01, 7.462584e-01, 7.462716e-01, 7.462847e-01, 7.462978e-01, 7.463109e-01, 7.463241e-01, 7.463372e-01, 7.463503e-01, 7.463634e-01, 7.463766e-01, 7.463896e-01, 7.464028e-01, 7.464159e-01, 7.464290e-01, 7.464421e-01, 7.464553e-01, 7.464684e-01, 7.464815e-01, 7.464947e-01, 7.465077e-01, 7.465209e-01, 7.465340e-01, 7.465471e-01, 7.465603e-01, 7.465733e-01, 7.465865e-01, 7.465997e-01, 7.466127e-01, 7.466259e-01, 7.466390e-01, 7.466521e-01, 7.466652e-01, 7.466784e-01, 7.466915e-01, 7.467046e-01, 7.467177e-01, 7.467308e-01, 7.467439e-01, 7.467570e-01, 7.467701e-01, 7.467833e-01, 7.467964e-01, 7.468095e-01, 7.468226e-01, 7.468358e-01, 7.468488e-01, 7.468620e-01, 7.468750e-01, 7.468882e-01, 7.469013e-01, 7.469144e-01, 7.469276e-01, 7.469407e-01, 7.469538e-01, 7.469669e-01, 7.469801e-01, 7.469931e-01, 7.470063e-01, 7.470194e-01, 7.470325e-01, 7.470456e-01, 7.470587e-01, 7.470718e-01, 7.470850e-01, 7.470980e-01, 7.471112e-01, 7.471244e-01, 7.471374e-01, 7.471506e-01, 7.471637e-01, 7.471768e-01, 7.471899e-01, 7.472031e-01, 7.472161e-01, 7.472293e-01, 7.472423e-01, 7.472555e-01, 7.472686e-01, 7.472817e-01, 7.472948e-01, 7.473080e-01, 7.473210e-01, 7.473342e-01, 7.473472e-01, 7.473604e-01, 7.473735e-01, 7.473866e-01, 7.473997e-01, 7.474129e-01, 7.474259e-01, 7.474391e-01, 7.474521e-01, 7.474653e-01, 7.474784e-01, 7.474915e-01, 7.475046e-01, 7.475178e-01, 7.475308e-01, 7.475440e-01, 7.475570e-01, 7.475702e-01, 7.475833e-01, 7.475964e-01, 7.476096e-01, 7.476226e-01, 7.476358e-01, 7.476488e-01, 7.476620e-01, 7.476751e-01, 7.476882e-01, 7.477013e-01, 7.477145e-01, 7.477275e-01, 7.477407e-01, 7.477537e-01, 7.477668e-01, 7.477800e-01, 7.477930e-01, 7.478062e-01, 7.478192e-01, 7.478324e-01, 7.478455e-01, 7.478586e-01, 7.478717e-01, 7.478848e-01, 7.478979e-01, 7.479110e-01, 7.479241e-01, 7.479373e-01, 7.479504e-01, 7.479635e-01, 7.479766e-01, 7.479897e-01, 7.480028e-01, 7.480159e-01, 7.480290e-01, 7.480422e-01, 7.480552e-01, 7.480684e-01, 7.480814e-01, 7.480945e-01, 7.481077e-01, 7.481207e-01, 7.481339e-01, 7.481470e-01, 7.481601e-01, 7.481732e-01, 7.481863e-01, 7.481994e-01, 7.482125e-01, 7.482256e-01, 7.482387e-01, 7.482518e-01, 7.482650e-01, 7.482780e-01, 7.482912e-01, 7.483042e-01, 7.483173e-01, 7.483305e-01, 7.483435e-01, 7.483566e-01, 7.483698e-01, 7.483829e-01, 7.483960e-01, 7.484091e-01, 7.484221e-01, 7.484353e-01, 7.484484e-01, 7.484615e-01, 7.484746e-01, 7.484877e-01, 7.485008e-01, 7.485139e-01, 7.485270e-01, 7.485401e-01, 7.485532e-01, 7.485663e-01, 7.485794e-01, 7.485925e-01, 7.486057e-01, 7.486187e-01, 7.486318e-01, 7.486449e-01, 7.486580e-01, 7.486711e-01, 7.486842e-01, 7.486973e-01, 7.487105e-01, 7.487236e-01, 7.487366e-01, 7.487498e-01, 7.487628e-01, 7.487759e-01, 7.487891e-01, 7.488021e-01, 7.488152e-01, 7.488284e-01, 7.488415e-01, 7.488545e-01, 7.488677e-01, 7.488807e-01, 7.488938e-01, 7.489070e-01, 7.489200e-01, 7.489331e-01, 7.489462e-01, 7.489594e-01, 7.489724e-01, 7.489856e-01, 7.489986e-01, 7.490117e-01, 7.490249e-01, 7.490379e-01, 7.490510e-01, 7.490641e-01, 7.490772e-01, 7.490903e-01, 7.491034e-01, 7.491165e-01, 7.491296e-01, 7.491428e-01, 7.491558e-01, 7.491689e-01, 7.491820e-01, 7.491951e-01, 7.492082e-01, 7.492213e-01, 7.492344e-01, 7.492475e-01, 7.492605e-01, 7.492737e-01, 7.492868e-01, 7.492999e-01, 7.493129e-01, 7.493261e-01, 7.493392e-01, 7.493522e-01, 7.493654e-01, 7.493784e-01, 7.493915e-01, 7.494046e-01, 7.494178e-01, 7.494308e-01, 7.494439e-01, 7.494571e-01, 7.494701e-01, 7.494832e-01, 7.494963e-01, 7.495094e-01, 7.495225e-01, 7.495356e-01, 7.495486e-01, 7.495618e-01, 7.495748e-01, 7.495880e-01, 7.496010e-01, 7.496142e-01, 7.496272e-01, 7.496403e-01, 7.496535e-01, 7.496665e-01, 7.496796e-01, 7.496927e-01, 7.497059e-01, 7.497189e-01, 7.497320e-01, 7.497450e-01, 7.497582e-01, 7.497712e-01, 7.497844e-01, 7.497974e-01, 7.498105e-01, 7.498236e-01, 7.498367e-01, 7.498498e-01, 7.498628e-01, 7.498760e-01, 7.498891e-01, 7.499021e-01, 7.499152e-01, 7.499284e-01, 7.499415e-01, 7.499545e-01, 7.499676e-01, 7.499806e-01, 7.499938e-01, 7.500069e-01, 7.500200e-01, 7.500330e-01, 7.500462e-01, 7.500592e-01, 7.500723e-01, 7.500854e-01, 7.500985e-01, 7.501116e-01, 7.501247e-01, 7.501377e-01, 7.501508e-01, 7.501639e-01, 7.501771e-01, 7.501901e-01, 7.502032e-01, 7.502162e-01, 7.502294e-01, 7.502425e-01, 7.502556e-01, 7.502686e-01, 7.502817e-01, 7.502948e-01, 7.503079e-01, 7.503210e-01, 7.503341e-01, 7.503471e-01, 7.503602e-01, 7.503733e-01, 7.503864e-01, 7.503995e-01, 7.504126e-01, 7.504256e-01, 7.504387e-01, 7.504519e-01, 7.504650e-01, 7.504780e-01, 7.504911e-01, 7.505042e-01, 7.505172e-01, 7.505304e-01, 7.505435e-01, 7.505565e-01, 7.505696e-01, 7.505827e-01, 7.505957e-01, 7.506088e-01, 7.506220e-01, 7.506350e-01, 7.506481e-01, 7.506612e-01, 7.506742e-01, 7.506873e-01, 7.507005e-01, 7.507135e-01, 7.507266e-01, 7.507397e-01, 7.507527e-01, 7.507659e-01, 7.507789e-01, 7.507920e-01, 7.508051e-01, 7.508182e-01, 7.508313e-01, 7.508444e-01, 7.508574e-01, 7.508705e-01, 7.508836e-01, 7.508967e-01, 7.509098e-01, 7.509229e-01, 7.509359e-01, 7.509490e-01, 7.509621e-01, 7.509751e-01, 7.509882e-01, 7.510013e-01, 7.510144e-01, 7.510275e-01, 7.510406e-01, 7.510536e-01, 7.510667e-01, 7.510798e-01, 7.510929e-01, 7.511060e-01, 7.511190e-01, 7.511322e-01, 7.511452e-01, 7.511583e-01, 7.511714e-01, 7.511845e-01, 7.511975e-01, 7.512106e-01, 7.512237e-01, 7.512367e-01, 7.512498e-01, 7.512628e-01, 7.512760e-01, 7.512891e-01, 7.513022e-01, 7.513152e-01, 7.513283e-01, 7.513414e-01, 7.513545e-01, 7.513675e-01, 7.513806e-01, 7.513937e-01, 7.514067e-01, 7.514198e-01, 7.514329e-01, 7.514460e-01, 7.514591e-01, 7.514722e-01, 7.514852e-01, 7.514983e-01, 7.515114e-01, 7.515244e-01, 7.515375e-01, 7.515506e-01, 7.515637e-01, 7.515767e-01, 7.515898e-01, 7.516029e-01, 7.516159e-01, 7.516290e-01, 7.516421e-01, 7.516552e-01, 7.516682e-01, 7.516813e-01, 7.516944e-01, 7.517076e-01, 7.517206e-01, 7.517337e-01, 7.517467e-01, 7.517598e-01, 7.517729e-01, 7.517859e-01, 7.517990e-01, 7.518121e-01, 7.518252e-01, 7.518382e-01, 7.518513e-01, 7.518644e-01, 7.518774e-01, 7.518905e-01, 7.519036e-01, 7.519166e-01, 7.519298e-01, 7.519428e-01, 7.519559e-01, 7.519689e-01, 7.519820e-01, 7.519951e-01, 7.520081e-01, 7.520213e-01, 7.520343e-01, 7.520474e-01, 7.520604e-01, 7.520735e-01, 7.520866e-01, 7.520996e-01, 7.521127e-01, 7.521258e-01, 7.521389e-01, 7.521519e-01, 7.521650e-01, 7.521781e-01, 7.521911e-01, 7.522042e-01, 7.522173e-01, 7.522303e-01, 7.522434e-01, 7.522565e-01, 7.522696e-01, 7.522826e-01, 7.522957e-01, 7.523088e-01, 7.523218e-01, 7.523349e-01, 7.523480e-01, 7.523611e-01, 7.523741e-01, 7.523872e-01, 7.524003e-01, 7.524133e-01, 7.524264e-01, 7.524395e-01, 7.524526e-01, 7.524655e-01, 7.524786e-01, 7.524917e-01, 7.525048e-01, 7.525178e-01, 7.525309e-01, 7.525440e-01, 7.525570e-01, 7.525701e-01, 7.525832e-01, 7.525963e-01, 7.526093e-01, 7.526224e-01, 7.526355e-01, 7.526485e-01, 7.526616e-01, 7.526747e-01, 7.526878e-01, 7.527007e-01, 7.527138e-01, 7.527269e-01, 7.527400e-01, 7.527530e-01, 7.527661e-01, 7.527791e-01, 7.527922e-01, 7.528053e-01, 7.528183e-01, 7.528315e-01, 7.528445e-01, 7.528576e-01, 7.528706e-01, 7.528836e-01, 7.528967e-01, 7.529098e-01, 7.529228e-01, 7.529359e-01, 7.529490e-01, 7.529621e-01, 7.529751e-01, 7.529882e-01, 7.530013e-01, 7.530143e-01, 7.530273e-01, 7.530404e-01, 7.530535e-01, 7.530665e-01, 7.530796e-01, 7.530927e-01, 7.531058e-01, 7.531188e-01, 7.531319e-01, 7.531449e-01, 7.531580e-01, 7.531710e-01, 7.531841e-01, 7.531971e-01, 7.532102e-01, 7.532233e-01, 7.532364e-01, 7.532495e-01, 7.532624e-01, 7.532755e-01, 7.532886e-01, 7.533016e-01, 7.533147e-01, 7.533278e-01, 7.533408e-01, 7.533538e-01, 7.533669e-01, 7.533800e-01, 7.533931e-01, 7.534061e-01, 7.534192e-01, 7.534323e-01, 7.534453e-01, 7.534583e-01, 7.534714e-01, 7.534844e-01, 7.534975e-01, 7.535106e-01, 7.535236e-01, 7.535366e-01, 7.535497e-01, 7.535628e-01, 7.535759e-01, 7.535889e-01, 7.536020e-01, 7.536150e-01, 7.536281e-01, 7.536411e-01, 7.536542e-01, 7.536673e-01, 7.536803e-01, 7.536933e-01, 7.537064e-01, 7.537194e-01, 7.537326e-01, 7.537456e-01, 7.537587e-01, 7.537717e-01, 7.537847e-01, 7.537978e-01, 7.538109e-01, 7.538239e-01, 7.538370e-01, 7.538500e-01, 7.538631e-01, 7.538761e-01, 7.538892e-01, 7.539023e-01, 7.539153e-01, 7.539284e-01, 7.539414e-01, 7.539545e-01, 7.539676e-01, 7.539805e-01, 7.539936e-01, 7.540067e-01, 7.540197e-01, 7.540329e-01, 7.540458e-01, 7.540589e-01, 7.540720e-01, 7.540850e-01, 7.540981e-01, 7.541111e-01, 7.541242e-01, 7.541372e-01, 7.541503e-01, 7.541633e-01, 7.541763e-01, 7.541894e-01, 7.542025e-01, 7.542155e-01, 7.542285e-01, 7.542416e-01, 7.542547e-01, 7.542678e-01, 7.542807e-01, 7.542938e-01, 7.543069e-01, 7.543200e-01, 7.543330e-01, 7.543460e-01, 7.543591e-01, 7.543721e-01, 7.543852e-01, 7.543982e-01, 7.544113e-01, 7.544243e-01, 7.544374e-01, 7.544504e-01, 7.544635e-01, 7.544765e-01, 7.544896e-01, 7.545026e-01, 7.545156e-01, 7.545288e-01, 7.545417e-01, 7.545548e-01, 7.545679e-01, 7.545809e-01, 7.545939e-01, 7.546070e-01, 7.546201e-01, 7.546331e-01, 7.546461e-01, 7.546592e-01, 7.546722e-01, 7.546853e-01, 7.546983e-01, 7.547114e-01, 7.547244e-01, 7.547374e-01, 7.547505e-01, 7.547636e-01, 7.547767e-01, 7.547897e-01, 7.548027e-01, 7.548158e-01, 7.548288e-01, 7.548418e-01, 7.548549e-01, 7.548680e-01, 7.548810e-01, 7.548940e-01, 7.549071e-01, 7.549201e-01, 7.549332e-01, 7.549462e-01, 7.549592e-01, 7.549723e-01, 7.549853e-01, 7.549984e-01, 7.550114e-01, 7.550245e-01, 7.550375e-01, 7.550505e-01, 7.550636e-01, 7.550766e-01, 7.550896e-01, 7.551028e-01, 7.551158e-01, 7.551288e-01, 7.551419e-01, 7.551549e-01, 7.551679e-01, 7.551810e-01, 7.551941e-01, 7.552071e-01, 7.552201e-01, 7.552332e-01, 7.552462e-01, 7.552592e-01, 7.552723e-01, 7.552853e-01, 7.552984e-01, 7.553114e-01, 7.553244e-01, 7.553375e-01, 7.553505e-01, 7.553635e-01, 7.553766e-01, 7.553897e-01, 7.554027e-01, 7.554157e-01, 7.554288e-01, 7.554418e-01, 7.554548e-01, 7.554680e-01, 7.554809e-01, 7.554940e-01, 7.555071e-01, 7.555200e-01, 7.555331e-01, 7.555461e-01, 7.555591e-01, 7.555723e-01, 7.555852e-01, 7.555983e-01, 7.556114e-01, 7.556244e-01, 7.556374e-01, 7.556504e-01, 7.556635e-01, 7.556766e-01, 7.556895e-01, 7.557026e-01, 7.557157e-01, 7.557287e-01, 7.557417e-01, 7.557547e-01, 7.557678e-01, 7.557809e-01, 7.557938e-01, 7.558069e-01, 7.558199e-01, 7.558330e-01, 7.558460e-01, 7.558590e-01, 7.558721e-01, 7.558851e-01, 7.558981e-01, 7.559112e-01, 7.559242e-01, 7.559373e-01, 7.559503e-01, 7.559633e-01, 7.559764e-01, 7.559894e-01, 7.560024e-01, 7.560154e-01, 7.560285e-01, 7.560416e-01, 7.560546e-01, 7.560676e-01, 7.560806e-01, 7.560937e-01, 7.561067e-01, 7.561197e-01, 7.561328e-01, 7.561458e-01, 7.561589e-01, 7.561719e-01, 7.561849e-01, 7.561979e-01, 7.562110e-01, 7.562240e-01, 7.562370e-01, 7.562501e-01, 7.562631e-01, 7.562762e-01, 7.562891e-01, 7.563022e-01, 7.563152e-01, 7.563283e-01, 7.563413e-01, 7.563543e-01, 7.563674e-01, 7.563804e-01, 7.563934e-01, 7.564064e-01, 7.564195e-01, 7.564325e-01, 7.564456e-01, 7.564585e-01, 7.564716e-01, 7.564847e-01, 7.564977e-01, 7.565107e-01, 7.565237e-01, 7.565368e-01, 7.565498e-01, 7.565628e-01, 7.565758e-01, 7.565889e-01, 7.566019e-01, 7.566150e-01, 7.566280e-01, 7.566410e-01, 7.566540e-01, 7.566671e-01, 7.566801e-01, 7.566931e-01, 7.567061e-01, 7.567192e-01, 7.567322e-01, 7.567452e-01, 7.567582e-01, 7.567713e-01, 7.567844e-01, 7.567974e-01, 7.568104e-01, 7.568234e-01, 7.568365e-01, 7.568495e-01, 7.568625e-01, 7.568755e-01, 7.568886e-01, 7.569016e-01, 7.569146e-01, 7.569276e-01, 7.569406e-01, 7.569537e-01, 7.569667e-01, 7.569798e-01, 7.569928e-01, 7.570058e-01, 7.570188e-01, 7.570319e-01, 7.570449e-01, 7.570579e-01, 7.570709e-01, 7.570840e-01, 7.570969e-01, 7.571100e-01, 7.571230e-01, 7.571360e-01, 7.571490e-01, 7.571622e-01, 7.571751e-01, 7.571881e-01, 7.572012e-01, 7.572141e-01, 7.572272e-01, 7.572402e-01, 7.572533e-01, 7.572663e-01, 7.572793e-01, 7.572923e-01, 7.573054e-01, 7.573184e-01, 7.573314e-01, 7.573444e-01, 7.573574e-01, 7.573705e-01, 7.573835e-01, 7.573965e-01, 7.574095e-01, 7.574226e-01, 7.574356e-01, 7.574486e-01, 7.574617e-01, 7.574746e-01, 7.574877e-01, 7.575007e-01, 7.575138e-01, 7.575268e-01, 7.575397e-01, 7.575528e-01, 7.575658e-01, 7.575788e-01, 7.575918e-01, 7.576049e-01, 7.576179e-01, 7.576309e-01, 7.576439e-01, 7.576569e-01, 7.576700e-01, 7.576830e-01, 7.576960e-01, 7.577090e-01, 7.577220e-01, 7.577351e-01, 7.577481e-01, 7.577611e-01, 7.577741e-01, 7.577871e-01, 7.578002e-01, 7.578132e-01, 7.578261e-01, 7.578392e-01, 7.578522e-01, 7.578653e-01, 7.578782e-01, 7.578912e-01, 7.579044e-01, 7.579173e-01, 7.579304e-01, 7.579434e-01, 7.579563e-01, 7.579694e-01, 7.579824e-01, 7.579955e-01, 7.580085e-01, 7.580214e-01, 7.580345e-01, 7.580475e-01, 7.580605e-01, 7.580736e-01, 7.580866e-01, 7.580995e-01, 7.581126e-01, 7.581256e-01, 7.581387e-01, 7.581517e-01, 7.581646e-01, 7.581777e-01, 7.581907e-01, 7.582037e-01, 7.582167e-01, 7.582297e-01, 7.582427e-01, 7.582558e-01, 7.582688e-01, 7.582818e-01, 7.582948e-01, 7.583078e-01, 7.583209e-01, 7.583339e-01, 7.583469e-01, 7.583599e-01, 7.583729e-01, 7.583859e-01, 7.583990e-01, 7.584119e-01, 7.584249e-01, 7.584380e-01, 7.584510e-01, 7.584640e-01, 7.584770e-01, 7.584900e-01, 7.585030e-01, 7.585161e-01, 7.585291e-01, 7.585421e-01, 7.585550e-01, 7.585681e-01, 7.585811e-01, 7.585940e-01, 7.586071e-01, 7.586201e-01, 7.586331e-01, 7.586462e-01, 7.586592e-01, 7.586721e-01, 7.586852e-01, 7.586982e-01, 7.587112e-01, 7.587242e-01, 7.587372e-01, 7.587502e-01, 7.587632e-01, 7.587762e-01, 7.587892e-01, 7.588022e-01, 7.588153e-01, 7.588283e-01, 7.588413e-01, 7.588543e-01, 7.588673e-01, 7.588803e-01, 7.588933e-01, 7.589064e-01, 7.589194e-01, 7.589324e-01, 7.589453e-01, 7.589584e-01, 7.589714e-01, 7.589844e-01, 7.589974e-01, 7.590104e-01, 7.590234e-01, 7.590364e-01, 7.590495e-01, 7.590625e-01, 7.590755e-01, 7.590884e-01, 7.591015e-01, 7.591145e-01, 7.591274e-01, 7.591404e-01, 7.591535e-01, 7.591665e-01, 7.591795e-01, 7.591925e-01, 7.592055e-01, 7.592185e-01, 7.592315e-01, 7.592445e-01, 7.592576e-01, 7.592705e-01, 7.592835e-01, 7.592965e-01, 7.593096e-01, 7.593226e-01, 7.593356e-01, 7.593486e-01, 7.593616e-01, 7.593746e-01, 7.593876e-01, 7.594005e-01, 7.594137e-01, 7.594267e-01, 7.594396e-01, 7.594526e-01, 7.594656e-01, 7.594786e-01, 7.594916e-01, 7.595046e-01, 7.595176e-01, 7.595307e-01, 7.595437e-01, 7.595567e-01, 7.595696e-01, 7.595826e-01, 7.595957e-01, 7.596087e-01, 7.596217e-01, 7.596346e-01, 7.596476e-01, 7.596607e-01, 7.596737e-01, 7.596866e-01, 7.596996e-01, 7.597126e-01, 7.597257e-01, 7.597387e-01, 7.597517e-01, 7.597647e-01, 7.597777e-01, 7.597907e-01, 7.598037e-01, 7.598167e-01, 7.598296e-01, 7.598426e-01, 7.598556e-01, 7.598687e-01, 7.598817e-01, 7.598947e-01, 7.599077e-01, 7.599207e-01, 7.599337e-01, 7.599467e-01, 7.599597e-01, 7.599727e-01, 7.599857e-01, 7.599986e-01, 7.600117e-01, 7.600247e-01, 7.600377e-01, 7.600507e-01, 7.600636e-01, 7.600766e-01, 7.600897e-01, 7.601027e-01, 7.601157e-01, 7.601287e-01, 7.601417e-01, 7.601546e-01, 7.601676e-01, 7.601807e-01, 7.601936e-01, 7.602066e-01, 7.602196e-01, 7.602326e-01, 7.602456e-01, 7.602586e-01, 7.602717e-01, 7.602847e-01, 7.602977e-01, 7.603106e-01, 7.603236e-01, 7.603366e-01, 7.603496e-01, 7.603626e-01, 7.603756e-01, 7.603886e-01, 7.604016e-01, 7.604146e-01, 7.604276e-01, 7.604405e-01, 7.604535e-01, 7.604666e-01, 7.604796e-01, 7.604926e-01, 7.605056e-01, 7.605186e-01, 7.605315e-01, 7.605445e-01, 7.605575e-01, 7.605705e-01, 7.605836e-01, 7.605965e-01, 7.606095e-01, 7.606225e-01, 7.606355e-01, 7.606485e-01, 7.606615e-01, 7.606745e-01, 7.606874e-01, 7.607004e-01, 7.607135e-01, 7.607265e-01, 7.607394e-01, 7.607524e-01, 7.607654e-01, 7.607784e-01, 7.607914e-01, 7.608044e-01, 7.608173e-01, 7.608303e-01, 7.608433e-01, 7.608563e-01, 7.608694e-01, 7.608824e-01, 7.608954e-01, 7.609084e-01, 7.609213e-01, 7.609343e-01, 7.609473e-01, 7.609603e-01, 7.609733e-01, 7.609863e-01, 7.609993e-01, 7.610122e-01, 7.610252e-01, 7.610382e-01, 7.610512e-01, 7.610642e-01, 7.610772e-01, 7.610902e-01, 7.611032e-01, 7.611162e-01, 7.611291e-01, 7.611421e-01, 7.611551e-01, 7.611681e-01, 7.611811e-01, 7.611941e-01, 7.612071e-01, 7.612200e-01, 7.612330e-01, 7.612460e-01, 7.612590e-01, 7.612720e-01, 7.612850e-01, 7.612979e-01, 7.613109e-01, 7.613239e-01, 7.613369e-01, 7.613499e-01, 7.613629e-01, 7.613759e-01, 7.613890e-01, 7.614020e-01, 7.614149e-01, 7.614279e-01, 7.614409e-01, 7.614539e-01, 7.614669e-01, 7.614799e-01, 7.614928e-01, 7.615058e-01, 7.615188e-01, 7.615318e-01, 7.615448e-01, 7.615578e-01, 7.615708e-01, 7.615837e-01, 7.615967e-01, 7.616097e-01, 7.616227e-01, 7.616357e-01, 7.616487e-01, 7.616616e-01, 7.616746e-01, 7.616876e-01, 7.617006e-01, 7.617136e-01, 7.617266e-01, 7.617396e-01, 7.617525e-01, 7.617655e-01, 7.617785e-01, 7.617915e-01, 7.618045e-01, 7.618173e-01, 7.618303e-01, 7.618433e-01, 7.618563e-01, 7.618693e-01, 7.618823e-01, 7.618952e-01, 7.619082e-01, 7.619212e-01, 7.619342e-01, 7.619472e-01, 7.619602e-01, 7.619732e-01, 7.619861e-01, 7.619991e-01, 7.620121e-01, 7.620251e-01, 7.620381e-01, 7.620511e-01, 7.620640e-01, 7.620770e-01, 7.620900e-01, 7.621030e-01, 7.621160e-01, 7.621290e-01, 7.621419e-01, 7.621549e-01, 7.621679e-01, 7.621809e-01, 7.621938e-01, 7.622068e-01, 7.622198e-01, 7.622328e-01, 7.622458e-01, 7.622588e-01, 7.622718e-01, 7.622847e-01, 7.622977e-01, 7.623107e-01, 7.623237e-01, 7.623366e-01, 7.623495e-01, 7.623625e-01, 7.623755e-01, 7.623885e-01, 7.624015e-01, 7.624145e-01, 7.624274e-01, 7.624404e-01, 7.624534e-01, 7.624664e-01, 7.624794e-01, 7.624923e-01, 7.625053e-01, 7.625183e-01, 7.625313e-01, 7.625442e-01, 7.625572e-01, 7.625702e-01, 7.625832e-01, 7.625962e-01, 7.626092e-01, 7.626221e-01, 7.626351e-01, 7.626480e-01, 7.626610e-01, 7.626740e-01, 7.626870e-01, 7.627000e-01, 7.627130e-01, 7.627259e-01, 7.627388e-01, 7.627518e-01, 7.627648e-01, 7.627778e-01, 7.627908e-01, 7.628038e-01, 7.628167e-01, 7.628297e-01, 7.628427e-01, 7.628556e-01, 7.628686e-01, 7.628816e-01, 7.628946e-01, 7.629076e-01, 7.629206e-01, 7.629334e-01, 7.629464e-01, 7.629594e-01, 7.629724e-01, 7.629853e-01, 7.629983e-01, 7.630113e-01, 7.630243e-01, 7.630372e-01, 7.630502e-01, 7.630632e-01, 7.630762e-01, 7.630892e-01, 7.631022e-01, 7.631150e-01, 7.631280e-01, 7.631410e-01, 7.631540e-01, 7.631670e-01, 7.631800e-01, 7.631929e-01, 7.632059e-01, 7.632188e-01, 7.632318e-01, 7.632448e-01, 7.632578e-01, 7.632707e-01, 7.632837e-01, 7.632967e-01, 7.633097e-01, 7.633227e-01, 7.633355e-01, 7.633485e-01, 7.633615e-01, 7.633745e-01, 7.633875e-01, 7.634004e-01, 7.634134e-01, 7.634264e-01, 7.634393e-01, 7.634523e-01, 7.634653e-01, 7.634782e-01, 7.634912e-01, 7.635041e-01, 7.635171e-01, 7.635301e-01, 7.635430e-01, 7.635560e-01, 7.635690e-01, 7.635820e-01, 7.635950e-01, 7.636079e-01, 7.636209e-01, 7.636338e-01, 7.636468e-01, 7.636598e-01, 7.636727e-01, 7.636857e-01, 7.636987e-01, 7.637116e-01, 7.637246e-01, 7.637376e-01, 7.637506e-01, 7.637635e-01, 7.637765e-01, 7.637894e-01, 7.638024e-01, 7.638153e-01, 7.638283e-01, 7.638413e-01, 7.638542e-01, 7.638672e-01, 7.638802e-01, 7.638931e-01, 7.639061e-01, 7.639191e-01, 7.639320e-01, 7.639450e-01, 7.639579e-01, 7.639709e-01, 7.639839e-01, 7.639968e-01, 7.640098e-01, 7.640228e-01, 7.640358e-01, 7.640486e-01, 7.640616e-01, 7.640746e-01, 7.640876e-01, 7.641005e-01, 7.641135e-01, 7.641265e-01, 7.641395e-01, 7.641523e-01, 7.641653e-01, 7.641783e-01, 7.641913e-01, 7.642042e-01, 7.642172e-01, 7.642302e-01, 7.642431e-01, 7.642561e-01, 7.642691e-01, 7.642820e-01, 7.642949e-01, 7.643079e-01, 7.643209e-01, 7.643338e-01, 7.643468e-01, 7.643598e-01, 7.643728e-01, 7.643856e-01, 7.643986e-01, 7.644116e-01, 7.644245e-01, 7.644375e-01, 7.644505e-01, 7.644635e-01, 7.644764e-01, 7.644894e-01, 7.645023e-01, 7.645152e-01, 7.645282e-01, 7.645412e-01, 7.645541e-01, 7.645671e-01, 7.645801e-01, 7.645930e-01, 7.646060e-01, 7.646189e-01, 7.646319e-01, 7.646449e-01, 7.646578e-01, 7.646708e-01, 7.646837e-01, 7.646967e-01, 7.647097e-01, 7.647226e-01, 7.647356e-01, 7.647486e-01, 7.647614e-01, 7.647744e-01, 7.647874e-01, 7.648003e-01, 7.648133e-01, 7.648263e-01, 7.648392e-01, 7.648522e-01, 7.648652e-01, 7.648780e-01, 7.648910e-01, 7.649040e-01, 7.649169e-01, 7.649299e-01, 7.649428e-01, 7.649558e-01, 7.649688e-01, 7.649817e-01, 7.649947e-01, 7.650076e-01, 7.650205e-01, 7.650335e-01, 7.650465e-01, 7.650594e-01, 7.650724e-01, 7.650854e-01, 7.650983e-01, 7.651113e-01, 7.651241e-01, 7.651371e-01, 7.651501e-01, 7.651630e-01, 7.651760e-01, 7.651890e-01, 7.652019e-01, 7.652149e-01, 7.652278e-01, 7.652407e-01, 7.652537e-01, 7.652667e-01, 7.652797e-01, 7.652926e-01, 7.653055e-01, 7.653185e-01, 7.653314e-01, 7.653444e-01, 7.653574e-01, 7.653702e-01, 7.653832e-01, 7.653961e-01, 7.654091e-01, 7.654221e-01, 7.654350e-01, 7.654480e-01, 7.654609e-01, 7.654739e-01, 7.654868e-01, 7.654998e-01, 7.655128e-01, 7.655256e-01, 7.655386e-01, 7.655516e-01, 7.655645e-01, 7.655775e-01, 7.655904e-01, 7.656034e-01, 7.656163e-01, 7.656293e-01, 7.656422e-01, 7.656552e-01, 7.656682e-01, 7.656810e-01, 7.656940e-01, 7.657069e-01, 7.657199e-01, 7.657329e-01, 7.657458e-01, 7.657588e-01, 7.657717e-01, 7.657847e-01, 7.657976e-01, 7.658105e-01, 7.658235e-01, 7.658364e-01, 7.658494e-01, 7.658623e-01, 7.658753e-01, 7.658882e-01, 7.659011e-01, 7.659141e-01, 7.659271e-01, 7.659400e-01, 7.659529e-01, 7.659659e-01, 7.659788e-01, 7.659918e-01, 7.660047e-01, 7.660177e-01, 7.660306e-01, 7.660435e-01, 7.660565e-01, 7.660695e-01, 7.660823e-01, 7.660953e-01, 7.661083e-01, 7.661212e-01, 7.661342e-01, 7.661471e-01, 7.661601e-01, 7.661730e-01, 7.661860e-01, 7.661989e-01, 7.662119e-01, 7.662247e-01, 7.662377e-01, 7.662507e-01, 7.662636e-01, 7.662765e-01, 7.662895e-01, 7.663024e-01, 7.663154e-01, 7.663283e-01, 7.663413e-01, 7.663542e-01, 7.663671e-01, 7.663801e-01, 7.663931e-01, 7.664059e-01, 7.664189e-01, 7.664318e-01, 7.664448e-01, 7.664577e-01, 7.664707e-01, 7.664836e-01, 7.664966e-01, 7.665095e-01, 7.665225e-01, 7.665353e-01, 7.665483e-01, 7.665613e-01, 7.665742e-01, 7.665871e-01, 7.666001e-01, 7.666130e-01, 7.666260e-01, 7.666389e-01, 7.666519e-01, 7.666648e-01, 7.666777e-01, 7.666907e-01, 7.667035e-01, 7.667165e-01, 7.667294e-01, 7.667424e-01, 7.667553e-01, 7.667683e-01, 7.667812e-01, 7.667942e-01, 7.668071e-01, 7.668201e-01, 7.668329e-01, 7.668459e-01, 7.668589e-01, 7.668718e-01, 7.668847e-01, 7.668976e-01, 7.669106e-01, 7.669235e-01, 7.669365e-01, 7.669494e-01, 7.669623e-01, 7.669753e-01, 7.669882e-01, 7.670012e-01, 7.670141e-01, 7.670271e-01, 7.670400e-01, 7.670528e-01, 7.670658e-01, 7.670788e-01, 7.670918e-01, 7.671046e-01, 7.671176e-01, 7.671305e-01, 7.671434e-01, 7.671564e-01, 7.671693e-01, 7.671823e-01, 7.671952e-01, 7.672082e-01, 7.672210e-01, 7.672340e-01, 7.672470e-01, 7.672598e-01, 7.672728e-01, 7.672857e-01, 7.672986e-01, 7.673116e-01, 7.673245e-01, 7.673375e-01, 7.673504e-01, 7.673633e-01, 7.673762e-01, 7.673892e-01, 7.674022e-01, 7.674150e-01, 7.674279e-01, 7.674409e-01, 7.674538e-01, 7.674668e-01, 7.674797e-01, 7.674926e-01, 7.675056e-01, 7.675185e-01, 7.675314e-01, 7.675444e-01, 7.675573e-01, 7.675703e-01, 7.675832e-01, 7.675961e-01, 7.676091e-01, 7.676219e-01, 7.676349e-01, 7.676478e-01, 7.676607e-01, 7.676737e-01, 7.676866e-01, 7.676995e-01, 7.677125e-01, 7.677254e-01, 7.677383e-01, 7.677513e-01, 7.677642e-01, 7.677771e-01, 7.677901e-01, 7.678030e-01, 7.678159e-01, 7.678288e-01, 7.678418e-01, 7.678548e-01, 7.678676e-01, 7.678805e-01, 7.678935e-01, 7.679064e-01, 7.679193e-01, 7.679323e-01, 7.679452e-01, 7.679581e-01, 7.679711e-01, 7.679840e-01, 7.679968e-01, 7.680098e-01, 7.680228e-01, 7.680357e-01, 7.680486e-01, 7.680615e-01, 7.680745e-01, 7.680874e-01, 7.681003e-01, 7.681132e-01, 7.681262e-01, 7.681391e-01, 7.681520e-01, 7.681649e-01, 7.681779e-01, 7.681908e-01, 7.682037e-01, 7.682167e-01, 7.682295e-01, 7.682425e-01, 7.682555e-01, 7.682683e-01, 7.682812e-01, 7.682942e-01, 7.683071e-01, 7.683200e-01, 7.683329e-01, 7.683459e-01, 7.683588e-01, 7.683717e-01, 7.683847e-01, 7.683976e-01, 7.684105e-01, 7.684234e-01, 7.684364e-01, 7.684492e-01, 7.684622e-01, 7.684752e-01, 7.684880e-01, 7.685009e-01, 7.685139e-01, 7.685269e-01, 7.685397e-01, 7.685526e-01, 7.685656e-01, 7.685785e-01, 7.685914e-01, 7.686043e-01, 7.686173e-01, 7.686302e-01, 7.686431e-01, 7.686560e-01, 7.686689e-01, 7.686819e-01, 7.686948e-01, 7.687077e-01, 7.687206e-01, 7.687336e-01, 7.687464e-01, 7.687594e-01, 7.687724e-01, 7.687852e-01, 7.687981e-01, 7.688110e-01, 7.688240e-01, 7.688369e-01, 7.688498e-01, 7.688627e-01, 7.688757e-01, 7.688886e-01, 7.689015e-01, 7.689144e-01, 7.689274e-01, 7.689403e-01, 7.689532e-01, 7.689661e-01, 7.689791e-01, 7.689919e-01, 7.690049e-01, 7.690178e-01, 7.690306e-01, 7.690436e-01, 7.690566e-01, 7.690694e-01, 7.690823e-01, 7.690953e-01, 7.691082e-01, 7.691211e-01, 7.691340e-01, 7.691469e-01, 7.691599e-01, 7.691728e-01, 7.691857e-01, 7.691986e-01, 7.692115e-01, 7.692245e-01, 7.692374e-01, 7.692503e-01, 7.692631e-01, 7.692761e-01, 7.692891e-01, 7.693020e-01, 7.693149e-01, 7.693278e-01, 7.693406e-01, 7.693536e-01, 7.693666e-01, 7.693794e-01, 7.693923e-01, 7.694052e-01, 7.694182e-01, 7.694311e-01, 7.694440e-01, 7.694569e-01, 7.694698e-01, 7.694827e-01, 7.694957e-01, 7.695086e-01, 7.695215e-01, 7.695344e-01, 7.695473e-01, 7.695603e-01, 7.695732e-01, 7.695861e-01, 7.695990e-01, 7.696119e-01, 7.696248e-01, 7.696378e-01, 7.696506e-01, 7.696636e-01, 7.696764e-01, 7.696893e-01, 7.697023e-01, 7.697151e-01, 7.697281e-01, 7.697410e-01, 7.697539e-01, 7.697668e-01, 7.697797e-01, 7.697926e-01, 7.698056e-01, 7.698185e-01, 7.698314e-01, 7.698443e-01, 7.698572e-01, 7.698701e-01, 7.698830e-01, 7.698959e-01, 7.699089e-01, 7.699218e-01, 7.699347e-01, 7.699476e-01, 7.699605e-01, 7.699734e-01, 7.699863e-01, 7.699991e-01, 7.700121e-01, 7.700251e-01, 7.700379e-01, 7.700509e-01, 7.700638e-01, 7.700766e-01, 7.700896e-01, 7.701024e-01, 7.701154e-01, 7.701283e-01, 7.701412e-01, 7.701541e-01, 7.701671e-01, 7.701799e-01, 7.701928e-01, 7.702057e-01, 7.702186e-01, 7.702315e-01, 7.702445e-01, 7.702574e-01, 7.702703e-01, 7.702832e-01, 7.702961e-01, 7.703090e-01, 7.703219e-01, 7.703348e-01, 7.703477e-01, 7.703606e-01, 7.703735e-01, 7.703865e-01, 7.703994e-01, 7.704123e-01, 7.704252e-01, 7.704381e-01, 7.704509e-01, 7.704639e-01, 7.704768e-01, 7.704897e-01, 7.705026e-01, 7.705154e-01, 7.705284e-01, 7.705413e-01, 7.705542e-01, 7.705671e-01, 7.705801e-01, 7.705929e-01, 7.706059e-01, 7.706187e-01, 7.706316e-01, 7.706445e-01, 7.706574e-01, 7.706704e-01, 7.706832e-01, 7.706962e-01, 7.707090e-01, 7.707219e-01, 7.707348e-01, 7.707477e-01, 7.707607e-01, 7.707735e-01, 7.707864e-01, 7.707994e-01, 7.708123e-01, 7.708252e-01, 7.708381e-01, 7.708510e-01, 7.708639e-01, 7.708768e-01, 7.708897e-01, 7.709026e-01, 7.709155e-01, 7.709284e-01, 7.709413e-01, 7.709542e-01, 7.709671e-01, 7.709800e-01, 7.709929e-01, 7.710058e-01, 7.710187e-01, 7.710316e-01, 7.710445e-01, 7.710574e-01, 7.710703e-01, 7.710832e-01, 7.710961e-01, 7.711090e-01, 7.711219e-01, 7.711348e-01, 7.711477e-01, 7.711606e-01, 7.711735e-01, 7.711864e-01, 7.711993e-01, 7.712122e-01, 7.712251e-01, 7.712380e-01, 7.712508e-01, 7.712638e-01, 7.712767e-01, 7.712896e-01, 7.713025e-01, 7.713153e-01, 7.713283e-01, 7.713411e-01, 7.713541e-01, 7.713670e-01, 7.713798e-01, 7.713928e-01, 7.714056e-01, 7.714186e-01, 7.714314e-01, 7.714443e-01, 7.714573e-01, 7.714701e-01, 7.714831e-01, 7.714959e-01, 7.715088e-01, 7.715217e-01, 7.715346e-01, 7.715476e-01, 7.715604e-01, 7.715732e-01, 7.715861e-01, 7.715991e-01, 7.716119e-01, 7.716249e-01, 7.716377e-01, 7.716506e-01, 7.716635e-01, 7.716764e-01, 7.716894e-01, 7.717022e-01, 7.717151e-01, 7.717280e-01, 7.717409e-01, 7.717538e-01, 7.717667e-01, 7.717796e-01, 7.717925e-01, 7.718054e-01, 7.718182e-01, 7.718312e-01, 7.718440e-01, 7.718569e-01, 7.718698e-01, 7.718827e-01, 7.718956e-01, 7.719085e-01, 7.719214e-01, 7.719343e-01, 7.719472e-01, 7.719601e-01, 7.719730e-01, 7.719859e-01, 7.719987e-01, 7.720116e-01, 7.720245e-01, 7.720374e-01, 7.720503e-01, 7.720632e-01, 7.720761e-01, 7.720890e-01, 7.721019e-01, 7.721148e-01, 7.721277e-01, 7.721405e-01, 7.721534e-01, 7.721663e-01, 7.721792e-01, 7.721921e-01, 7.722050e-01, 7.722179e-01, 7.722308e-01, 7.722437e-01, 7.722566e-01, 7.722694e-01, 7.722823e-01, 7.722952e-01, 7.723081e-01, 7.723210e-01, 7.723339e-01, 7.723468e-01, 7.723597e-01, 7.723725e-01, 7.723854e-01, 7.723984e-01, 7.724112e-01, 7.724241e-01, 7.724370e-01, 7.724499e-01, 7.724627e-01, 7.724757e-01, 7.724885e-01, 7.725014e-01, 7.725143e-01, 7.725272e-01, 7.725402e-01, 7.725530e-01, 7.725658e-01, 7.725787e-01, 7.725917e-01, 7.726045e-01, 7.726175e-01, 7.726303e-01, 7.726432e-01, 7.726560e-01, 7.726690e-01, 7.726818e-01, 7.726948e-01, 7.727076e-01, 7.727205e-01, 7.727333e-01, 7.727463e-01, 7.727591e-01, 7.727721e-01, 7.727849e-01, 7.727978e-01, 7.728106e-01, 7.728236e-01, 7.728364e-01, 7.728494e-01, 7.728623e-01, 7.728751e-01, 7.728879e-01, 7.729009e-01, 7.729138e-01, 7.729267e-01, 7.729396e-01, 7.729524e-01, 7.729653e-01, 7.729782e-01, 7.729911e-01, 7.730040e-01, 7.730169e-01, 7.730297e-01, 7.730426e-01, 7.730555e-01, 7.730684e-01, 7.730813e-01, 7.730941e-01, 7.731070e-01, 7.731199e-01, 7.731328e-01, 7.731457e-01, 7.731585e-01, 7.731714e-01, 7.731843e-01, 7.731972e-01, 7.732101e-01, 7.732229e-01, 7.732358e-01, 7.732487e-01, 7.732616e-01, 7.732744e-01, 7.732873e-01, 7.733002e-01, 7.733131e-01, 7.733260e-01, 7.733388e-01, 7.733517e-01, 7.733646e-01, 7.733775e-01, 7.733904e-01, 7.734032e-01, 7.734161e-01, 7.734290e-01, 7.734419e-01, 7.734547e-01, 7.734677e-01, 7.734805e-01, 7.734934e-01, 7.735062e-01, 7.735192e-01, 7.735320e-01, 7.735450e-01, 7.735578e-01, 7.735707e-01, 7.735835e-01, 7.735965e-01, 7.736093e-01, 7.736222e-01, 7.736351e-01, 7.736480e-01, 7.736608e-01, 7.736737e-01, 7.736866e-01, 7.736995e-01, 7.737123e-01, 7.737252e-01, 7.737381e-01, 7.737509e-01, 7.737638e-01, 7.737767e-01, 7.737896e-01, 7.738024e-01, 7.738153e-01, 7.738282e-01, 7.738411e-01, 7.738539e-01, 7.738668e-01, 7.738797e-01, 7.738925e-01, 7.739054e-01, 7.739183e-01, 7.739312e-01, 7.739440e-01, 7.739570e-01, 7.739698e-01, 7.739826e-01, 7.739955e-01, 7.740085e-01, 7.740213e-01, 7.740341e-01, 7.740470e-01, 7.740600e-01, 7.740728e-01, 7.740856e-01, 7.740986e-01, 7.741114e-01, 7.741243e-01, 7.741371e-01, 7.741501e-01, 7.741629e-01, 7.741758e-01, 7.741887e-01, 7.742015e-01, 7.742144e-01, 7.742273e-01, 7.742401e-01, 7.742530e-01, 7.742659e-01, 7.742787e-01, 7.742916e-01, 7.743045e-01, 7.743173e-01, 7.743302e-01, 7.743431e-01, 7.743559e-01, 7.743688e-01, 7.743817e-01, 7.743945e-01, 7.744074e-01, 7.744203e-01, 7.744331e-01, 7.744461e-01, 7.744589e-01, 7.744718e-01, 7.744846e-01, 7.744976e-01, 7.745104e-01, 7.745233e-01, 7.745362e-01, 7.745489e-01, 7.745619e-01, 7.745748e-01, 7.745876e-01, 7.746005e-01, 7.746134e-01, 7.746262e-01, 7.746391e-01, 7.746520e-01, 7.746648e-01, 7.746777e-01, 7.746905e-01, 7.747034e-01, 7.747163e-01, 7.747291e-01, 7.747420e-01, 7.747549e-01, 7.747678e-01, 7.747806e-01, 7.747934e-01, 7.748063e-01, 7.748193e-01, 7.748321e-01, 7.748449e-01, 7.748579e-01, 7.748707e-01, 7.748836e-01, 7.748964e-01, 7.749093e-01, 7.749222e-01, 7.749350e-01, 7.749479e-01, 7.749607e-01, 7.749736e-01, 7.749865e-01, 7.749993e-01, 7.750122e-01, 7.750251e-01, 7.750379e-01, 7.750508e-01, 7.750636e-01, 7.750765e-01, 7.750894e-01, 7.751023e-01, 7.751151e-01, 7.751279e-01, 7.751409e-01, 7.751536e-01, 7.751666e-01, 7.751794e-01, 7.751923e-01, 7.752052e-01, 7.752180e-01, 7.752309e-01, 7.752438e-01, 7.752566e-01, 7.752695e-01, 7.752823e-01, 7.752952e-01, 7.753080e-01, 7.753209e-01, 7.753338e-01, 7.753466e-01, 7.753595e-01, 7.753723e-01, 7.753853e-01, 7.753981e-01, 7.754110e-01, 7.754238e-01, 7.754366e-01, 7.754496e-01, 7.754624e-01, 7.754753e-01, 7.754881e-01, 7.755010e-01, 7.755138e-01, 7.755267e-01, 7.755395e-01, 7.755524e-01, 7.755653e-01, 7.755781e-01, 7.755910e-01, 7.756038e-01, 7.756167e-01, 7.756295e-01, 7.756425e-01, 7.756553e-01, 7.756681e-01, 7.756810e-01, 7.756939e-01, 7.757066e-01, 7.757196e-01, 7.757325e-01, 7.757453e-01, 7.757582e-01, 7.757710e-01, 7.757839e-01, 7.757967e-01, 7.758096e-01, 7.758224e-01, 7.758353e-01, 7.758482e-01, 7.758610e-01, 7.758738e-01, 7.758867e-01, 7.758995e-01, 7.759125e-01, 7.759253e-01, 7.759382e-01, 7.759510e-01, 7.759639e-01, 7.759767e-01, 7.759896e-01, 7.760024e-01, 7.760153e-01, 7.760281e-01, 7.760410e-01, 7.760538e-01, 7.760667e-01, 7.760795e-01, 7.760924e-01, 7.761052e-01, 7.761182e-01, 7.761310e-01, 7.761438e-01, 7.761567e-01, 7.761695e-01, 7.761824e-01, 7.761953e-01, 7.762081e-01, 7.762210e-01, 7.762338e-01, 7.762467e-01, 7.762595e-01, 7.762724e-01, 7.762852e-01, 7.762980e-01, 7.763109e-01, 7.763237e-01, 7.763367e-01, 7.763495e-01, 7.763624e-01, 7.763752e-01, 7.763880e-01, 7.764009e-01, 7.764138e-01, 7.764266e-01, 7.764395e-01, 7.764523e-01, 7.764651e-01, 7.764780e-01, 7.764908e-01, 7.765037e-01, 7.765166e-01, 7.765294e-01, 7.765422e-01, 7.765552e-01, 7.765680e-01, 7.765808e-01, 7.765937e-01, 7.766065e-01, 7.766194e-01, 7.766322e-01, 7.766451e-01, 7.766579e-01, 7.766708e-01, 7.766836e-01, 7.766964e-01, 7.767093e-01, 7.767221e-01, 7.767351e-01, 7.767479e-01, 7.767607e-01, 7.767736e-01, 7.767864e-01, 7.767993e-01, 7.768121e-01, 7.768250e-01, 7.768378e-01, 7.768506e-01, 7.768635e-01, 7.768763e-01, 7.768892e-01, 7.769020e-01, 7.769148e-01, 7.769278e-01, 7.769406e-01, 7.769535e-01, 7.769663e-01, 7.769791e-01, 7.769920e-01, 7.770048e-01, 7.770177e-01, 7.770305e-01, 7.770433e-01, 7.770562e-01, 7.770690e-01, 7.770819e-01, 7.770947e-01, 7.771075e-01, 7.771205e-01, 7.771333e-01, 7.771462e-01, 7.771590e-01, 7.771718e-01, 7.771847e-01, 7.771975e-01, 7.772103e-01, 7.772232e-01, 7.772360e-01, 7.772489e-01, 7.772617e-01, 7.772745e-01, 7.772875e-01, 7.773002e-01, 7.773131e-01, 7.773260e-01, 7.773388e-01, 7.773516e-01, 7.773645e-01, 7.773773e-01, 7.773902e-01, 7.774031e-01, 7.774158e-01, 7.774287e-01, 7.774416e-01, 7.774544e-01, 7.774673e-01, 7.774801e-01, 7.774929e-01, 7.775058e-01, 7.775186e-01, 7.775314e-01, 7.775443e-01, 7.775571e-01, 7.775699e-01, 7.775828e-01, 7.775956e-01, 7.776085e-01, 7.776214e-01, 7.776341e-01, 7.776470e-01, 7.776599e-01, 7.776727e-01, 7.776855e-01, 7.776984e-01, 7.777112e-01, 7.777240e-01, 7.777369e-01, 7.777497e-01, 7.777625e-01, 7.777755e-01, 7.777883e-01, 7.778011e-01, 7.778140e-01, 7.778268e-01, 7.778396e-01, 7.778524e-01, 7.778653e-01, 7.778781e-01, 7.778909e-01, 7.779039e-01, 7.779167e-01, 7.779295e-01, 7.779424e-01, 7.779552e-01, 7.779680e-01, 7.779808e-01, 7.779937e-01, 7.780065e-01, 7.780193e-01, 7.780322e-01, 7.780451e-01, 7.780579e-01, 7.780707e-01, 7.780836e-01, 7.780964e-01, 7.781092e-01, 7.781221e-01, 7.781349e-01, 7.781477e-01, 7.781605e-01, 7.781734e-01, 7.781863e-01, 7.781991e-01, 7.782120e-01, 7.782248e-01, 7.782376e-01, 7.782504e-01, 7.782633e-01, 7.782761e-01, 7.782889e-01, 7.783017e-01, 7.783147e-01, 7.783274e-01, 7.783402e-01, 7.783530e-01, 7.783660e-01, 7.783788e-01, 7.783916e-01, 7.784044e-01, 7.784173e-01, 7.784301e-01, 7.784429e-01, 7.784557e-01, 7.784686e-01, 7.784814e-01, 7.784942e-01, 7.785071e-01, 7.785200e-01, 7.785328e-01, 7.785456e-01, 7.785584e-01, 7.785713e-01, 7.785841e-01, 7.785969e-01, 7.786098e-01, 7.786226e-01, 7.786354e-01, 7.786483e-01, 7.786611e-01, 7.786739e-01, 7.786868e-01, 7.786996e-01, 7.787124e-01, 7.787252e-01, 7.787381e-01, 7.787510e-01, 7.787638e-01, 7.787766e-01, 7.787894e-01, 7.788023e-01, 7.788151e-01, 7.788279e-01, 7.788407e-01, 7.788535e-01, 7.788664e-01, 7.788792e-01, 7.788920e-01, 7.789049e-01, 7.789177e-01, 7.789306e-01, 7.789434e-01, 7.789562e-01, 7.789690e-01, 7.789818e-01, 7.789947e-01, 7.790076e-01, 7.790204e-01, 7.790332e-01, 7.790460e-01, 7.790589e-01, 7.790717e-01, 7.790845e-01, 7.790973e-01, 7.791101e-01, 7.791229e-01, 7.791358e-01, 7.791486e-01, 7.791615e-01, 7.791743e-01, 7.791871e-01, 7.791999e-01, 7.792128e-01, 7.792256e-01, 7.792384e-01, 7.792512e-01, 7.792640e-01, 7.792768e-01, 7.792898e-01, 7.793026e-01, 7.793154e-01, 7.793282e-01, 7.793410e-01, 7.793538e-01, 7.793667e-01, 7.793795e-01, 7.793924e-01, 7.794052e-01, 7.794180e-01, 7.794308e-01, 7.794436e-01, 7.794565e-01, 7.794693e-01, 7.794821e-01, 7.794949e-01, 7.795078e-01, 7.795206e-01, 7.795334e-01, 7.795463e-01, 7.795591e-01, 7.795719e-01, 7.795847e-01, 7.795975e-01, 7.796103e-01, 7.796232e-01, 7.796360e-01, 7.796488e-01, 7.796617e-01, 7.796745e-01, 7.796873e-01, 7.797001e-01, 7.797129e-01, 7.797257e-01, 7.797385e-01, 7.797515e-01, 7.797642e-01, 7.797771e-01, 7.797899e-01, 7.798027e-01, 7.798155e-01, 7.798283e-01, 7.798411e-01, 7.798539e-01, 7.798668e-01, 7.798797e-01, 7.798925e-01, 7.799053e-01, 7.799181e-01, 7.799309e-01, 7.799437e-01, 7.799565e-01, 7.799693e-01, 7.799821e-01, 7.799950e-01, 7.800078e-01, 7.800207e-01, 7.800335e-01, 7.800463e-01, 7.800591e-01, 7.800719e-01, 7.800847e-01, 7.800975e-01, 7.801104e-01, 7.801232e-01, 7.801360e-01, 7.801488e-01, 7.801616e-01, 7.801744e-01, 7.801874e-01, 7.802001e-01, 7.802129e-01, 7.802258e-01, 7.802386e-01, 7.802514e-01, 7.802642e-01, 7.802770e-01, 7.802898e-01, 7.803026e-01, 7.803155e-01, 7.803283e-01, 7.803411e-01, 7.803539e-01, 7.803667e-01, 7.803795e-01, 7.803923e-01, 7.804052e-01, 7.804180e-01, 7.804309e-01, 7.804437e-01, 7.804565e-01, 7.804693e-01, 7.804821e-01, 7.804949e-01, 7.805077e-01, 7.805206e-01, 7.805334e-01, 7.805462e-01, 7.805590e-01, 7.805718e-01, 7.805846e-01, 7.805974e-01, 7.806103e-01, 7.806231e-01, 7.806359e-01, 7.806487e-01, 7.806615e-01, 7.806743e-01, 7.806871e-01, 7.806999e-01, 7.807127e-01, 7.807255e-01, 7.807384e-01, 7.807512e-01, 7.807640e-01, 7.807768e-01, 7.807896e-01, 7.808024e-01, 7.808152e-01, 7.808281e-01, 7.808409e-01, 7.808537e-01, 7.808665e-01, 7.808793e-01, 7.808921e-01, 7.809049e-01, 7.809178e-01, 7.809306e-01, 7.809434e-01, 7.809562e-01, 7.809690e-01, 7.809818e-01, 7.809947e-01, 7.810075e-01, 7.810202e-01, 7.810330e-01, 7.810459e-01, 7.810587e-01, 7.810715e-01, 7.810843e-01, 7.810971e-01, 7.811099e-01, 7.811227e-01, 7.811356e-01, 7.811484e-01, 7.811612e-01, 7.811740e-01, 7.811868e-01, 7.811996e-01, 7.812124e-01, 7.812253e-01, 7.812381e-01, 7.812509e-01, 7.812636e-01, 7.812764e-01, 7.812892e-01, 7.813020e-01, 7.813148e-01, 7.813277e-01, 7.813405e-01, 7.813533e-01, 7.813661e-01, 7.813789e-01, 7.813917e-01, 7.814046e-01, 7.814174e-01, 7.814302e-01, 7.814430e-01, 7.814558e-01, 7.814686e-01, 7.814814e-01, 7.814941e-01, 7.815070e-01, 7.815198e-01, 7.815326e-01, 7.815454e-01, 7.815582e-01, 7.815710e-01, 7.815838e-01, 7.815967e-01, 7.816095e-01, 7.816223e-01, 7.816351e-01, 7.816479e-01, 7.816606e-01, 7.816734e-01, 7.816862e-01, 7.816991e-01, 7.817119e-01, 7.817247e-01, 7.817375e-01, 7.817503e-01, 7.817631e-01, 7.817760e-01, 7.817888e-01, 7.818015e-01, 7.818143e-01, 7.818271e-01, 7.818399e-01, 7.818527e-01, 7.818655e-01, 7.818784e-01, 7.818912e-01, 7.819040e-01, 7.819167e-01, 7.819296e-01, 7.819423e-01, 7.819551e-01, 7.819679e-01, 7.819808e-01, 7.819936e-01, 7.820064e-01, 7.820192e-01, 7.820320e-01, 7.820448e-01, 7.820576e-01, 7.820704e-01, 7.820832e-01, 7.820960e-01, 7.821088e-01, 7.821217e-01, 7.821344e-01, 7.821472e-01, 7.821600e-01, 7.821728e-01, 7.821856e-01, 7.821984e-01, 7.822112e-01, 7.822239e-01, 7.822368e-01, 7.822496e-01, 7.822624e-01, 7.822752e-01, 7.822880e-01, 7.823008e-01, 7.823136e-01, 7.823264e-01, 7.823392e-01, 7.823520e-01, 7.823648e-01, 7.823776e-01, 7.823904e-01, 7.824032e-01, 7.824160e-01, 7.824288e-01, 7.824416e-01, 7.824544e-01, 7.824671e-01, 7.824799e-01, 7.824928e-01, 7.825056e-01, 7.825184e-01, 7.825312e-01, 7.825440e-01, 7.825568e-01, 7.825696e-01, 7.825823e-01, 7.825952e-01, 7.826079e-01, 7.826207e-01, 7.826335e-01, 7.826464e-01, 7.826592e-01, 7.826720e-01, 7.826847e-01, 7.826975e-01, 7.827103e-01, 7.827231e-01, 7.827359e-01, 7.827487e-01, 7.827615e-01, 7.827743e-01, 7.827871e-01, 7.827999e-01, 7.828127e-01, 7.828255e-01, 7.828383e-01, 7.828511e-01, 7.828639e-01, 7.828766e-01, 7.828894e-01, 7.829022e-01, 7.829151e-01, 7.829278e-01, 7.829406e-01, 7.829534e-01, 7.829663e-01, 7.829791e-01, 7.829918e-01, 7.830046e-01, 7.830174e-01, 7.830302e-01, 7.830430e-01, 7.830558e-01, 7.830685e-01, 7.830814e-01, 7.830942e-01, 7.831069e-01, 7.831197e-01, 7.831326e-01, 7.831454e-01, 7.831581e-01, 7.831709e-01, 7.831837e-01, 7.831965e-01, 7.832093e-01, 7.832221e-01, 7.832349e-01, 7.832477e-01, 7.832604e-01, 7.832732e-01, 7.832860e-01, 7.832989e-01, 7.833116e-01, 7.833244e-01, 7.833372e-01, 7.833500e-01, 7.833627e-01, 7.833756e-01, 7.833884e-01, 7.834012e-01, 7.834139e-01, 7.834267e-01, 7.834395e-01, 7.834523e-01, 7.834651e-01, 7.834779e-01, 7.834907e-01, 7.835034e-01, 7.835162e-01, 7.835290e-01, 7.835419e-01, 7.835546e-01, 7.835674e-01, 7.835802e-01, 7.835929e-01, 7.836058e-01, 7.836186e-01, 7.836314e-01, 7.836441e-01, 7.836569e-01, 7.836697e-01, 7.836825e-01, 7.836953e-01, 7.837081e-01, 7.837209e-01, 7.837336e-01, 7.837464e-01, 7.837592e-01, 7.837720e-01, 7.837848e-01, 7.837976e-01, 7.838103e-01, 7.838231e-01, 7.838359e-01, 7.838488e-01, 7.838615e-01, 7.838743e-01, 7.838871e-01, 7.838998e-01, 7.839127e-01, 7.839255e-01, 7.839382e-01, 7.839510e-01, 7.839638e-01, 7.839766e-01, 7.839894e-01, 7.840022e-01, 7.840149e-01, 7.840277e-01, 7.840405e-01, 7.840533e-01, 7.840661e-01, 7.840789e-01, 7.840916e-01, 7.841044e-01, 7.841172e-01, 7.841300e-01, 7.841428e-01, 7.841556e-01, 7.841683e-01, 7.841811e-01, 7.841939e-01, 7.842067e-01, 7.842195e-01, 7.842323e-01, 7.842450e-01, 7.842578e-01, 7.842706e-01, 7.842833e-01, 7.842962e-01, 7.843089e-01, 7.843217e-01, 7.843345e-01, 7.843472e-01, 7.843601e-01, 7.843729e-01, 7.843856e-01, 7.843984e-01, 7.844113e-01, 7.844239e-01, 7.844368e-01, 7.844495e-01, 7.844623e-01, 7.844751e-01, 7.844878e-01, 7.845007e-01, 7.845135e-01, 7.845262e-01, 7.845390e-01, 7.845517e-01, 7.845646e-01, 7.845774e-01, 7.845901e-01, 7.846029e-01, 7.846156e-01, 7.846285e-01, 7.846413e-01, 7.846540e-01, 7.846668e-01, 7.846795e-01, 7.846923e-01, 7.847052e-01, 7.847179e-01, 7.847307e-01, 7.847434e-01, 7.847562e-01, 7.847691e-01, 7.847818e-01, 7.847946e-01, 7.848073e-01, 7.848201e-01, 7.848330e-01, 7.848457e-01, 7.848585e-01, 7.848712e-01, 7.848840e-01, 7.848969e-01, 7.849095e-01, 7.849224e-01, 7.849351e-01, 7.849479e-01, 7.849606e-01, 7.849734e-01, 7.849863e-01, 7.849990e-01, 7.850118e-01, 7.850245e-01, 7.850373e-01, 7.850500e-01, 7.850628e-01, 7.850757e-01, 7.850884e-01, 7.851012e-01, 7.851139e-01, 7.851267e-01, 7.851395e-01, 7.851523e-01, 7.851650e-01, 7.851778e-01, 7.851906e-01, 7.852034e-01, 7.852162e-01, 7.852289e-01, 7.852417e-01, 7.852545e-01, 7.852673e-01, 7.852800e-01, 7.852928e-01, 7.853056e-01, 7.853184e-01, 7.853312e-01, 7.853439e-01, 7.853567e-01, 7.853695e-01, 7.853823e-01, 7.853950e-01, 7.854078e-01, 7.854205e-01, 7.854334e-01, 7.854460e-01, 7.854589e-01, 7.854716e-01, 7.854844e-01, 7.854971e-01, 7.855099e-01, 7.855227e-01, 7.855355e-01, 7.855482e-01, 7.855610e-01, 7.855738e-01, 7.855865e-01, 7.855993e-01, 7.856121e-01, 7.856249e-01, 7.856376e-01, 7.856504e-01, 7.856632e-01, 7.856760e-01, 7.856887e-01, 7.857015e-01, 7.857143e-01, 7.857271e-01, 7.857398e-01, 7.857526e-01, 7.857653e-01, 7.857780e-01, 7.857909e-01, 7.858036e-01, 7.858164e-01, 7.858291e-01, 7.858419e-01, 7.858547e-01, 7.858675e-01, 7.858802e-01, 7.858930e-01, 7.859058e-01, 7.859186e-01, 7.859313e-01, 7.859441e-01, 7.859569e-01, 7.859697e-01, 7.859824e-01, 7.859952e-01, 7.860079e-01, 7.860208e-01, 7.860335e-01, 7.860462e-01, 7.860590e-01, 7.860717e-01, 7.860845e-01, 7.860973e-01, 7.861101e-01, 7.861228e-01, 7.861356e-01, 7.861484e-01, 7.861612e-01, 7.861739e-01, 7.861866e-01, 7.861995e-01, 7.862121e-01, 7.862250e-01, 7.862377e-01, 7.862505e-01, 7.862632e-01, 7.862760e-01, 7.862888e-01, 7.863015e-01, 7.863143e-01, 7.863271e-01, 7.863398e-01, 7.863526e-01, 7.863654e-01, 7.863781e-01, 7.863908e-01, 7.864037e-01, 7.864164e-01, 7.864292e-01, 7.864419e-01, 7.864547e-01, 7.864674e-01, 7.864802e-01, 7.864930e-01, 7.865057e-01, 7.865185e-01, 7.865313e-01, 7.865441e-01, 7.865568e-01, 7.865695e-01, 7.865824e-01, 7.865950e-01, 7.866079e-01, 7.866206e-01, 7.866333e-01, 7.866461e-01, 7.866589e-01, 7.866717e-01, 7.866844e-01, 7.866971e-01, 7.867100e-01, 7.867227e-01, 7.867355e-01, 7.867482e-01, 7.867609e-01, 7.867737e-01, 7.867865e-01, 7.867992e-01, 7.868120e-01, 7.868248e-01, 7.868376e-01, 7.868503e-01, 7.868630e-01, 7.868758e-01, 7.868885e-01, 7.869014e-01, 7.869141e-01, 7.869268e-01, 7.869396e-01, 7.869524e-01, 7.869651e-01, 7.869779e-01, 7.869906e-01, 7.870033e-01, 7.870162e-01, 7.870289e-01, 7.870417e-01, 7.870544e-01, 7.870672e-01, 7.870800e-01, 7.870927e-01, 7.871054e-01, 7.871183e-01, 7.871310e-01, 7.871437e-01, 7.871565e-01, 7.871692e-01, 7.871820e-01, 7.871948e-01, 7.872075e-01, 7.872202e-01, 7.872331e-01, 7.872458e-01, 7.872585e-01, 7.872713e-01, 7.872840e-01, 7.872968e-01, 7.873096e-01, 7.873223e-01, 7.873350e-01, 7.873479e-01, 7.873605e-01, 7.873733e-01, 7.873861e-01, 7.873988e-01, 7.874116e-01, 7.874244e-01, 7.874371e-01, 7.874498e-01, 7.874627e-01, 7.874753e-01, 7.874881e-01, 7.875009e-01, 7.875136e-01, 7.875264e-01, 7.875392e-01, 7.875519e-01, 7.875646e-01, 7.875775e-01, 7.875901e-01, 7.876029e-01, 7.876156e-01, 7.876284e-01, 7.876412e-01, 7.876539e-01, 7.876667e-01, 7.876794e-01, 7.876921e-01, 7.877049e-01, 7.877177e-01, 7.877304e-01, 7.877432e-01, 7.877560e-01, 7.877687e-01, 7.877814e-01, 7.877942e-01, 7.878069e-01, 7.878197e-01, 7.878324e-01, 7.878452e-01, 7.878579e-01, 7.878706e-01, 7.878834e-01, 7.878962e-01, 7.879089e-01, 7.879217e-01, 7.879345e-01, 7.879472e-01, 7.879599e-01, 7.879726e-01, 7.879854e-01, 7.879982e-01, 7.880109e-01, 7.880237e-01, 7.880365e-01, 7.880492e-01, 7.880619e-01, 7.880746e-01, 7.880874e-01, 7.881002e-01, 7.881129e-01, 7.881256e-01, 7.881384e-01, 7.881511e-01, 7.881639e-01, 7.881766e-01, 7.881894e-01, 7.882022e-01, 7.882149e-01, 7.882276e-01, 7.882404e-01, 7.882531e-01, 7.882659e-01, 7.882786e-01, 7.882914e-01, 7.883042e-01, 7.883168e-01, 7.883296e-01, 7.883424e-01, 7.883551e-01, 7.883679e-01, 7.883806e-01, 7.883933e-01, 7.884061e-01, 7.884189e-01, 7.884316e-01, 7.884443e-01, 7.884570e-01, 7.884699e-01, 7.884826e-01, 7.884953e-01, 7.885081e-01, 7.885208e-01, 7.885336e-01, 7.885463e-01, 7.885590e-01, 7.885718e-01, 7.885846e-01, 7.885973e-01, 7.886100e-01, 7.886227e-01, 7.886355e-01, 7.886483e-01, 7.886610e-01, 7.886738e-01, 7.886865e-01, 7.886992e-01, 7.887119e-01, 7.887247e-01, 7.887375e-01, 7.887502e-01, 7.887629e-01, 7.887756e-01, 7.887884e-01, 7.888012e-01, 7.888139e-01, 7.888266e-01, 7.888393e-01, 7.888521e-01, 7.888649e-01, 7.888776e-01, 7.888904e-01, 7.889031e-01, 7.889158e-01, 7.889285e-01, 7.889413e-01, 7.889541e-01, 7.889668e-01, 7.889795e-01, 7.889922e-01, 7.890050e-01, 7.890178e-01, 7.890305e-01, 7.890432e-01, 7.890559e-01, 7.890687e-01, 7.890814e-01, 7.890942e-01, 7.891070e-01, 7.891197e-01, 7.891324e-01, 7.891452e-01, 7.891579e-01, 7.891706e-01, 7.891834e-01, 7.891961e-01, 7.892089e-01, 7.892216e-01, 7.892343e-01, 7.892470e-01, 7.892598e-01, 7.892725e-01, 7.892853e-01, 7.892981e-01, 7.893108e-01, 7.893235e-01, 7.893362e-01, 7.893490e-01, 7.893617e-01, 7.893744e-01, 7.893872e-01, 7.893999e-01, 7.894127e-01, 7.894254e-01, 7.894381e-01, 7.894508e-01, 7.894636e-01, 7.894763e-01, 7.894891e-01, 7.895018e-01, 7.895145e-01, 7.895273e-01, 7.895400e-01, 7.895527e-01, 7.895654e-01, 7.895782e-01, 7.895909e-01, 7.896037e-01, 7.896165e-01, 7.896292e-01, 7.896419e-01, 7.896546e-01, 7.896674e-01, 7.896801e-01, 7.896928e-01, 7.897056e-01, 7.897183e-01, 7.897310e-01, 7.897437e-01, 7.897565e-01, 7.897693e-01, 7.897820e-01, 7.897947e-01, 7.898074e-01, 7.898202e-01, 7.898329e-01, 7.898456e-01, 7.898583e-01, 7.898711e-01, 7.898838e-01, 7.898965e-01, 7.899092e-01, 7.899220e-01, 7.899348e-01, 7.899475e-01, 7.899603e-01, 7.899730e-01, 7.899857e-01, 7.899984e-01, 7.900112e-01, 7.900239e-01, 7.900366e-01, 7.900493e-01, 7.900621e-01, 7.900748e-01, 7.900875e-01, 7.901003e-01, 7.901130e-01, 7.901257e-01, 7.901384e-01, 7.901512e-01, 7.901639e-01, 7.901766e-01, 7.901894e-01, 7.902021e-01, 7.902149e-01, 7.902276e-01, 7.902403e-01, 7.902530e-01, 7.902658e-01, 7.902785e-01, 7.902912e-01, 7.903039e-01, 7.903167e-01, 7.903294e-01, 7.903422e-01, 7.903548e-01, 7.903676e-01, 7.903803e-01, 7.903931e-01, 7.904058e-01, 7.904185e-01, 7.904312e-01, 7.904440e-01, 7.904567e-01, 7.904694e-01, 7.904822e-01, 7.904949e-01, 7.905076e-01, 7.905203e-01, 7.905331e-01, 7.905458e-01, 7.905585e-01, 7.905712e-01, 7.905840e-01, 7.905967e-01, 7.906094e-01, 7.906221e-01, 7.906349e-01, 7.906476e-01, 7.906603e-01, 7.906730e-01, 7.906858e-01, 7.906985e-01, 7.907112e-01, 7.907239e-01, 7.907367e-01, 7.907494e-01, 7.907621e-01, 7.907748e-01, 7.907876e-01, 7.908003e-01, 7.908130e-01, 7.908258e-01, 7.908385e-01, 7.908512e-01, 7.908639e-01, 7.908767e-01, 7.908894e-01, 7.909021e-01, 7.909148e-01, 7.909275e-01, 7.909402e-01, 7.909529e-01, 7.909657e-01, 7.909784e-01, 7.909911e-01, 7.910038e-01, 7.910166e-01, 7.910293e-01, 7.910420e-01, 7.910547e-01, 7.910675e-01, 7.910802e-01, 7.910929e-01, 7.911057e-01, 7.911184e-01, 7.911311e-01, 7.911438e-01, 7.911566e-01, 7.911692e-01, 7.911819e-01, 7.911947e-01, 7.912074e-01, 7.912201e-01, 7.912328e-01, 7.912456e-01, 7.912583e-01, 7.912710e-01, 7.912837e-01, 7.912965e-01, 7.913092e-01, 7.913219e-01, 7.913346e-01, 7.913473e-01, 7.913600e-01, 7.913728e-01, 7.913855e-01, 7.913982e-01, 7.914109e-01, 7.914237e-01, 7.914364e-01, 7.914491e-01, 7.914618e-01, 7.914746e-01, 7.914872e-01, 7.914999e-01, 7.915127e-01, 7.915254e-01, 7.915381e-01, 7.915508e-01, 7.915636e-01, 7.915763e-01, 7.915890e-01, 7.916017e-01, 7.916144e-01, 7.916271e-01, 7.916399e-01, 7.916526e-01, 7.916653e-01, 7.916780e-01, 7.916908e-01, 7.917035e-01, 7.917162e-01, 7.917289e-01, 7.917415e-01, 7.917543e-01, 7.917670e-01, 7.917798e-01, 7.917925e-01, 7.918052e-01, 7.918179e-01, 7.918305e-01, 7.918433e-01, 7.918560e-01, 7.918687e-01, 7.918815e-01, 7.918942e-01, 7.919070e-01, 7.919196e-01, 7.919323e-01, 7.919450e-01, 7.919577e-01, 7.919705e-01, 7.919832e-01, 7.919959e-01, 7.920086e-01, 7.920213e-01, 7.920340e-01, 7.920467e-01, 7.920595e-01, 7.920722e-01, 7.920848e-01, 7.920976e-01, 7.921103e-01, 7.921230e-01, 7.921358e-01, 7.921485e-01, 7.921612e-01, 7.921739e-01, 7.921866e-01, 7.921993e-01, 7.922120e-01, 7.922248e-01, 7.922375e-01, 7.922501e-01, 7.922629e-01, 7.922755e-01, 7.922883e-01, 7.923010e-01, 7.923137e-01, 7.923264e-01, 7.923391e-01, 7.923518e-01, 7.923646e-01, 7.923773e-01, 7.923899e-01, 7.924027e-01, 7.924154e-01, 7.924281e-01, 7.924408e-01, 7.924535e-01, 7.924662e-01, 7.924789e-01, 7.924917e-01, 7.925044e-01, 7.925170e-01, 7.925298e-01, 7.925425e-01, 7.925552e-01, 7.925680e-01, 7.925806e-01, 7.925933e-01, 7.926061e-01, 7.926188e-01, 7.926315e-01, 7.926441e-01, 7.926568e-01, 7.926696e-01, 7.926823e-01, 7.926949e-01, 7.927077e-01, 7.927204e-01, 7.927331e-01, 7.927458e-01, 7.927585e-01, 7.927712e-01, 7.927840e-01, 7.927967e-01, 7.928093e-01, 7.928221e-01, 7.928348e-01, 7.928475e-01, 7.928602e-01, 7.928728e-01, 7.928856e-01, 7.928983e-01, 7.929109e-01, 7.929237e-01, 7.929364e-01, 7.929491e-01, 7.929619e-01, 7.929745e-01, 7.929872e-01, 7.930000e-01, 7.930127e-01, 7.930253e-01, 7.930381e-01, 7.930508e-01, 7.930634e-01, 7.930762e-01, 7.930889e-01, 7.931016e-01, 7.931142e-01, 7.931270e-01, 7.931397e-01, 7.931525e-01, 7.931651e-01, 7.931778e-01, 7.931905e-01, 7.932032e-01, 7.932159e-01, 7.932286e-01, 7.932413e-01, 7.932540e-01, 7.932667e-01, 7.932794e-01, 7.932922e-01, 7.933048e-01, 7.933176e-01, 7.933303e-01, 7.933429e-01, 7.933556e-01, 7.933683e-01, 7.933811e-01, 7.933937e-01, 7.934064e-01, 7.934192e-01, 7.934318e-01, 7.934445e-01, 7.934573e-01, 7.934700e-01, 7.934827e-01, 7.934954e-01, 7.935081e-01, 7.935207e-01, 7.935334e-01, 7.935462e-01, 7.935588e-01, 7.935715e-01, 7.935843e-01, 7.935970e-01, 7.936096e-01, 7.936224e-01, 7.936351e-01, 7.936477e-01, 7.936605e-01, 7.936732e-01, 7.936859e-01, 7.936985e-01, 7.937113e-01, 7.937239e-01, 7.937366e-01, 7.937494e-01, 7.937620e-01, 7.937747e-01, 7.937875e-01, 7.938001e-01, 7.938128e-01, 7.938256e-01, 7.938382e-01, 7.938510e-01, 7.938637e-01, 7.938763e-01, 7.938890e-01, 7.939017e-01, 7.939144e-01, 7.939271e-01, 7.939398e-01, 7.939525e-01, 7.939652e-01, 7.939779e-01, 7.939906e-01, 7.940033e-01, 7.940159e-01, 7.940287e-01, 7.940414e-01, 7.940540e-01, 7.940668e-01, 7.940795e-01, 7.940921e-01, 7.941049e-01, 7.941176e-01, 7.941302e-01, 7.941430e-01, 7.941556e-01, 7.941684e-01, 7.941810e-01, 7.941937e-01, 7.942064e-01, 7.942191e-01, 7.942318e-01, 7.942445e-01, 7.942572e-01, 7.942699e-01, 7.942826e-01, 7.942953e-01, 7.943079e-01, 7.943207e-01, 7.943333e-01, 7.943461e-01, 7.943587e-01, 7.943714e-01, 7.943842e-01, 7.943968e-01, 7.944095e-01, 7.944221e-01, 7.944349e-01, 7.944476e-01, 7.944603e-01, 7.944730e-01, 7.944856e-01, 7.944984e-01, 7.945111e-01, 7.945237e-01, 7.945365e-01, 7.945491e-01, 7.945618e-01, 7.945746e-01, 7.945872e-01, 7.945999e-01, 7.946126e-01, 7.946253e-01, 7.946380e-01, 7.946507e-01, 7.946634e-01, 7.946760e-01, 7.946888e-01, 7.947014e-01, 7.947141e-01, 7.947268e-01, 7.947395e-01, 7.947522e-01, 7.947649e-01, 7.947776e-01, 7.947902e-01, 7.948030e-01, 7.948157e-01, 7.948283e-01, 7.948411e-01, 7.948537e-01, 7.948664e-01, 7.948790e-01, 7.948918e-01, 7.949044e-01, 7.949172e-01, 7.949299e-01, 7.949425e-01, 7.949553e-01, 7.949679e-01, 7.949806e-01, 7.949932e-01, 7.950060e-01, 7.950186e-01, 7.950313e-01, 7.950440e-01, 7.950567e-01, 7.950695e-01, 7.950821e-01, 7.950948e-01, 7.951074e-01, 7.951202e-01, 7.951328e-01, 7.951455e-01, 7.951581e-01, 7.951709e-01, 7.951835e-01, 7.951963e-01, 7.952089e-01, 7.952216e-01, 7.952343e-01, 7.952470e-01, 7.952597e-01, 7.952724e-01, 7.952850e-01, 7.952977e-01, 7.953104e-01, 7.953231e-01, 7.953358e-01, 7.953485e-01, 7.953612e-01, 7.953739e-01, 7.953866e-01, 7.953992e-01, 7.954119e-01, 7.954246e-01, 7.954373e-01, 7.954499e-01, 7.954627e-01, 7.954753e-01, 7.954881e-01, 7.955007e-01, 7.955133e-01, 7.955260e-01, 7.955387e-01, 7.955514e-01, 7.955641e-01, 7.955768e-01, 7.955894e-01, 7.956021e-01, 7.956148e-01, 7.956275e-01, 7.956402e-01, 7.956529e-01, 7.956655e-01, 7.956783e-01, 7.956909e-01, 7.957036e-01, 7.957163e-01, 7.957290e-01, 7.957416e-01, 7.957544e-01, 7.957670e-01, 7.957797e-01, 7.957923e-01, 7.958050e-01, 7.958177e-01, 7.958304e-01, 7.958431e-01, 7.958558e-01, 7.958685e-01, 7.958811e-01, 7.958938e-01, 7.959065e-01, 7.959192e-01, 7.959318e-01, 7.959445e-01, 7.959572e-01, 7.959698e-01, 7.959826e-01, 7.959952e-01, 7.960079e-01, 7.960206e-01, 7.960333e-01, 7.960460e-01, 7.960586e-01, 7.960713e-01, 7.960839e-01, 7.960967e-01, 7.961093e-01, 7.961221e-01, 7.961347e-01, 7.961473e-01, 7.961600e-01, 7.961727e-01, 7.961854e-01, 7.961981e-01, 7.962108e-01, 7.962235e-01, 7.962361e-01, 7.962488e-01, 7.962614e-01, 7.962742e-01, 7.962868e-01, 7.962995e-01, 7.963122e-01, 7.963248e-01, 7.963375e-01, 7.963502e-01, 7.963629e-01, 7.963756e-01, 7.963882e-01, 7.964009e-01, 7.964135e-01, 7.964263e-01, 7.964389e-01, 7.964516e-01, 7.964643e-01, 7.964770e-01, 7.964896e-01, 7.965023e-01, 7.965149e-01, 7.965277e-01, 7.965403e-01, 7.965530e-01, 7.965657e-01, 7.965783e-01, 7.965910e-01, 7.966037e-01, 7.966163e-01, 7.966291e-01, 7.966417e-01, 7.966543e-01, 7.966670e-01, 7.966797e-01, 7.966924e-01, 7.967051e-01, 7.967177e-01, 7.967305e-01, 7.967431e-01, 7.967557e-01, 7.967684e-01, 7.967811e-01, 7.967938e-01, 7.968065e-01, 7.968191e-01, 7.968318e-01, 7.968445e-01, 7.968571e-01, 7.968698e-01, 7.968825e-01, 7.968951e-01, 7.969078e-01, 7.969205e-01, 7.969331e-01, 7.969459e-01, 7.969585e-01, 7.969711e-01, 7.969838e-01, 7.969965e-01, 7.970091e-01, 7.970219e-01, 7.970345e-01, 7.970471e-01, 7.970599e-01, 7.970725e-01, 7.970852e-01, 7.970979e-01, 7.971105e-01, 7.971231e-01, 7.971359e-01, 7.971485e-01, 7.971612e-01, 7.971739e-01, 7.971866e-01, 7.971992e-01, 7.972119e-01, 7.972245e-01, 7.972372e-01, 7.972499e-01, 7.972625e-01, 7.972752e-01, 7.972879e-01, 7.973006e-01, 7.973132e-01, 7.973259e-01, 7.973385e-01, 7.973512e-01, 7.973639e-01, 7.973766e-01, 7.973892e-01, 7.974018e-01, 7.974146e-01, 7.974272e-01, 7.974399e-01, 7.974526e-01, 7.974652e-01, 7.974779e-01, 7.974905e-01, 7.975032e-01, 7.975159e-01, 7.975285e-01, 7.975413e-01, 7.975539e-01, 7.975665e-01, 7.975792e-01, 7.975919e-01, 7.976046e-01, 7.976172e-01, 7.976298e-01, 7.976425e-01, 7.976552e-01, 7.976678e-01, 7.976806e-01, 7.976932e-01, 7.977058e-01, 7.977185e-01, 7.977312e-01, 7.977439e-01, 7.977565e-01, 7.977691e-01, 7.977818e-01, 7.977945e-01, 7.978072e-01, 7.978198e-01, 7.978325e-01, 7.978451e-01, 7.978578e-01, 7.978704e-01, 7.978832e-01, 7.978958e-01, 7.979084e-01, 7.979211e-01, 7.979338e-01, 7.979465e-01, 7.979591e-01, 7.979717e-01, 7.979844e-01, 7.979971e-01, 7.980098e-01, 7.980224e-01, 7.980351e-01, 7.980477e-01, 7.980604e-01, 7.980730e-01, 7.980857e-01, 7.980984e-01, 7.981110e-01, 7.981237e-01, 7.981363e-01, 7.981490e-01, 7.981617e-01, 7.981743e-01, 7.981870e-01, 7.981997e-01, 7.982123e-01, 7.982250e-01, 7.982376e-01, 7.982503e-01, 7.982630e-01, 7.982756e-01, 7.982883e-01, 7.983009e-01, 7.983136e-01, 7.983263e-01, 7.983389e-01, 7.983515e-01, 7.983642e-01, 7.983768e-01, 7.983896e-01, 7.984022e-01, 7.984148e-01, 7.984275e-01, 7.984401e-01, 7.984529e-01, 7.984655e-01, 7.984781e-01, 7.984908e-01, 7.985034e-01, 7.985162e-01, 7.985288e-01, 7.985414e-01, 7.985541e-01, 7.985667e-01, 7.985793e-01, 7.985921e-01, 7.986047e-01, 7.986174e-01, 7.986300e-01, 7.986426e-01, 7.986553e-01, 7.986680e-01, 7.986807e-01, 7.986933e-01, 7.987059e-01, 7.987186e-01, 7.987313e-01, 7.987439e-01, 7.987565e-01, 7.987692e-01, 7.987819e-01, 7.987945e-01, 7.988071e-01, 7.988198e-01, 7.988325e-01, 7.988451e-01, 7.988577e-01, 7.988704e-01, 7.988831e-01, 7.988958e-01, 7.989084e-01, 7.989210e-01, 7.989337e-01, 7.989463e-01, 7.989590e-01, 7.989717e-01, 7.989843e-01, 7.989970e-01, 7.990096e-01, 7.990223e-01, 7.990349e-01, 7.990476e-01, 7.990602e-01, 7.990729e-01, 7.990856e-01, 7.990982e-01, 7.991108e-01, 7.991235e-01, 7.991361e-01, 7.991488e-01, 7.991614e-01, 7.991741e-01, 7.991868e-01, 7.991994e-01, 7.992120e-01, 7.992247e-01, 7.992374e-01, 7.992500e-01, 7.992626e-01, 7.992753e-01, 7.992879e-01, 7.993006e-01, 7.993132e-01, 7.993259e-01, 7.993386e-01, 7.993512e-01, 7.993639e-01, 7.993765e-01, 7.993891e-01, 7.994018e-01, 7.994144e-01, 7.994272e-01, 7.994398e-01, 7.994524e-01, 7.994651e-01, 7.994777e-01, 7.994903e-01, 7.995030e-01, 7.995156e-01, 7.995282e-01, 7.995409e-01, 7.995535e-01, 7.995661e-01, 7.995789e-01, 7.995915e-01, 7.996042e-01, 7.996168e-01, 7.996294e-01, 7.996421e-01, 7.996547e-01, 7.996674e-01, 7.996801e-01, 7.996927e-01, 7.997053e-01, 7.997180e-01, 7.997306e-01, 7.997432e-01, 7.997559e-01, 7.997686e-01, 7.997813e-01, 7.997939e-01, 7.998065e-01, 7.998192e-01, 7.998318e-01, 7.998444e-01, 7.998571e-01, 7.998697e-01, 7.998824e-01, 7.998950e-01, 7.999076e-01, 7.999203e-01, 7.999329e-01, 7.999456e-01, 7.999582e-01, 7.999709e-01, 7.999835e-01, 7.999961e-01, 8.000088e-01, 8.000214e-01, 8.000340e-01, 8.000467e-01, 8.000594e-01, 8.000721e-01, 8.000847e-01, 8.000973e-01, 8.001100e-01, 8.001226e-01, 8.001353e-01, 8.001479e-01, 8.001605e-01, 8.001732e-01, 8.001858e-01, 8.001985e-01, 8.002111e-01, 8.002238e-01, 8.002364e-01, 8.002490e-01, 8.002617e-01, 8.002743e-01, 8.002869e-01, 8.002996e-01, 8.003122e-01, 8.003249e-01, 8.003375e-01, 8.003501e-01, 8.003628e-01, 8.003755e-01, 8.003881e-01, 8.004007e-01, 8.004134e-01, 8.004260e-01, 8.004386e-01, 8.004513e-01, 8.004639e-01, 8.004766e-01, 8.004892e-01, 8.005018e-01, 8.005145e-01, 8.005272e-01, 8.005398e-01, 8.005524e-01, 8.005651e-01, 8.005777e-01, 8.005903e-01, 8.006029e-01, 8.006155e-01, 8.006282e-01, 8.006408e-01, 8.006535e-01, 8.006661e-01, 8.006787e-01, 8.006914e-01, 8.007040e-01, 8.007166e-01, 8.007293e-01, 8.007419e-01, 8.007545e-01, 8.007672e-01, 8.007799e-01, 8.007925e-01, 8.008052e-01, 8.008178e-01, 8.008304e-01, 8.008431e-01, 8.008557e-01, 8.008683e-01, 8.008810e-01, 8.008936e-01, 8.009062e-01, 8.009188e-01, 8.009315e-01, 8.009441e-01, 8.009567e-01, 8.009694e-01, 8.009820e-01, 8.009946e-01, 8.010073e-01, 8.010200e-01, 8.010326e-01, 8.010452e-01, 8.010579e-01, 8.010705e-01, 8.010831e-01, 8.010957e-01, 8.011084e-01, 8.011210e-01, 8.011336e-01, 8.011463e-01, 8.011589e-01, 8.011715e-01, 8.011842e-01, 8.011968e-01, 8.012094e-01, 8.012221e-01, 8.012347e-01, 8.012473e-01, 8.012599e-01, 8.012726e-01, 8.012852e-01, 8.012978e-01, 8.013105e-01, 8.013232e-01, 8.013358e-01, 8.013484e-01, 8.013610e-01, 8.013736e-01, 8.013862e-01, 8.013989e-01, 8.014116e-01, 8.014242e-01, 8.014368e-01, 8.014495e-01, 8.014621e-01, 8.014747e-01, 8.014873e-01, 8.015000e-01, 8.015126e-01, 8.015252e-01, 8.015379e-01, 8.015505e-01, 8.015631e-01, 8.015758e-01, 8.015884e-01, 8.016010e-01, 8.016136e-01, 8.016263e-01, 8.016389e-01, 8.016515e-01, 8.016642e-01, 8.016768e-01, 8.016894e-01, 8.017020e-01, 8.017147e-01, 8.017273e-01, 8.017399e-01, 8.017526e-01, 8.017651e-01, 8.017778e-01, 8.017904e-01, 8.018031e-01, 8.018157e-01, 8.018283e-01, 8.018410e-01, 8.018535e-01, 8.018662e-01, 8.018788e-01, 8.018914e-01, 8.019041e-01, 8.019167e-01, 8.019293e-01, 8.019419e-01, 8.019546e-01, 8.019672e-01, 8.019798e-01, 8.019925e-01, 8.020051e-01, 8.020177e-01, 8.020303e-01, 8.020430e-01, 8.020556e-01, 8.020683e-01, 8.020808e-01, 8.020934e-01, 8.021061e-01, 8.021187e-01, 8.021314e-01, 8.021441e-01, 8.021566e-01, 8.021692e-01, 8.021818e-01, 8.021945e-01, 8.022071e-01, 8.022197e-01, 8.022323e-01, 8.022450e-01, 8.022576e-01, 8.022702e-01, 8.022828e-01, 8.022954e-01, 8.023081e-01, 8.023207e-01, 8.023334e-01, 8.023459e-01, 8.023586e-01, 8.023712e-01, 8.023838e-01, 8.023965e-01, 8.024091e-01, 8.024217e-01, 8.024343e-01, 8.024470e-01, 8.024595e-01, 8.024722e-01, 8.024848e-01, 8.024974e-01, 8.025101e-01, 8.025227e-01, 8.025353e-01, 8.025479e-01, 8.025606e-01, 8.025731e-01, 8.025858e-01, 8.025984e-01, 8.026111e-01, 8.026237e-01, 8.026363e-01, 8.026489e-01, 8.026615e-01, 8.026742e-01, 8.026867e-01, 8.026993e-01, 8.027120e-01, 8.027247e-01, 8.027372e-01, 8.027498e-01, 8.027624e-01, 8.027751e-01, 8.027877e-01, 8.028003e-01, 8.028129e-01, 8.028256e-01, 8.028381e-01, 8.028508e-01, 8.028634e-01, 8.028761e-01, 8.028886e-01, 8.029013e-01, 8.029139e-01, 8.029265e-01, 8.029391e-01, 8.029518e-01, 8.029644e-01, 8.029769e-01, 8.029896e-01, 8.030022e-01, 8.030149e-01, 8.030274e-01, 8.030400e-01, 8.030527e-01, 8.030654e-01, 8.030779e-01, 8.030905e-01, 8.031031e-01, 8.031157e-01, 8.031284e-01, 8.031410e-01, 8.031536e-01, 8.031662e-01, 8.031788e-01, 8.031915e-01, 8.032041e-01, 8.032167e-01, 8.032293e-01, 8.032420e-01, 8.032545e-01, 8.032672e-01, 8.032798e-01, 8.032923e-01, 8.033050e-01, 8.033176e-01, 8.033302e-01, 8.033428e-01, 8.033555e-01, 8.033681e-01, 8.033807e-01, 8.033933e-01, 8.034059e-01, 8.034185e-01, 8.034312e-01, 8.034438e-01, 8.034563e-01, 8.034690e-01, 8.034816e-01, 8.034942e-01, 8.035068e-01, 8.035194e-01, 8.035320e-01, 8.035446e-01, 8.035573e-01, 8.035699e-01, 8.035825e-01, 8.035951e-01, 8.036077e-01, 8.036203e-01, 8.036330e-01, 8.036455e-01, 8.036581e-01, 8.036708e-01, 8.036833e-01, 8.036960e-01, 8.037086e-01, 8.037212e-01, 8.037338e-01, 8.037465e-01, 8.037590e-01, 8.037717e-01, 8.037843e-01, 8.037969e-01, 8.038095e-01, 8.038222e-01, 8.038347e-01, 8.038473e-01, 8.038599e-01, 8.038725e-01, 8.038852e-01, 8.038977e-01, 8.039104e-01, 8.039230e-01, 8.039356e-01, 8.039482e-01, 8.039609e-01, 8.039734e-01, 8.039860e-01, 8.039986e-01, 8.040112e-01, 8.040239e-01, 8.040364e-01, 8.040491e-01, 8.040617e-01, 8.040743e-01, 8.040869e-01, 8.040994e-01, 8.041121e-01, 8.041248e-01, 8.041373e-01, 8.041499e-01, 8.041625e-01, 8.041751e-01, 8.041878e-01, 8.042004e-01, 8.042130e-01, 8.042256e-01, 8.042381e-01, 8.042508e-01, 8.042634e-01, 8.042760e-01, 8.042886e-01, 8.043012e-01, 8.043138e-01, 8.043264e-01, 8.043391e-01, 8.043516e-01, 8.043642e-01, 8.043769e-01, 8.043894e-01, 8.044021e-01, 8.044146e-01, 8.044273e-01, 8.044399e-01, 8.044525e-01, 8.044651e-01, 8.044776e-01, 8.044903e-01, 8.045028e-01, 8.045155e-01, 8.045281e-01, 8.045407e-01, 8.045533e-01, 8.045659e-01, 8.045785e-01, 8.045911e-01, 8.046037e-01, 8.046163e-01, 8.046289e-01, 8.046415e-01, 8.046541e-01, 8.046668e-01, 8.046793e-01, 8.046920e-01, 8.047046e-01, 8.047171e-01, 8.047298e-01, 8.047423e-01, 8.047550e-01, 8.047675e-01, 8.047802e-01, 8.047927e-01, 8.048053e-01, 8.048179e-01, 8.048306e-01, 8.048432e-01, 8.048558e-01, 8.048684e-01, 8.048810e-01, 8.048936e-01, 8.049061e-01, 8.049188e-01, 8.049313e-01, 8.049440e-01, 8.049566e-01, 8.049692e-01, 8.049817e-01, 8.049944e-01, 8.050069e-01, 8.050196e-01, 8.050322e-01, 8.050448e-01, 8.050574e-01, 8.050700e-01, 8.050826e-01, 8.050951e-01, 8.051078e-01, 8.051203e-01, 8.051330e-01, 8.051456e-01, 8.051582e-01, 8.051707e-01, 8.051834e-01, 8.051959e-01, 8.052086e-01, 8.052211e-01, 8.052338e-01, 8.052464e-01, 8.052590e-01, 8.052715e-01, 8.052841e-01, 8.052967e-01, 8.053094e-01, 8.053219e-01, 8.053346e-01, 8.053471e-01, 8.053598e-01, 8.053723e-01, 8.053849e-01, 8.053975e-01, 8.054101e-01, 8.054227e-01, 8.054354e-01, 8.054479e-01, 8.054605e-01, 8.054731e-01, 8.054857e-01, 8.054983e-01, 8.055108e-01, 8.055235e-01, 8.055360e-01, 8.055487e-01, 8.055612e-01, 8.055739e-01, 8.055864e-01, 8.055991e-01, 8.056116e-01, 8.056242e-01, 8.056368e-01, 8.056495e-01, 8.056620e-01, 8.056746e-01, 8.056872e-01, 8.056998e-01, 8.057124e-01, 8.057250e-01, 8.057376e-01, 8.057501e-01, 8.057628e-01, 8.057753e-01, 8.057879e-01, 8.058006e-01, 8.058131e-01, 8.058258e-01, 8.058383e-01, 8.058509e-01, 8.058635e-01, 8.058761e-01, 8.058887e-01, 8.059012e-01, 8.059139e-01, 8.059264e-01, 8.059391e-01, 8.059517e-01, 8.059643e-01, 8.059768e-01, 8.059894e-01, 8.060020e-01, 8.060146e-01, 8.060272e-01, 8.060398e-01, 8.060524e-01, 8.060650e-01, 8.060775e-01, 8.060902e-01, 8.061027e-01, 8.061154e-01, 8.061279e-01, 8.061405e-01, 8.061531e-01, 8.061656e-01, 8.061783e-01, 8.061908e-01, 8.062034e-01, 8.062161e-01, 8.062286e-01, 8.062413e-01, 8.062538e-01, 8.062664e-01, 8.062790e-01, 8.062916e-01, 8.063042e-01, 8.063167e-01, 8.063293e-01, 8.063419e-01, 8.063545e-01, 8.063672e-01, 8.063797e-01, 8.063923e-01, 8.064049e-01, 8.064175e-01, 8.064301e-01, 8.064426e-01, 8.064552e-01, 8.064678e-01, 8.064804e-01, 8.064929e-01, 8.065056e-01, 8.065181e-01, 8.065307e-01, 8.065434e-01, 8.065559e-01, 8.065686e-01, 8.065811e-01, 8.065937e-01, 8.066063e-01, 8.066188e-01, 8.066314e-01, 8.066440e-01, 8.066566e-01, 8.066691e-01, 8.066818e-01, 8.066943e-01, 8.067070e-01, 8.067195e-01, 8.067321e-01, 8.067448e-01, 8.067573e-01, 8.067698e-01, 8.067825e-01, 8.067951e-01, 8.068076e-01, 8.068202e-01, 8.068328e-01, 8.068454e-01, 8.068580e-01, 8.068705e-01, 8.068831e-01, 8.068957e-01, 8.069083e-01, 8.069208e-01, 8.069335e-01, 8.069460e-01, 8.069586e-01, 8.069713e-01, 8.069838e-01, 8.069963e-01, 8.070090e-01, 8.070216e-01, 8.070341e-01, 8.070467e-01, 8.070593e-01, 8.070719e-01, 8.070845e-01, 8.070970e-01, 8.071096e-01, 8.071222e-01, 8.071348e-01, 8.071473e-01, 8.071599e-01, 8.071725e-01, 8.071851e-01, 8.071976e-01, 8.072103e-01, 8.072228e-01, 8.072354e-01, 8.072479e-01, 8.072606e-01, 8.072731e-01, 8.072857e-01, 8.072984e-01, 8.073109e-01, 8.073235e-01, 8.073361e-01, 8.073487e-01, 8.073612e-01, 8.073738e-01, 8.073864e-01, 8.073990e-01, 8.074115e-01, 8.074241e-01, 8.074367e-01, 8.074493e-01, 8.074618e-01, 8.074744e-01, 8.074870e-01, 8.074996e-01, 8.075121e-01, 8.075247e-01, 8.075373e-01, 8.075499e-01, 8.075624e-01, 8.075750e-01, 8.075876e-01, 8.076002e-01, 8.076128e-01, 8.076254e-01, 8.076379e-01, 8.076504e-01, 8.076631e-01, 8.076757e-01, 8.076882e-01, 8.077008e-01, 8.077134e-01, 8.077260e-01, 8.077385e-01, 8.077511e-01, 8.077638e-01, 8.077763e-01, 8.077888e-01, 8.078014e-01, 8.078140e-01, 8.078266e-01, 8.078392e-01, 8.078517e-01, 8.078642e-01, 8.078769e-01, 8.078895e-01, 8.079020e-01, 8.079146e-01, 8.079272e-01, 8.079398e-01, 8.079523e-01, 8.079649e-01, 8.079775e-01, 8.079901e-01, 8.080026e-01, 8.080152e-01, 8.080277e-01, 8.080404e-01, 8.080529e-01, 8.080655e-01, 8.080781e-01, 8.080906e-01, 8.081032e-01, 8.081158e-01, 8.081284e-01, 8.081409e-01, 8.081535e-01, 8.081661e-01, 8.081787e-01, 8.081912e-01, 8.082038e-01, 8.082164e-01, 8.082290e-01, 8.082415e-01, 8.082541e-01, 8.082666e-01, 8.082792e-01, 8.082918e-01, 8.083044e-01, 8.083169e-01, 8.083295e-01, 8.083420e-01, 8.083547e-01, 8.083672e-01, 8.083798e-01, 8.083923e-01, 8.084049e-01, 8.084175e-01, 8.084301e-01, 8.084427e-01, 8.084552e-01, 8.084677e-01, 8.084803e-01, 8.084930e-01, 8.085055e-01, 8.085181e-01, 8.085306e-01, 8.085431e-01, 8.085557e-01, 8.085684e-01, 8.085809e-01, 8.085935e-01, 8.086060e-01, 8.086185e-01, 8.086311e-01, 8.086438e-01, 8.086563e-01, 8.086689e-01, 8.086814e-01, 8.086940e-01, 8.087065e-01, 8.087191e-01, 8.087317e-01, 8.087443e-01, 8.087568e-01, 8.087694e-01, 8.087819e-01, 8.087945e-01, 8.088071e-01, 8.088197e-01, 8.088322e-01, 8.088448e-01, 8.088574e-01, 8.088699e-01, 8.088825e-01, 8.088951e-01, 8.089077e-01, 8.089202e-01, 8.089328e-01, 8.089454e-01, 8.089579e-01, 8.089705e-01, 8.089830e-01, 8.089955e-01, 8.090082e-01, 8.090208e-01, 8.090333e-01, 8.090459e-01, 8.090584e-01, 8.090709e-01, 8.090835e-01, 8.090961e-01, 8.091086e-01, 8.091213e-01, 8.091338e-01, 8.091464e-01, 8.091589e-01, 8.091715e-01, 8.091841e-01, 8.091966e-01, 8.092092e-01, 8.092217e-01, 8.092343e-01, 8.092469e-01, 8.092595e-01, 8.092720e-01, 8.092846e-01, 8.092971e-01, 8.093097e-01, 8.093222e-01, 8.093348e-01, 8.093473e-01, 8.093599e-01, 8.093724e-01, 8.093850e-01, 8.093976e-01, 8.094102e-01, 8.094227e-01, 8.094353e-01, 8.094479e-01, 8.094604e-01, 8.094730e-01, 8.094856e-01, 8.094981e-01, 8.095106e-01, 8.095232e-01, 8.095357e-01, 8.095483e-01, 8.095608e-01, 8.095735e-01, 8.095860e-01, 8.095986e-01, 8.096111e-01, 8.096237e-01, 8.096363e-01, 8.096488e-01, 8.096614e-01, 8.096740e-01, 8.096865e-01, 8.096991e-01, 8.097116e-01, 8.097242e-01, 8.097367e-01, 8.097492e-01, 8.097618e-01, 8.097744e-01, 8.097869e-01, 8.097995e-01, 8.098121e-01, 8.098246e-01, 8.098372e-01, 8.098498e-01, 8.098623e-01, 8.098749e-01, 8.098875e-01, 8.099000e-01, 8.099126e-01, 8.099251e-01, 8.099377e-01, 8.099502e-01, 8.099628e-01, 8.099753e-01, 8.099879e-01, 8.100004e-01, 8.100130e-01, 8.100256e-01, 8.100381e-01, 8.100507e-01, 8.100632e-01, 8.100758e-01, 8.100883e-01, 8.101009e-01, 8.101134e-01, 8.101260e-01, 8.101385e-01, 8.101511e-01, 8.101637e-01, 8.101762e-01, 8.101888e-01, 8.102013e-01, 8.102139e-01, 8.102264e-01, 8.102390e-01, 8.102515e-01, 8.102641e-01, 8.102766e-01, 8.102892e-01, 8.103018e-01, 8.103143e-01, 8.103269e-01, 8.103395e-01, 8.103520e-01, 8.103645e-01, 8.103771e-01, 8.103896e-01, 8.104022e-01, 8.104147e-01, 8.104273e-01, 8.104399e-01, 8.104524e-01, 8.104650e-01, 8.104776e-01, 8.104901e-01, 8.105026e-01, 8.105152e-01, 8.105277e-01, 8.105402e-01, 8.105528e-01, 8.105654e-01, 8.105779e-01, 8.105904e-01, 8.106030e-01, 8.106155e-01, 8.106281e-01, 8.106406e-01, 8.106532e-01, 8.106658e-01, 8.106783e-01, 8.106909e-01, 8.107034e-01, 8.107160e-01, 8.107285e-01, 8.107411e-01, 8.107536e-01, 8.107662e-01, 8.107787e-01, 8.107912e-01, 8.108038e-01, 8.108163e-01, 8.108289e-01, 8.108414e-01, 8.108540e-01, 8.108665e-01, 8.108791e-01, 8.108917e-01, 8.109042e-01, 8.109168e-01, 8.109293e-01, 8.109419e-01, 8.109545e-01, 8.109669e-01, 8.109795e-01, 8.109920e-01, 8.110046e-01, 8.110171e-01, 8.110297e-01, 8.110422e-01, 8.110548e-01, 8.110673e-01, 8.110799e-01, 8.110924e-01, 8.111050e-01, 8.111175e-01, 8.111300e-01, 8.111426e-01, 8.111551e-01, 8.111677e-01, 8.111802e-01, 8.111928e-01, 8.112054e-01, 8.112179e-01, 8.112305e-01, 8.112429e-01, 8.112555e-01, 8.112680e-01, 8.112806e-01, 8.112931e-01, 8.113057e-01, 8.113183e-01, 8.113308e-01, 8.113433e-01, 8.113558e-01, 8.113684e-01, 8.113809e-01, 8.113935e-01, 8.114061e-01, 8.114186e-01, 8.114312e-01, 8.114437e-01, 8.114562e-01, 8.114687e-01, 8.114813e-01, 8.114939e-01, 8.115064e-01, 8.115190e-01, 8.115315e-01, 8.115440e-01, 8.115565e-01, 8.115691e-01, 8.115817e-01, 8.115942e-01, 8.116068e-01, 8.116193e-01, 8.116318e-01, 8.116443e-01, 8.116569e-01, 8.116695e-01, 8.116820e-01, 8.116946e-01, 8.117071e-01, 8.117196e-01, 8.117321e-01, 8.117447e-01, 8.117573e-01, 8.117698e-01, 8.117824e-01, 8.117948e-01, 8.118074e-01, 8.118199e-01, 8.118325e-01, 8.118451e-01, 8.118576e-01, 8.118701e-01, 8.118826e-01, 8.118952e-01, 8.119077e-01, 8.119203e-01, 8.119329e-01, 8.119453e-01, 8.119579e-01, 8.119704e-01, 8.119830e-01, 8.119955e-01, 8.120080e-01, 8.120205e-01, 8.120331e-01, 8.120457e-01, 8.120582e-01, 8.120708e-01, 8.120832e-01, 8.120958e-01, 8.121083e-01, 8.121209e-01, 8.121335e-01, 8.121459e-01, 8.121585e-01, 8.121710e-01, 8.121836e-01, 8.121961e-01, 8.122086e-01, 8.122212e-01, 8.122337e-01, 8.122463e-01, 8.122588e-01, 8.122713e-01, 8.122839e-01, 8.122964e-01, 8.123090e-01, 8.123214e-01, 8.123340e-01, 8.123466e-01, 8.123591e-01, 8.123717e-01, 8.123841e-01, 8.123967e-01, 8.124092e-01, 8.124218e-01, 8.124343e-01, 8.124468e-01, 8.124593e-01, 8.124719e-01, 8.124844e-01, 8.124970e-01, 8.125095e-01, 8.125221e-01, 8.125346e-01, 8.125471e-01, 8.125597e-01, 8.125722e-01, 8.125848e-01, 8.125972e-01, 8.126098e-01, 8.126223e-01, 8.126349e-01, 8.126473e-01, 8.126599e-01, 8.126724e-01, 8.126850e-01, 8.126975e-01, 8.127100e-01, 8.127226e-01, 8.127351e-01, 8.127476e-01, 8.127602e-01, 8.127728e-01, 8.127853e-01, 8.127977e-01, 8.128103e-01, 8.128229e-01, 8.128353e-01, 8.128479e-01, 8.128604e-01, 8.128730e-01, 8.128855e-01, 8.128980e-01, 8.129106e-01, 8.129231e-01, 8.129356e-01, 8.129482e-01, 8.129607e-01, 8.129731e-01, 8.129857e-01, 8.129983e-01, 8.130108e-01, 8.130233e-01, 8.130358e-01, 8.130484e-01, 8.130609e-01, 8.130735e-01, 8.130860e-01, 8.130985e-01, 8.131110e-01, 8.131236e-01, 8.131361e-01, 8.131486e-01, 8.131611e-01, 8.131737e-01, 8.131862e-01, 8.131987e-01, 8.132113e-01, 8.132238e-01, 8.132363e-01, 8.132489e-01, 8.132614e-01, 8.132739e-01, 8.132864e-01, 8.132990e-01, 8.133115e-01, 8.133240e-01, 8.133366e-01, 8.133490e-01, 8.133616e-01, 8.133742e-01, 8.133866e-01, 8.133992e-01, 8.134117e-01, 8.134242e-01, 8.134367e-01, 8.134493e-01, 8.134618e-01, 8.134743e-01, 8.134869e-01, 8.134993e-01, 8.135119e-01, 8.135245e-01, 8.135369e-01, 8.135495e-01, 8.135620e-01, 8.135745e-01, 8.135871e-01, 8.135996e-01, 8.136121e-01, 8.136246e-01, 8.136372e-01, 8.136497e-01, 8.136622e-01, 8.136747e-01, 8.136873e-01, 8.136998e-01, 8.137124e-01, 8.137248e-01, 8.137374e-01, 8.137498e-01, 8.137624e-01, 8.137749e-01, 8.137874e-01, 8.138000e-01, 8.138126e-01, 8.138250e-01, 8.138375e-01, 8.138501e-01, 8.138626e-01, 8.138751e-01, 8.138876e-01, 8.139002e-01, 8.139127e-01, 8.139252e-01, 8.139377e-01, 8.139503e-01, 8.139628e-01, 8.139753e-01, 8.139878e-01, 8.140003e-01, 8.140129e-01, 8.140253e-01, 8.140379e-01, 8.140504e-01, 8.140630e-01, 8.140755e-01, 8.140880e-01, 8.141005e-01, 8.141130e-01, 8.141255e-01, 8.141381e-01, 8.141506e-01, 8.141631e-01, 8.141756e-01, 8.141881e-01, 8.142007e-01, 8.142132e-01, 8.142257e-01, 8.142382e-01, 8.142508e-01, 8.142633e-01, 8.142757e-01, 8.142883e-01, 8.143008e-01, 8.143134e-01, 8.143259e-01, 8.143384e-01, 8.143509e-01, 8.143634e-01, 8.143759e-01, 8.143884e-01, 8.144010e-01, 8.144135e-01, 8.144260e-01, 8.144385e-01, 8.144510e-01, 8.144636e-01, 8.144760e-01, 8.144886e-01, 8.145012e-01, 8.145136e-01, 8.145262e-01, 8.145387e-01, 8.145512e-01, 8.145637e-01, 8.145762e-01, 8.145887e-01, 8.146012e-01, 8.146138e-01, 8.146263e-01, 8.146388e-01, 8.146513e-01, 8.146638e-01, 8.146763e-01, 8.146889e-01, 8.147013e-01, 8.147139e-01, 8.147264e-01, 8.147389e-01, 8.147514e-01, 8.147640e-01, 8.147765e-01, 8.147889e-01, 8.148015e-01, 8.148140e-01, 8.148265e-01, 8.148390e-01, 8.148516e-01, 8.148640e-01, 8.148766e-01, 8.148891e-01, 8.149016e-01, 8.149140e-01, 8.149266e-01, 8.149391e-01, 8.149517e-01, 8.149641e-01, 8.149767e-01, 8.149891e-01, 8.150017e-01, 8.150142e-01, 8.150267e-01, 8.150393e-01, 8.150517e-01, 8.150643e-01, 8.150768e-01, 8.150893e-01, 8.151018e-01, 8.151144e-01, 8.151268e-01, 8.151394e-01, 8.151519e-01, 8.151644e-01, 8.151768e-01, 8.151894e-01, 8.152019e-01, 8.152145e-01, 8.152269e-01, 8.152395e-01, 8.152519e-01, 8.152644e-01, 8.152770e-01, 8.152894e-01, 8.153020e-01, 8.153145e-01, 8.153270e-01, 8.153395e-01, 8.153520e-01, 8.153645e-01, 8.153771e-01, 8.153895e-01, 8.154021e-01, 8.154145e-01, 8.154271e-01, 8.154396e-01, 8.154521e-01, 8.154646e-01, 8.154771e-01, 8.154896e-01, 8.155021e-01, 8.155146e-01, 8.155271e-01, 8.155397e-01, 8.155521e-01, 8.155647e-01, 8.155771e-01, 8.155897e-01, 8.156022e-01, 8.156148e-01, 8.156272e-01, 8.156397e-01, 8.156523e-01, 8.156647e-01, 8.156772e-01, 8.156897e-01, 8.157023e-01, 8.157147e-01, 8.157273e-01, 8.157398e-01, 8.157522e-01, 8.157648e-01, 8.157772e-01, 8.157898e-01, 8.158023e-01, 8.158149e-01, 8.158273e-01, 8.158399e-01, 8.158523e-01, 8.158648e-01, 8.158774e-01, 8.158898e-01, 8.159024e-01, 8.159149e-01, 8.159273e-01, 8.159398e-01, 8.159524e-01, 8.159649e-01, 8.159773e-01, 8.159899e-01, 8.160024e-01, 8.160148e-01, 8.160274e-01, 8.160399e-01, 8.160524e-01, 8.160649e-01, 8.160774e-01, 8.160899e-01, 8.161024e-01, 8.161150e-01, 8.161274e-01, 8.161399e-01, 8.161525e-01, 8.161649e-01, 8.161775e-01, 8.161899e-01, 8.162024e-01, 8.162150e-01, 8.162274e-01, 8.162400e-01, 8.162525e-01, 8.162649e-01, 8.162774e-01, 8.162900e-01, 8.163024e-01, 8.163149e-01, 8.163275e-01, 8.163400e-01, 8.163524e-01, 8.163649e-01, 8.163775e-01, 8.163899e-01, 8.164024e-01, 8.164150e-01, 8.164274e-01, 8.164400e-01, 8.164524e-01, 8.164650e-01, 8.164775e-01, 8.164899e-01, 8.165025e-01, 8.165150e-01, 8.165274e-01, 8.165399e-01, 8.165525e-01, 8.165649e-01, 8.165775e-01, 8.165900e-01, 8.166024e-01, 8.166150e-01, 8.166274e-01, 8.166399e-01, 8.166525e-01, 8.166649e-01, 8.166774e-01, 8.166900e-01, 8.167024e-01, 8.167149e-01, 8.167275e-01, 8.167399e-01, 8.167524e-01, 8.167650e-01, 8.167774e-01, 8.167899e-01, 8.168024e-01, 8.168149e-01, 8.168274e-01, 8.168399e-01, 8.168524e-01, 8.168648e-01, 8.168774e-01, 8.168899e-01, 8.169023e-01, 8.169149e-01, 8.169274e-01, 8.169399e-01, 8.169524e-01, 8.169649e-01, 8.169774e-01, 8.169899e-01, 8.170024e-01, 8.170149e-01, 8.170273e-01, 8.170398e-01, 8.170524e-01, 8.170648e-01, 8.170773e-01, 8.170899e-01, 8.171023e-01, 8.171148e-01, 8.171273e-01, 8.171398e-01, 8.171523e-01, 8.171648e-01, 8.171773e-01, 8.171898e-01, 8.172023e-01, 8.172148e-01, 8.172272e-01, 8.172398e-01, 8.172523e-01, 8.172647e-01, 8.172772e-01, 8.172898e-01, 8.173022e-01, 8.173147e-01, 8.173273e-01, 8.173397e-01, 8.173522e-01, 8.173646e-01, 8.173772e-01, 8.173897e-01, 8.174021e-01, 8.174146e-01, 8.174272e-01, 8.174396e-01, 8.174521e-01, 8.174646e-01, 8.174771e-01, 8.174896e-01, 8.175021e-01, 8.175146e-01, 8.175271e-01, 8.175396e-01, 8.175520e-01, 8.175646e-01, 8.175771e-01, 8.175895e-01, 8.176020e-01, 8.176146e-01, 8.176270e-01, 8.176395e-01, 8.176519e-01, 8.176645e-01, 8.176770e-01, 8.176894e-01, 8.177019e-01, 8.177145e-01, 8.177269e-01, 8.177394e-01, 8.177519e-01, 8.177643e-01, 8.177769e-01, 8.177894e-01, 8.178018e-01, 8.178143e-01, 8.178269e-01, 8.178393e-01, 8.178518e-01, 8.178642e-01, 8.178768e-01, 8.178893e-01, 8.179017e-01, 8.179142e-01, 8.179267e-01, 8.179393e-01, 8.179517e-01, 8.179642e-01, 8.179767e-01, 8.179891e-01, 8.180017e-01, 8.180141e-01, 8.180266e-01, 8.180391e-01, 8.180516e-01, 8.180641e-01, 8.180766e-01, 8.180891e-01, 8.181015e-01, 8.181141e-01, 8.181266e-01, 8.181390e-01, 8.181515e-01, 8.181639e-01, 8.181765e-01, 8.181890e-01, 8.182014e-01, 8.182139e-01, 8.182264e-01, 8.182389e-01, 8.182514e-01, 8.182639e-01, 8.182763e-01, 8.182888e-01, 8.183013e-01, 8.183138e-01, 8.183263e-01, 8.183388e-01, 8.183512e-01, 8.183637e-01, 8.183762e-01, 8.183887e-01, 8.184012e-01, 8.184137e-01, 8.184261e-01, 8.184386e-01, 8.184510e-01, 8.184636e-01, 8.184761e-01, 8.184885e-01, 8.185011e-01, 8.185135e-01, 8.185260e-01, 8.185385e-01, 8.185510e-01, 8.185635e-01, 8.185759e-01, 8.185884e-01, 8.186009e-01, 8.186134e-01, 8.186259e-01, 8.186384e-01, 8.186508e-01, 8.186633e-01, 8.186758e-01, 8.186882e-01, 8.187007e-01, 8.187132e-01, 8.187257e-01, 8.187382e-01, 8.187507e-01, 8.187631e-01, 8.187756e-01, 8.187881e-01, 8.188006e-01, 8.188131e-01, 8.188255e-01, 8.188381e-01, 8.188505e-01, 8.188630e-01, 8.188754e-01, 8.188879e-01, 8.189005e-01, 8.189129e-01, 8.189254e-01, 8.189379e-01, 8.189504e-01, 8.189628e-01, 8.189753e-01, 8.189877e-01, 8.190002e-01, 8.190128e-01, 8.190252e-01, 8.190377e-01, 8.190502e-01, 8.190627e-01, 8.190751e-01, 8.190876e-01, 8.191000e-01, 8.191125e-01, 8.191251e-01, 8.191375e-01, 8.191500e-01, 8.191625e-01, 8.191749e-01, 8.191874e-01, 8.191999e-01, 8.192124e-01, 8.192248e-01, 8.192373e-01, 8.192497e-01, 8.192623e-01, 8.192748e-01, 8.192872e-01, 8.192997e-01, 8.193122e-01, 8.193247e-01, 8.193371e-01, 8.193496e-01, 8.193620e-01, 8.193746e-01, 8.193870e-01, 8.193995e-01, 8.194119e-01, 8.194244e-01, 8.194370e-01, 8.194494e-01, 8.194619e-01, 8.194744e-01, 8.194869e-01, 8.194993e-01, 8.195118e-01, 8.195242e-01, 8.195367e-01, 8.195492e-01, 8.195617e-01, 8.195741e-01, 8.195866e-01, 8.195990e-01, 8.196115e-01, 8.196240e-01, 8.196365e-01, 8.196489e-01, 8.196615e-01, 8.196740e-01, 8.196864e-01, 8.196989e-01, 8.197114e-01, 8.197238e-01, 8.197363e-01, 8.197488e-01, 8.197612e-01, 8.197737e-01, 8.197862e-01, 8.197986e-01, 8.198111e-01, 8.198236e-01, 8.198360e-01, 8.198485e-01, 8.198610e-01, 8.198735e-01, 8.198859e-01, 8.198984e-01, 8.199109e-01, 8.199233e-01, 8.199358e-01, 8.199483e-01, 8.199607e-01, 8.199732e-01, 8.199857e-01, 8.199981e-01, 8.200106e-01, 8.200231e-01, 8.200356e-01, 8.200480e-01, 8.200605e-01, 8.200729e-01, 8.200854e-01, 8.200979e-01, 8.201104e-01, 8.201228e-01, 8.201353e-01, 8.201478e-01, 8.201602e-01, 8.201727e-01, 8.201852e-01, 8.201976e-01, 8.202101e-01, 8.202226e-01, 8.202351e-01, 8.202475e-01, 8.202600e-01, 8.202724e-01, 8.202849e-01, 8.202974e-01, 8.203099e-01, 8.203223e-01, 8.203348e-01, 8.203472e-01, 8.203597e-01, 8.203722e-01, 8.203847e-01, 8.203971e-01, 8.204096e-01, 8.204221e-01, 8.204346e-01, 8.204470e-01, 8.204595e-01, 8.204719e-01, 8.204844e-01, 8.204969e-01, 8.205094e-01, 8.205218e-01, 8.205342e-01, 8.205467e-01, 8.205591e-01, 8.205716e-01, 8.205841e-01, 8.205966e-01, 8.206090e-01, 8.206215e-01, 8.206339e-01, 8.206464e-01, 8.206589e-01, 8.206714e-01, 8.206838e-01, 8.206963e-01, 8.207088e-01, 8.207213e-01, 8.207337e-01, 8.207462e-01, 8.207586e-01, 8.207710e-01, 8.207835e-01, 8.207960e-01, 8.208084e-01, 8.208209e-01, 8.208334e-01, 8.208458e-01, 8.208583e-01, 8.208708e-01, 8.208833e-01, 8.208957e-01, 8.209082e-01, 8.209206e-01, 8.209330e-01, 8.209455e-01, 8.209580e-01, 8.209705e-01, 8.209829e-01, 8.209954e-01, 8.210078e-01, 8.210203e-01, 8.210328e-01, 8.210453e-01, 8.210577e-01, 8.210701e-01, 8.210826e-01, 8.210950e-01, 8.211075e-01, 8.211200e-01, 8.211325e-01, 8.211449e-01, 8.211574e-01, 8.211699e-01, 8.211823e-01, 8.211947e-01, 8.212072e-01, 8.212196e-01, 8.212321e-01, 8.212446e-01, 8.212571e-01, 8.212695e-01, 8.212820e-01, 8.212944e-01, 8.213068e-01, 8.213193e-01, 8.213318e-01, 8.213443e-01, 8.213567e-01, 8.213692e-01, 8.213816e-01, 8.213940e-01, 8.214065e-01, 8.214190e-01, 8.214315e-01, 8.214439e-01, 8.214564e-01, 8.214688e-01, 8.214812e-01, 8.214937e-01, 8.215062e-01, 8.215187e-01, 8.215311e-01, 8.215436e-01, 8.215560e-01, 8.215684e-01, 8.215809e-01, 8.215933e-01, 8.216059e-01, 8.216183e-01, 8.216308e-01, 8.216432e-01, 8.216556e-01, 8.216681e-01, 8.216805e-01, 8.216930e-01, 8.217055e-01, 8.217180e-01, 8.217304e-01, 8.217428e-01, 8.217553e-01, 8.217677e-01, 8.217802e-01, 8.217927e-01, 8.218051e-01, 8.218175e-01, 8.218300e-01, 8.218425e-01, 8.218549e-01, 8.218674e-01, 8.218798e-01, 8.218923e-01, 8.219047e-01, 8.219172e-01, 8.219297e-01, 8.219421e-01, 8.219545e-01, 8.219670e-01, 8.219795e-01, 8.219919e-01, 8.220044e-01, 8.220168e-01, 8.220292e-01, 8.220417e-01, 8.220542e-01, 8.220667e-01, 8.220791e-01, 8.220915e-01, 8.221040e-01, 8.221164e-01, 8.221289e-01, 8.221413e-01, 8.221537e-01, 8.221663e-01, 8.221787e-01, 8.221911e-01, 8.222036e-01, 8.222160e-01, 8.222285e-01, 8.222409e-01, 8.222533e-01, 8.222658e-01, 8.222783e-01, 8.222908e-01, 8.223032e-01, 8.223156e-01, 8.223281e-01, 8.223405e-01, 8.223530e-01, 8.223654e-01, 8.223779e-01, 8.223903e-01, 8.224028e-01, 8.224152e-01, 8.224276e-01, 8.224401e-01, 8.224526e-01, 8.224651e-01, 8.224775e-01, 8.224899e-01, 8.225024e-01, 8.225148e-01, 8.225272e-01, 8.225397e-01, 8.225521e-01, 8.225647e-01, 8.225770e-01, 8.225895e-01, 8.226020e-01, 8.226144e-01, 8.226268e-01, 8.226393e-01, 8.226517e-01, 8.226642e-01, 8.226766e-01, 8.226891e-01, 8.227015e-01, 8.227140e-01, 8.227264e-01, 8.227389e-01, 8.227513e-01, 8.227637e-01, 8.227762e-01, 8.227887e-01, 8.228011e-01, 8.228135e-01, 8.228260e-01, 8.228384e-01, 8.228509e-01, 8.228633e-01, 8.228757e-01, 8.228882e-01, 8.229006e-01, 8.229131e-01, 8.229256e-01, 8.229380e-01, 8.229504e-01, 8.229629e-01, 8.229753e-01, 8.229877e-01, 8.230002e-01, 8.230127e-01, 8.230251e-01, 8.230375e-01, 8.230500e-01, 8.230624e-01, 8.230748e-01, 8.230873e-01, 8.230998e-01, 8.231121e-01, 8.231246e-01, 8.231371e-01, 8.231496e-01, 8.231620e-01, 8.231744e-01, 8.231869e-01, 8.231993e-01, 8.232117e-01, 8.232242e-01, 8.232366e-01, 8.232490e-01, 8.232615e-01, 8.232739e-01, 8.232864e-01, 8.232988e-01, 8.233112e-01, 8.233237e-01, 8.233361e-01, 8.233485e-01, 8.233610e-01, 8.233735e-01, 8.233858e-01, 8.233984e-01, 8.234108e-01, 8.234232e-01, 8.234357e-01, 8.234481e-01, 8.234605e-01, 8.234730e-01, 8.234854e-01, 8.234978e-01, 8.235103e-01, 8.235227e-01, 8.235351e-01, 8.235476e-01, 8.235601e-01, 8.235725e-01, 8.235849e-01, 8.235974e-01, 8.236098e-01, 8.236222e-01, 8.236347e-01, 8.236471e-01, 8.236595e-01, 8.236721e-01, 8.236844e-01, 8.236969e-01, 8.237092e-01, 8.237218e-01, 8.237342e-01, 8.237466e-01, 8.237591e-01, 8.237715e-01, 8.237839e-01, 8.237964e-01, 8.238088e-01, 8.238212e-01, 8.238337e-01, 8.238461e-01, 8.238586e-01, 8.238710e-01, 8.238834e-01, 8.238959e-01, 8.239083e-01, 8.239207e-01, 8.239332e-01, 8.239456e-01, 8.239580e-01, 8.239705e-01, 8.239829e-01, 8.239954e-01, 8.240077e-01, 8.240202e-01, 8.240327e-01, 8.240451e-01, 8.240575e-01, 8.240699e-01, 8.240824e-01, 8.240948e-01, 8.241072e-01, 8.241197e-01, 8.241321e-01, 8.241445e-01, 8.241570e-01, 8.241694e-01, 8.241819e-01, 8.241943e-01, 8.242067e-01, 8.242192e-01, 8.242316e-01, 8.242440e-01, 8.242564e-01, 8.242689e-01, 8.242813e-01, 8.242937e-01, 8.243062e-01, 8.243186e-01, 8.243310e-01, 8.243434e-01, 8.243559e-01, 8.243683e-01, 8.243808e-01, 8.243933e-01, 8.244056e-01, 8.244181e-01, 8.244305e-01, 8.244429e-01, 8.244553e-01, 8.244678e-01, 8.244803e-01, 8.244926e-01, 8.245051e-01, 8.245175e-01, 8.245299e-01, 8.245423e-01, 8.245548e-01, 8.245672e-01, 8.245797e-01, 8.245921e-01, 8.246045e-01, 8.246170e-01, 8.246294e-01, 8.246418e-01, 8.246542e-01, 8.246667e-01, 8.246791e-01, 8.246915e-01, 8.247039e-01, 8.247164e-01, 8.247288e-01, 8.247412e-01, 8.247537e-01, 8.247661e-01, 8.247786e-01, 8.247910e-01, 8.248034e-01, 8.248158e-01, 8.248283e-01, 8.248407e-01, 8.248531e-01, 8.248655e-01, 8.248780e-01, 8.248904e-01, 8.249028e-01, 8.249152e-01, 8.249277e-01, 8.249401e-01, 8.249525e-01, 8.249649e-01, 8.249774e-01, 8.249898e-01, 8.250023e-01, 8.250146e-01, 8.250271e-01, 8.250394e-01, 8.250520e-01, 8.250643e-01, 8.250768e-01, 8.250892e-01, 8.251016e-01, 8.251140e-01, 8.251265e-01, 8.251389e-01, 8.251513e-01, 8.251637e-01, 8.251762e-01, 8.251886e-01, 8.252010e-01, 8.252134e-01, 8.252259e-01, 8.252383e-01, 8.252507e-01, 8.252631e-01, 8.252756e-01, 8.252880e-01, 8.253005e-01, 8.253129e-01, 8.253253e-01, 8.253377e-01, 8.253502e-01, 8.253626e-01, 8.253750e-01, 8.253874e-01, 8.253999e-01, 8.254122e-01, 8.254246e-01, 8.254371e-01, 8.254495e-01, 8.254619e-01, 8.254743e-01, 8.254868e-01, 8.254992e-01, 8.255116e-01, 8.255240e-01, 8.255365e-01, 8.255489e-01, 8.255613e-01, 8.255737e-01, 8.255861e-01, 8.255986e-01, 8.256110e-01, 8.256235e-01, 8.256358e-01, 8.256483e-01, 8.256606e-01, 8.256732e-01, 8.256855e-01, 8.256979e-01, 8.257104e-01, 8.257228e-01, 8.257352e-01, 8.257476e-01, 8.257601e-01, 8.257725e-01, 8.257849e-01, 8.257973e-01, 8.258097e-01, 8.258222e-01, 8.258346e-01, 8.258470e-01, 8.258594e-01, 8.258718e-01, 8.258842e-01, 8.258966e-01, 8.259091e-01, 8.259215e-01, 8.259339e-01, 8.259463e-01, 8.259587e-01, 8.259712e-01, 8.259836e-01, 8.259960e-01, 8.260084e-01, 8.260208e-01, 8.260333e-01, 8.260456e-01, 8.260581e-01, 8.260705e-01, 8.260829e-01, 8.260953e-01, 8.261077e-01, 8.261202e-01, 8.261326e-01, 8.261450e-01, 8.261575e-01, 8.261698e-01, 8.261823e-01, 8.261947e-01, 8.262070e-01, 8.262196e-01, 8.262319e-01, 8.262443e-01, 8.262568e-01, 8.262691e-01, 8.262816e-01, 8.262940e-01, 8.263064e-01, 8.263189e-01, 8.263313e-01, 8.263436e-01, 8.263561e-01, 8.263685e-01, 8.263809e-01, 8.263933e-01, 8.264057e-01, 8.264182e-01, 8.264306e-01, 8.264430e-01, 8.264554e-01, 8.264678e-01, 8.264802e-01, 8.264927e-01, 8.265050e-01, 8.265175e-01, 8.265299e-01, 8.265423e-01, 8.265547e-01, 8.265671e-01, 8.265795e-01, 8.265920e-01, 8.266044e-01, 8.266167e-01, 8.266292e-01, 8.266416e-01, 8.266540e-01, 8.266664e-01, 8.266788e-01, 8.266912e-01, 8.267037e-01, 8.267161e-01, 8.267284e-01, 8.267409e-01, 8.267533e-01, 8.267657e-01, 8.267781e-01, 8.267905e-01, 8.268029e-01, 8.268154e-01, 8.268278e-01, 8.268401e-01, 8.268526e-01, 8.268650e-01, 8.268774e-01, 8.268898e-01, 8.269022e-01, 8.269146e-01, 8.269271e-01, 8.269395e-01, 8.269518e-01, 8.269643e-01, 8.269767e-01, 8.269891e-01, 8.270015e-01, 8.270139e-01, 8.270263e-01, 8.270387e-01, 8.270512e-01, 8.270636e-01, 8.270759e-01, 8.270884e-01, 8.271008e-01, 8.271132e-01, 8.271256e-01, 8.271380e-01, 8.271504e-01, 8.271627e-01, 8.271753e-01, 8.271876e-01, 8.272000e-01, 8.272125e-01, 8.272249e-01, 8.272372e-01, 8.272496e-01, 8.272621e-01, 8.272744e-01, 8.272868e-01, 8.272993e-01, 8.273117e-01, 8.273241e-01, 8.273365e-01, 8.273489e-01, 8.273613e-01, 8.273737e-01, 8.273861e-01, 8.273985e-01, 8.274109e-01, 8.274233e-01, 8.274357e-01, 8.274482e-01, 8.274605e-01, 8.274729e-01, 8.274854e-01, 8.274978e-01, 8.275102e-01, 8.275226e-01, 8.275350e-01, 8.275474e-01, 8.275598e-01, 8.275722e-01, 8.275846e-01, 8.275970e-01, 8.276094e-01, 8.276218e-01, 8.276343e-01, 8.276466e-01, 8.276590e-01, 8.276714e-01, 8.276839e-01, 8.276963e-01, 8.277087e-01, 8.277210e-01, 8.277334e-01, 8.277459e-01, 8.277583e-01, 8.277707e-01, 8.277830e-01, 8.277955e-01, 8.278079e-01, 8.278202e-01, 8.278326e-01, 8.278451e-01, 8.278575e-01, 8.278699e-01, 8.278822e-01, 8.278946e-01, 8.279071e-01, 8.279195e-01, 8.279319e-01, 8.279443e-01, 8.279566e-01, 8.279691e-01, 8.279815e-01, 8.279939e-01, 8.280063e-01, 8.280187e-01, 8.280311e-01, 8.280435e-01, 8.280559e-01, 8.280683e-01, 8.280807e-01, 8.280931e-01, 8.281055e-01, 8.281178e-01, 8.281302e-01, 8.281426e-01, 8.281551e-01, 8.281675e-01, 8.281799e-01, 8.281922e-01, 8.282046e-01, 8.282171e-01, 8.282295e-01, 8.282419e-01, 8.282543e-01, 8.282666e-01, 8.282791e-01, 8.282915e-01, 8.283039e-01, 8.283163e-01, 8.283286e-01, 8.283410e-01, 8.283535e-01, 8.283659e-01, 8.283783e-01, 8.283907e-01, 8.284030e-01, 8.284154e-01, 8.284279e-01, 8.284402e-01, 8.284526e-01, 8.284650e-01, 8.284774e-01, 8.284898e-01, 8.285022e-01, 8.285146e-01, 8.285270e-01, 8.285394e-01, 8.285518e-01, 8.285642e-01, 8.285766e-01, 8.285890e-01, 8.286014e-01, 8.286138e-01, 8.286262e-01, 8.286386e-01, 8.286510e-01, 8.286634e-01, 8.286758e-01, 8.286881e-01, 8.287005e-01, 8.287129e-01, 8.287253e-01, 8.287377e-01, 8.287501e-01, 8.287625e-01, 8.287749e-01, 8.287873e-01, 8.287997e-01, 8.288121e-01, 8.288245e-01, 8.288369e-01, 8.288493e-01, 8.288617e-01, 8.288741e-01, 8.288864e-01, 8.288988e-01, 8.289112e-01, 8.289236e-01, 8.289360e-01, 8.289484e-01, 8.289608e-01, 8.289732e-01, 8.289856e-01, 8.289980e-01, 8.290104e-01, 8.290228e-01, 8.290352e-01, 8.290475e-01, 8.290599e-01, 8.290723e-01, 8.290848e-01, 8.290972e-01, 8.291095e-01, 8.291219e-01, 8.291343e-01, 8.291467e-01, 8.291591e-01, 8.291714e-01, 8.291838e-01, 8.291962e-01, 8.292087e-01, 8.292211e-01, 8.292335e-01, 8.292458e-01, 8.292582e-01, 8.292706e-01, 8.292830e-01, 8.292953e-01, 8.293077e-01, 8.293201e-01, 8.293325e-01, 8.293449e-01, 8.293573e-01, 8.293697e-01, 8.293821e-01, 8.293945e-01, 8.294069e-01, 8.294193e-01, 8.294317e-01, 8.294441e-01, 8.294564e-01, 8.294688e-01, 8.294812e-01, 8.294936e-01, 8.295059e-01, 8.295183e-01, 8.295307e-01, 8.295431e-01, 8.295555e-01, 8.295680e-01, 8.295803e-01, 8.295927e-01, 8.296051e-01, 8.296175e-01, 8.296298e-01, 8.296422e-01, 8.296546e-01, 8.296670e-01, 8.296794e-01, 8.296918e-01, 8.297042e-01, 8.297166e-01, 8.297289e-01, 8.297413e-01, 8.297537e-01, 8.297661e-01, 8.297784e-01, 8.297908e-01, 8.298032e-01, 8.298156e-01, 8.298280e-01, 8.298404e-01, 8.298528e-01, 8.298652e-01, 8.298775e-01, 8.298899e-01, 8.299023e-01, 8.299147e-01, 8.299270e-01, 8.299394e-01, 8.299518e-01, 8.299642e-01, 8.299766e-01, 8.299890e-01, 8.300014e-01, 8.300138e-01, 8.300262e-01, 8.300385e-01, 8.300509e-01, 8.300633e-01, 8.300757e-01, 8.300881e-01, 8.301005e-01, 8.301129e-01, 8.301253e-01, 8.301376e-01, 8.301500e-01, 8.301624e-01, 8.301747e-01, 8.301871e-01, 8.301995e-01, 8.302119e-01, 8.302242e-01, 8.302366e-01, 8.302490e-01, 8.302613e-01, 8.302737e-01, 8.302861e-01, 8.302985e-01, 8.303109e-01, 8.303233e-01, 8.303357e-01, 8.303481e-01, 8.303604e-01, 8.303728e-01, 8.303852e-01, 8.303976e-01, 8.304099e-01, 8.304223e-01, 8.304347e-01, 8.304471e-01, 8.304595e-01, 8.304719e-01, 8.304843e-01, 8.304967e-01, 8.305090e-01, 8.305214e-01, 8.305338e-01, 8.305462e-01, 8.305585e-01, 8.305709e-01, 8.305833e-01, 8.305956e-01, 8.306080e-01, 8.306204e-01, 8.306327e-01, 8.306451e-01, 8.306575e-01, 8.306699e-01, 8.306823e-01, 8.306947e-01, 8.307071e-01, 8.307195e-01, 8.307318e-01, 8.307442e-01, 8.307566e-01, 8.307690e-01, 8.307813e-01, 8.307937e-01, 8.308061e-01, 8.308184e-01, 8.308308e-01, 8.308432e-01, 8.308556e-01, 8.308679e-01, 8.308803e-01, 8.308927e-01, 8.309051e-01, 8.309175e-01, 8.309299e-01, 8.309423e-01, 8.309546e-01, 8.309669e-01, 8.309793e-01, 8.309917e-01, 8.310041e-01, 8.310165e-01, 8.310289e-01, 8.310412e-01, 8.310536e-01, 8.310660e-01, 8.310783e-01, 8.310907e-01, 8.311031e-01, 8.311154e-01, 8.311278e-01, 8.311402e-01, 8.311526e-01, 8.311650e-01, 8.311774e-01, 8.311898e-01, 8.312020e-01, 8.312144e-01, 8.312268e-01, 8.312392e-01, 8.312516e-01, 8.312640e-01, 8.312764e-01, 8.312887e-01, 8.313010e-01, 8.313134e-01, 8.313258e-01, 8.313382e-01, 8.313506e-01, 8.313629e-01, 8.313753e-01, 8.313877e-01, 8.314000e-01, 8.314124e-01, 8.314248e-01, 8.314371e-01, 8.314495e-01, 8.314619e-01, 8.314743e-01, 8.314866e-01, 8.314990e-01, 8.315114e-01, 8.315237e-01, 8.315361e-01, 8.315485e-01, 8.315609e-01, 8.315732e-01, 8.315856e-01, 8.315979e-01, 8.316103e-01, 8.316227e-01, 8.316351e-01, 8.316475e-01, 8.316598e-01, 8.316721e-01, 8.316845e-01, 8.316969e-01, 8.317093e-01, 8.317217e-01, 8.317340e-01, 8.317463e-01, 8.317587e-01, 8.317711e-01, 8.317835e-01, 8.317959e-01, 8.318082e-01, 8.318205e-01, 8.318329e-01, 8.318453e-01, 8.318577e-01, 8.318701e-01, 8.318824e-01, 8.318948e-01, 8.319072e-01, 8.319196e-01, 8.319319e-01, 8.319442e-01, 8.319566e-01, 8.319690e-01, 8.319814e-01, 8.319938e-01, 8.320062e-01, 8.320184e-01, 8.320308e-01, 8.320432e-01, 8.320556e-01, 8.320680e-01, 8.320802e-01, 8.320926e-01, 8.321050e-01, 8.321174e-01, 8.321298e-01, 8.321421e-01, 8.321545e-01, 8.321669e-01, 8.321792e-01, 8.321915e-01, 8.322039e-01, 8.322163e-01, 8.322287e-01, 8.322411e-01, 8.322534e-01, 8.322657e-01, 8.322781e-01, 8.322905e-01, 8.323029e-01, 8.323152e-01, 8.323276e-01, 8.323399e-01, 8.323523e-01, 8.323646e-01, 8.323770e-01, 8.323894e-01, 8.324018e-01, 8.324141e-01, 8.324265e-01, 8.324388e-01, 8.324512e-01, 8.324636e-01, 8.324759e-01, 8.324883e-01, 8.325007e-01, 8.325130e-01, 8.325254e-01, 8.325378e-01, 8.325501e-01, 8.325625e-01, 8.325748e-01, 8.325872e-01, 8.325996e-01, 8.326120e-01, 8.326243e-01, 8.326367e-01, 8.326490e-01, 8.326614e-01, 8.326737e-01, 8.326861e-01, 8.326985e-01, 8.327109e-01, 8.327231e-01, 8.327355e-01, 8.327479e-01, 8.327602e-01, 8.327726e-01, 8.327850e-01, 8.327973e-01, 8.328096e-01, 8.328220e-01, 8.328344e-01, 8.328468e-01, 8.328591e-01, 8.328715e-01, 8.328838e-01, 8.328962e-01, 8.329085e-01, 8.329209e-01, 8.329333e-01, 8.329456e-01, 8.329580e-01, 8.329704e-01, 8.329827e-01, 8.329951e-01, 8.330075e-01, 8.330198e-01, 8.330321e-01, 8.330445e-01, 8.330569e-01, 8.330691e-01, 8.330815e-01, 8.330939e-01, 8.331062e-01, 8.331186e-01, 8.331310e-01, 8.331434e-01, 8.331557e-01, 8.331680e-01, 8.331804e-01, 8.331928e-01, 8.332051e-01, 8.332175e-01, 8.332298e-01, 8.332422e-01, 8.332546e-01, 8.332669e-01, 8.332793e-01, 8.332916e-01, 8.333039e-01, 8.333163e-01, 8.333287e-01, 8.333411e-01, 8.333533e-01, 8.333657e-01, 8.333781e-01, 8.333904e-01, 8.334028e-01, 8.334152e-01, 8.334275e-01, 8.334399e-01, 8.334523e-01, 8.334646e-01, 8.334770e-01, 8.334893e-01, 8.335016e-01, 8.335140e-01, 8.335263e-01, 8.335387e-01, 8.335510e-01, 8.335634e-01, 8.335757e-01, 8.335881e-01, 8.336004e-01, 8.336128e-01, 8.336252e-01, 8.336375e-01, 8.336499e-01, 8.336623e-01, 8.336746e-01, 8.336869e-01, 8.336993e-01, 8.337116e-01, 8.337240e-01, 8.337363e-01, 8.337487e-01, 8.337610e-01, 8.337734e-01, 8.337857e-01, 8.337981e-01, 8.338104e-01, 8.338228e-01, 8.338352e-01, 8.338475e-01, 8.338599e-01, 8.338721e-01, 8.338845e-01, 8.338969e-01, 8.339092e-01, 8.339216e-01, 8.339339e-01, 8.339463e-01, 8.339587e-01, 8.339710e-01, 8.339834e-01, 8.339957e-01, 8.340080e-01, 8.340204e-01, 8.340327e-01, 8.340451e-01, 8.340575e-01, 8.340698e-01, 8.340821e-01, 8.340945e-01, 8.341068e-01, 8.341192e-01, 8.341315e-01, 8.341439e-01, 8.341562e-01, 8.341686e-01, 8.341810e-01, 8.341932e-01, 8.342056e-01, 8.342179e-01, 8.342303e-01, 8.342426e-01, 8.342550e-01, 8.342674e-01, 8.342797e-01, 8.342921e-01, 8.343043e-01, 8.343167e-01, 8.343291e-01, 8.343414e-01, 8.343538e-01, 8.343661e-01, 8.343785e-01, 8.343908e-01, 8.344032e-01, 8.344156e-01, 8.344278e-01, 8.344402e-01, 8.344525e-01, 8.344649e-01, 8.344772e-01, 8.344896e-01, 8.345019e-01, 8.345143e-01, 8.345267e-01, 8.345389e-01, 8.345513e-01, 8.345636e-01, 8.345760e-01, 8.345883e-01, 8.346007e-01, 8.346130e-01, 8.346254e-01, 8.346378e-01, 8.346500e-01, 8.346624e-01, 8.346747e-01, 8.346871e-01, 8.346994e-01, 8.347118e-01, 8.347241e-01, 8.347365e-01, 8.347487e-01, 8.347611e-01, 8.347734e-01, 8.347858e-01, 8.347982e-01, 8.348105e-01, 8.348229e-01, 8.348352e-01, 8.348476e-01, 8.348598e-01, 8.348722e-01, 8.348845e-01, 8.348969e-01, 8.349092e-01, 8.349216e-01, 8.349339e-01, 8.349463e-01, 8.349586e-01, 8.349710e-01, 8.349832e-01, 8.349956e-01, 8.350079e-01, 8.350203e-01, 8.350326e-01, 8.350450e-01, 8.350573e-01, 8.350697e-01, 8.350820e-01, 8.350943e-01, 8.351067e-01, 8.351190e-01, 8.351313e-01, 8.351437e-01, 8.351560e-01, 8.351684e-01, 8.351807e-01, 8.351930e-01, 8.352054e-01, 8.352178e-01, 8.352301e-01, 8.352425e-01, 8.352547e-01, 8.352671e-01, 8.352794e-01, 8.352918e-01, 8.353041e-01, 8.353165e-01, 8.353288e-01, 8.353412e-01, 8.353534e-01, 8.353658e-01, 8.353781e-01, 8.353905e-01, 8.354028e-01, 8.354151e-01, 8.354275e-01, 8.354398e-01, 8.354521e-01, 8.354645e-01, 8.354768e-01, 8.354892e-01, 8.355015e-01, 8.355138e-01, 8.355262e-01, 8.355385e-01, 8.355509e-01, 8.355632e-01, 8.355755e-01, 8.355879e-01, 8.356001e-01, 8.356125e-01, 8.356248e-01, 8.356372e-01, 8.356495e-01, 8.356619e-01, 8.356742e-01, 8.356865e-01, 8.356988e-01, 8.357112e-01, 8.357235e-01, 8.357359e-01, 8.357483e-01, 8.357605e-01, 8.357729e-01, 8.357852e-01, 8.357975e-01, 8.358099e-01, 8.358222e-01, 8.358346e-01, 8.358468e-01, 8.358592e-01, 8.358715e-01, 8.358839e-01, 8.358962e-01, 8.359085e-01, 8.359209e-01, 8.359332e-01, 8.359455e-01, 8.359579e-01, 8.359702e-01, 8.359826e-01, 8.359948e-01, 8.360072e-01, 8.360195e-01, 8.360319e-01, 8.360442e-01, 8.360565e-01, 8.360689e-01, 8.360812e-01, 8.360935e-01, 8.361059e-01, 8.361182e-01, 8.361306e-01, 8.361428e-01, 8.361551e-01, 8.361675e-01, 8.361798e-01, 8.361922e-01, 8.362045e-01, 8.362168e-01, 8.362292e-01, 8.362415e-01, 8.362538e-01, 8.362662e-01, 8.362784e-01, 8.362908e-01, 8.363031e-01, 8.363155e-01, 8.363278e-01, 8.363401e-01, 8.363524e-01, 8.363648e-01, 8.363771e-01, 8.363895e-01, 8.364018e-01, 8.364140e-01, 8.364264e-01, 8.364387e-01, 8.364511e-01, 8.364634e-01, 8.364757e-01, 8.364881e-01, 8.365004e-01, 8.365127e-01, 8.365251e-01, 8.365374e-01, 8.365496e-01, 8.365620e-01, 8.365744e-01, 8.365867e-01, 8.365991e-01, 8.366113e-01, 8.366236e-01, 8.366360e-01, 8.366483e-01, 8.366606e-01, 8.366730e-01, 8.366853e-01, 8.366976e-01, 8.367100e-01, 8.367223e-01, 8.367347e-01, 8.367469e-01, 8.367592e-01, 8.367716e-01, 8.367839e-01, 8.367962e-01, 8.368086e-01, 8.368209e-01, 8.368332e-01, 8.368455e-01, 8.368579e-01, 8.368701e-01, 8.368825e-01, 8.368948e-01, 8.369071e-01, 8.369194e-01, 8.369318e-01, 8.369441e-01, 8.369564e-01, 8.369688e-01, 8.369811e-01, 8.369934e-01, 8.370058e-01, 8.370181e-01, 8.370304e-01, 8.370427e-01, 8.370550e-01, 8.370673e-01, 8.370796e-01, 8.370920e-01, 8.371043e-01, 8.371166e-01, 8.371290e-01, 8.371413e-01, 8.371536e-01, 8.371660e-01, 8.371783e-01, 8.371906e-01, 8.372028e-01, 8.372152e-01, 8.372275e-01, 8.372399e-01, 8.372522e-01, 8.372645e-01, 8.372768e-01, 8.372891e-01, 8.373015e-01, 8.373138e-01, 8.373261e-01, 8.373384e-01, 8.373508e-01, 8.373631e-01, 8.373753e-01, 8.373877e-01, 8.374000e-01, 8.374124e-01, 8.374246e-01, 8.374370e-01, 8.374493e-01, 8.374616e-01, 8.374740e-01, 8.374863e-01, 8.374986e-01, 8.375109e-01, 8.375233e-01, 8.375356e-01, 8.375478e-01, 8.375602e-01, 8.375725e-01, 8.375849e-01, 8.375971e-01, 8.376094e-01, 8.376218e-01, 8.376341e-01, 8.376464e-01, 8.376587e-01, 8.376711e-01, 8.376834e-01, 8.376957e-01, 8.377080e-01, 8.377203e-01, 8.377327e-01, 8.377450e-01, 8.377572e-01, 8.377696e-01, 8.377819e-01, 8.377942e-01, 8.378065e-01, 8.378188e-01, 8.378312e-01, 8.378435e-01, 8.378558e-01, 8.378681e-01, 8.378805e-01, 8.378928e-01, 8.379050e-01, 8.379174e-01, 8.379297e-01, 8.379421e-01, 8.379543e-01, 8.379666e-01, 8.379789e-01, 8.379913e-01, 8.380036e-01, 8.380159e-01, 8.380282e-01, 8.380405e-01, 8.380529e-01, 8.380652e-01, 8.380775e-01, 8.380898e-01, 8.381020e-01, 8.381144e-01, 8.381267e-01, 8.381391e-01, 8.381513e-01, 8.381636e-01, 8.381760e-01, 8.381883e-01, 8.382006e-01, 8.382129e-01, 8.382252e-01, 8.382376e-01, 8.382499e-01, 8.382622e-01, 8.382745e-01, 8.382868e-01, 8.382991e-01, 8.383114e-01, 8.383238e-01, 8.383361e-01, 8.383483e-01, 8.383607e-01, 8.383729e-01, 8.383853e-01, 8.383976e-01, 8.384099e-01, 8.384222e-01, 8.384345e-01, 8.384469e-01, 8.384592e-01, 8.384715e-01, 8.384838e-01, 8.384961e-01, 8.385084e-01, 8.385206e-01, 8.385330e-01, 8.385454e-01, 8.385577e-01, 8.385699e-01, 8.385822e-01, 8.385946e-01, 8.386069e-01, 8.386192e-01, 8.386315e-01, 8.386438e-01, 8.386561e-01, 8.386684e-01, 8.386807e-01, 8.386931e-01, 8.387054e-01, 8.387177e-01, 8.387300e-01, 8.387423e-01, 8.387546e-01, 8.387669e-01, 8.387793e-01, 8.387915e-01, 8.388038e-01, 8.388162e-01, 8.388284e-01, 8.388407e-01, 8.388530e-01, 8.388653e-01, 8.388777e-01, 8.388900e-01, 8.389023e-01, 8.389146e-01, 8.389269e-01, 8.389392e-01, 8.389515e-01, 8.389638e-01, 8.389761e-01, 8.389885e-01, 8.390008e-01, 8.390130e-01, 8.390254e-01, 8.390377e-01, 8.390499e-01, 8.390623e-01, 8.390746e-01, 8.390869e-01, 8.390992e-01, 8.391115e-01, 8.391238e-01, 8.391361e-01, 8.391484e-01, 8.391607e-01, 8.391730e-01, 8.391853e-01, 8.391976e-01, 8.392100e-01, 8.392223e-01, 8.392346e-01, 8.392469e-01, 8.392591e-01, 8.392715e-01, 8.392838e-01, 8.392960e-01, 8.393084e-01, 8.393207e-01, 8.393329e-01, 8.393452e-01, 8.393576e-01, 8.393700e-01, 8.393822e-01, 8.393945e-01, 8.394068e-01, 8.394191e-01, 8.394314e-01, 8.394437e-01, 8.394560e-01, 8.394683e-01, 8.394806e-01, 8.394929e-01, 8.395052e-01, 8.395175e-01, 8.395298e-01, 8.395422e-01, 8.395545e-01, 8.395668e-01, 8.395790e-01, 8.395913e-01, 8.396037e-01, 8.396159e-01, 8.396282e-01, 8.396406e-01, 8.396528e-01, 8.396651e-01, 8.396775e-01, 8.396897e-01, 8.397020e-01, 8.397143e-01, 8.397266e-01, 8.397389e-01, 8.397512e-01, 8.397635e-01, 8.397758e-01, 8.397881e-01, 8.398004e-01, 8.398128e-01, 8.398251e-01, 8.398374e-01, 8.398497e-01, 8.398620e-01, 8.398743e-01, 8.398865e-01, 8.398989e-01, 8.399112e-01, 8.399234e-01, 8.399357e-01, 8.399481e-01, 8.399603e-01, 8.399726e-01, 8.399850e-01, 8.399972e-01, 8.400095e-01, 8.400218e-01, 8.400341e-01, 8.400464e-01, 8.400587e-01, 8.400710e-01, 8.400833e-01, 8.400956e-01, 8.401079e-01, 8.401202e-01, 8.401325e-01, 8.401448e-01, 8.401571e-01, 8.401694e-01, 8.401817e-01, 8.401940e-01, 8.402063e-01, 8.402185e-01, 8.402309e-01, 8.402432e-01, 8.402554e-01, 8.402678e-01, 8.402801e-01, 8.402923e-01, 8.403047e-01, 8.403170e-01, 8.403292e-01, 8.403416e-01, 8.403538e-01, 8.403661e-01, 8.403784e-01, 8.403907e-01, 8.404030e-01, 8.404153e-01, 8.404276e-01, 8.404399e-01, 8.404521e-01, 8.404644e-01, 8.404767e-01, 8.404890e-01, 8.405013e-01, 8.405136e-01, 8.405259e-01, 8.405382e-01, 8.405505e-01, 8.405628e-01, 8.405751e-01, 8.405874e-01, 8.405997e-01, 8.406120e-01, 8.406243e-01, 8.406366e-01, 8.406489e-01, 8.406612e-01, 8.406734e-01, 8.406858e-01, 8.406981e-01, 8.407103e-01, 8.407226e-01, 8.407348e-01, 8.407472e-01, 8.407595e-01, 8.407717e-01, 8.407841e-01, 8.407964e-01, 8.408086e-01, 8.408210e-01, 8.408332e-01, 8.408455e-01, 8.408578e-01, 8.408701e-01, 8.408824e-01, 8.408947e-01, 8.409069e-01, 8.409193e-01, 8.409315e-01, 8.409438e-01, 8.409561e-01, 8.409684e-01, 8.409807e-01, 8.409930e-01, 8.410053e-01, 8.410176e-01, 8.410299e-01, 8.410422e-01, 8.410544e-01, 8.410667e-01, 8.410790e-01, 8.410913e-01, 8.411036e-01, 8.411159e-01, 8.411282e-01, 8.411405e-01, 8.411528e-01, 8.411651e-01, 8.411773e-01, 8.411896e-01, 8.412019e-01, 8.412142e-01, 8.412265e-01, 8.412388e-01, 8.412511e-01, 8.412634e-01, 8.412757e-01, 8.412879e-01, 8.413002e-01, 8.413125e-01, 8.413247e-01, 8.413371e-01, 8.413494e-01, 8.413616e-01, 8.413740e-01, 8.413863e-01, 8.413985e-01, 8.414108e-01, 8.414230e-01, 8.414354e-01, 8.414477e-01, 8.414599e-01, 8.414723e-01, 8.414844e-01, 8.414968e-01, 8.415090e-01, 8.415213e-01, 8.415337e-01, 8.415459e-01, 8.415582e-01, 8.415706e-01, 8.415827e-01, 8.415951e-01, 8.416073e-01, 8.416196e-01, 8.416319e-01, 8.416442e-01, 8.416564e-01, 8.416687e-01, 8.416810e-01, 8.416933e-01, 8.417056e-01, 8.417179e-01, 8.417302e-01, 8.417424e-01, 8.417547e-01, 8.417670e-01, 8.417793e-01, 8.417916e-01, 8.418039e-01, 8.418161e-01, 8.418284e-01, 8.418407e-01, 8.418530e-01, 8.418653e-01, 8.418776e-01, 8.418898e-01, 8.419021e-01, 8.419144e-01, 8.419267e-01, 8.419390e-01, 8.419513e-01, 8.419635e-01, 8.419758e-01, 8.419881e-01, 8.420004e-01, 8.420127e-01, 8.420249e-01, 8.420372e-01, 8.420495e-01, 8.420618e-01, 8.420741e-01, 8.420863e-01, 8.420986e-01, 8.421109e-01, 8.421232e-01, 8.421355e-01, 8.421477e-01, 8.421600e-01, 8.421723e-01, 8.421846e-01, 8.421969e-01, 8.422091e-01, 8.422214e-01, 8.422337e-01, 8.422460e-01, 8.422583e-01, 8.422705e-01, 8.422828e-01, 8.422951e-01, 8.423074e-01, 8.423197e-01, 8.423319e-01, 8.423442e-01, 8.423565e-01, 8.423688e-01, 8.423810e-01, 8.423933e-01, 8.424056e-01, 8.424179e-01, 8.424302e-01, 8.424424e-01, 8.424547e-01, 8.424670e-01, 8.424793e-01, 8.424915e-01, 8.425038e-01, 8.425161e-01, 8.425284e-01, 8.425406e-01, 8.425529e-01, 8.425652e-01, 8.425775e-01, 8.425897e-01, 8.426020e-01, 8.426143e-01, 8.426266e-01, 8.426388e-01, 8.426511e-01, 8.426634e-01, 8.426757e-01, 8.426879e-01, 8.427002e-01, 8.427125e-01, 8.427248e-01, 8.427370e-01, 8.427493e-01, 8.427616e-01, 8.427739e-01, 8.427861e-01, 8.427984e-01, 8.428107e-01, 8.428230e-01, 8.428352e-01, 8.428475e-01, 8.428598e-01, 8.428721e-01, 8.428843e-01, 8.428966e-01, 8.429089e-01, 8.429211e-01, 8.429334e-01, 8.429457e-01, 8.429580e-01, 8.429702e-01, 8.429825e-01, 8.429948e-01, 8.430070e-01, 8.430193e-01, 8.430316e-01, 8.430439e-01, 8.430561e-01, 8.430684e-01, 8.430807e-01, 8.430929e-01, 8.431052e-01, 8.431175e-01, 8.431298e-01, 8.431420e-01, 8.431543e-01, 8.431666e-01, 8.431788e-01, 8.431911e-01, 8.432034e-01, 8.432156e-01, 8.432279e-01, 8.432402e-01, 8.432525e-01, 8.432648e-01, 8.432770e-01, 8.432893e-01, 8.433015e-01, 8.433138e-01, 8.433262e-01, 8.433383e-01, 8.433506e-01, 8.433629e-01, 8.433751e-01, 8.433874e-01, 8.433998e-01, 8.434119e-01, 8.434243e-01, 8.434365e-01, 8.434488e-01, 8.434610e-01, 8.434733e-01, 8.434855e-01, 8.434979e-01, 8.435102e-01, 8.435224e-01, 8.435346e-01, 8.435469e-01, 8.435591e-01, 8.435715e-01, 8.435838e-01, 8.435960e-01, 8.436083e-01, 8.436205e-01, 8.436328e-01, 8.436451e-01, 8.436574e-01, 8.436696e-01, 8.436819e-01, 8.436942e-01, 8.437064e-01, 8.437186e-01, 8.437310e-01, 8.437432e-01, 8.437555e-01, 8.437677e-01, 8.437800e-01, 8.437923e-01, 8.438045e-01, 8.438168e-01, 8.438291e-01, 8.438413e-01, 8.438536e-01, 8.438659e-01, 8.438781e-01, 8.438904e-01, 8.439026e-01, 8.439149e-01, 8.439272e-01, 8.439394e-01, 8.439517e-01, 8.439640e-01, 8.439762e-01, 8.439885e-01, 8.440008e-01, 8.440130e-01, 8.440253e-01, 8.440375e-01, 8.440498e-01, 8.440620e-01, 8.440743e-01, 8.440866e-01, 8.440989e-01, 8.441111e-01, 8.441234e-01, 8.441356e-01, 8.441479e-01, 8.441601e-01, 8.441725e-01, 8.441848e-01, 8.441970e-01, 8.442093e-01, 8.442215e-01, 8.442338e-01, 8.442461e-01, 8.442582e-01, 8.442706e-01, 8.442828e-01, 8.442951e-01, 8.443073e-01, 8.443196e-01, 8.443319e-01, 8.443441e-01, 8.443564e-01, 8.443686e-01, 8.443809e-01, 8.443932e-01, 8.444054e-01, 8.444177e-01, 8.444299e-01, 8.444422e-01, 8.444544e-01, 8.444667e-01, 8.444790e-01, 8.444912e-01, 8.445035e-01, 8.445157e-01, 8.445280e-01, 8.445402e-01, 8.445525e-01, 8.445649e-01, 8.445770e-01, 8.445894e-01, 8.446016e-01, 8.446139e-01, 8.446261e-01, 8.446383e-01, 8.446506e-01, 8.446628e-01, 8.446752e-01, 8.446873e-01, 8.446997e-01, 8.447119e-01, 8.447242e-01, 8.447364e-01, 8.447487e-01, 8.447609e-01, 8.447732e-01, 8.447854e-01, 8.447977e-01, 8.448099e-01, 8.448222e-01, 8.448345e-01, 8.448467e-01, 8.448590e-01, 8.448712e-01, 8.448835e-01, 8.448957e-01, 8.449080e-01, 8.449202e-01, 8.449326e-01, 8.449447e-01, 8.449571e-01, 8.449693e-01, 8.449816e-01, 8.449938e-01, 8.450060e-01, 8.450183e-01, 8.450305e-01, 8.450428e-01, 8.450550e-01, 8.450673e-01, 8.450796e-01, 8.450919e-01, 8.451041e-01, 8.451164e-01, 8.451286e-01, 8.451409e-01, 8.451531e-01, 8.451654e-01, 8.451776e-01, 8.451899e-01, 8.452021e-01, 8.452144e-01, 8.452266e-01, 8.452389e-01, 8.452511e-01, 8.452634e-01, 8.452756e-01, 8.452879e-01, 8.453001e-01, 8.453124e-01, 8.453246e-01, 8.453369e-01, 8.453491e-01, 8.453614e-01, 8.453737e-01, 8.453858e-01, 8.453982e-01, 8.454104e-01, 8.454227e-01, 8.454349e-01, 8.454472e-01, 8.454594e-01, 8.454717e-01, 8.454839e-01, 8.454962e-01, 8.455084e-01, 8.455207e-01, 8.455329e-01, 8.455452e-01, 8.455575e-01, 8.455697e-01, 8.455819e-01, 8.455942e-01, 8.456064e-01, 8.456187e-01, 8.456309e-01, 8.456432e-01, 8.456554e-01, 8.456677e-01, 8.456799e-01, 8.456922e-01, 8.457044e-01, 8.457167e-01, 8.457289e-01, 8.457412e-01, 8.457534e-01, 8.457657e-01, 8.457779e-01, 8.457902e-01, 8.458024e-01, 8.458146e-01, 8.458269e-01, 8.458391e-01, 8.458514e-01, 8.458636e-01, 8.458759e-01, 8.458881e-01, 8.459004e-01, 8.459126e-01, 8.459249e-01, 8.459372e-01, 8.459494e-01, 8.459617e-01, 8.459739e-01, 8.459861e-01, 8.459984e-01, 8.460106e-01, 8.460229e-01, 8.460351e-01, 8.460474e-01, 8.460596e-01, 8.460718e-01, 8.460841e-01, 8.460963e-01, 8.461086e-01, 8.461208e-01, 8.461331e-01, 8.461453e-01, 8.461576e-01, 8.461699e-01, 8.461820e-01, 8.461943e-01, 8.462066e-01, 8.462188e-01, 8.462311e-01, 8.462433e-01, 8.462555e-01, 8.462678e-01, 8.462800e-01, 8.462923e-01, 8.463045e-01, 8.463168e-01, 8.463290e-01, 8.463413e-01, 8.463535e-01, 8.463657e-01, 8.463780e-01, 8.463902e-01, 8.464025e-01, 8.464147e-01, 8.464270e-01, 8.464392e-01, 8.464515e-01, 8.464637e-01, 8.464759e-01, 8.464882e-01, 8.465004e-01, 8.465126e-01, 8.465249e-01, 8.465371e-01, 8.465495e-01, 8.465616e-01, 8.465738e-01, 8.465862e-01, 8.465983e-01, 8.466105e-01, 8.466229e-01, 8.466351e-01, 8.466473e-01, 8.466596e-01, 8.466718e-01, 8.466840e-01, 8.466963e-01, 8.467085e-01, 8.467207e-01, 8.467330e-01, 8.467453e-01, 8.467575e-01, 8.467698e-01, 8.467820e-01, 8.467942e-01, 8.468065e-01, 8.468187e-01, 8.468310e-01, 8.468432e-01, 8.468554e-01, 8.468677e-01, 8.468799e-01, 8.468921e-01, 8.469044e-01, 8.469166e-01, 8.469288e-01, 8.469411e-01, 8.469533e-01, 8.469656e-01, 8.469778e-01, 8.469900e-01, 8.470023e-01, 8.470145e-01, 8.470268e-01, 8.470390e-01, 8.470512e-01, 8.470635e-01, 8.470757e-01, 8.470879e-01, 8.471002e-01, 8.471124e-01, 8.471246e-01, 8.471369e-01, 8.471491e-01, 8.471614e-01, 8.471736e-01, 8.471859e-01, 8.471981e-01, 8.472103e-01, 8.472226e-01, 8.472348e-01, 8.472470e-01, 8.472593e-01, 8.472715e-01, 8.472837e-01, 8.472960e-01, 8.473082e-01, 8.473204e-01, 8.473327e-01, 8.473449e-01, 8.473572e-01, 8.473694e-01, 8.473817e-01, 8.473939e-01, 8.474061e-01, 8.474183e-01, 8.474306e-01, 8.474428e-01, 8.474550e-01, 8.474672e-01, 8.474795e-01, 8.474917e-01, 8.475039e-01, 8.475162e-01, 8.475285e-01, 8.475407e-01, 8.475528e-01, 8.475652e-01, 8.475774e-01, 8.475896e-01, 8.476018e-01, 8.476141e-01, 8.476263e-01, 8.476385e-01, 8.476507e-01, 8.476630e-01, 8.476752e-01, 8.476874e-01, 8.476996e-01, 8.477119e-01, 8.477241e-01, 8.477364e-01, 8.477486e-01, 8.477609e-01, 8.477731e-01, 8.477853e-01, 8.477975e-01, 8.478098e-01, 8.478220e-01, 8.478342e-01, 8.478464e-01, 8.478587e-01, 8.478709e-01, 8.478832e-01, 8.478954e-01, 8.479077e-01, 8.479199e-01, 8.479321e-01, 8.479443e-01, 8.479565e-01, 8.479688e-01, 8.479810e-01, 8.479932e-01, 8.480054e-01, 8.480178e-01, 8.480299e-01, 8.480421e-01, 8.480543e-01, 8.480666e-01, 8.480788e-01, 8.480911e-01, 8.481033e-01, 8.481155e-01, 8.481278e-01, 8.481400e-01, 8.481522e-01, 8.481644e-01, 8.481767e-01, 8.481889e-01, 8.482012e-01, 8.482134e-01, 8.482256e-01, 8.482378e-01, 8.482501e-01, 8.482623e-01, 8.482745e-01, 8.482867e-01, 8.482989e-01, 8.483112e-01, 8.483234e-01, 8.483356e-01, 8.483478e-01, 8.483601e-01, 8.483723e-01, 8.483846e-01, 8.483968e-01, 8.484090e-01, 8.484212e-01, 8.484334e-01, 8.484457e-01, 8.484579e-01, 8.484702e-01, 8.484823e-01, 8.484945e-01, 8.485067e-01, 8.485191e-01, 8.485312e-01, 8.485435e-01, 8.485557e-01, 8.485679e-01, 8.485801e-01, 8.485924e-01, 8.486046e-01, 8.486168e-01, 8.486291e-01, 8.486413e-01, 8.486534e-01, 8.486658e-01, 8.486780e-01, 8.486902e-01, 8.487024e-01, 8.487146e-01, 8.487268e-01, 8.487391e-01, 8.487513e-01, 8.487635e-01, 8.487757e-01, 8.487880e-01, 8.488002e-01, 8.488124e-01, 8.488247e-01, 8.488369e-01, 8.488491e-01, 8.488613e-01, 8.488735e-01, 8.488857e-01, 8.488979e-01, 8.489102e-01, 8.489224e-01, 8.489347e-01, 8.489469e-01, 8.489591e-01, 8.489713e-01, 8.489835e-01, 8.489957e-01, 8.490079e-01, 8.490202e-01, 8.490324e-01, 8.490446e-01, 8.490568e-01, 8.490691e-01, 8.490813e-01, 8.490935e-01, 8.491057e-01, 8.491180e-01, 8.491302e-01, 8.491424e-01, 8.491546e-01, 8.491668e-01, 8.491790e-01, 8.491912e-01, 8.492035e-01, 8.492157e-01, 8.492280e-01, 8.492402e-01, 8.492524e-01, 8.492646e-01, 8.492768e-01, 8.492890e-01, 8.493012e-01, 8.493134e-01, 8.493257e-01, 8.493379e-01, 8.493501e-01, 8.493624e-01, 8.493746e-01, 8.493868e-01, 8.493990e-01, 8.494112e-01, 8.494234e-01, 8.494356e-01, 8.494478e-01, 8.494601e-01, 8.494723e-01, 8.494845e-01, 8.494967e-01, 8.495090e-01, 8.495212e-01, 8.495334e-01, 8.495456e-01, 8.495578e-01, 8.495700e-01, 8.495823e-01, 8.495945e-01, 8.496067e-01, 8.496189e-01, 8.496311e-01, 8.496433e-01, 8.496555e-01, 8.496677e-01, 8.496799e-01, 8.496922e-01, 8.497044e-01, 8.497167e-01, 8.497289e-01, 8.497411e-01, 8.497533e-01, 8.497655e-01, 8.497777e-01, 8.497899e-01, 8.498021e-01, 8.498144e-01, 8.498266e-01, 8.498388e-01, 8.498510e-01, 8.498632e-01, 8.498754e-01, 8.498876e-01, 8.498998e-01, 8.499120e-01, 8.499243e-01, 8.499364e-01, 8.499486e-01, 8.499609e-01, 8.499731e-01, 8.499853e-01, 8.499975e-01, 8.500098e-01, 8.500220e-01, 8.500342e-01, 8.500465e-01, 8.500587e-01, 8.500708e-01, 8.500831e-01, 8.500953e-01, 8.501075e-01, 8.501197e-01, 8.501319e-01, 8.501441e-01, 8.501563e-01, 8.501685e-01, 8.501807e-01, 8.501930e-01, 8.502052e-01, 8.502174e-01, 8.502296e-01, 8.502418e-01, 8.502540e-01, 8.502662e-01, 8.502784e-01, 8.502907e-01, 8.503029e-01, 8.503151e-01, 8.503273e-01, 8.503395e-01, 8.503517e-01, 8.503639e-01, 8.503761e-01, 8.503883e-01, 8.504006e-01, 8.504128e-01, 8.504249e-01, 8.504372e-01, 8.504494e-01, 8.504616e-01, 8.504738e-01, 8.504860e-01, 8.504981e-01, 8.505104e-01, 8.505226e-01, 8.505348e-01, 8.505470e-01, 8.505592e-01, 8.505714e-01, 8.505836e-01, 8.505958e-01, 8.506081e-01, 8.506203e-01, 8.506325e-01, 8.506446e-01, 8.506569e-01, 8.506691e-01, 8.506813e-01, 8.506935e-01, 8.507057e-01, 8.507180e-01, 8.507302e-01, 8.507423e-01, 8.507546e-01, 8.507668e-01, 8.507790e-01, 8.507912e-01, 8.508034e-01, 8.508155e-01, 8.508278e-01, 8.508400e-01, 8.508522e-01, 8.508644e-01, 8.508766e-01, 8.508888e-01, 8.509010e-01, 8.509132e-01, 8.509254e-01, 8.509377e-01, 8.509499e-01, 8.509620e-01, 8.509743e-01, 8.509865e-01, 8.509986e-01, 8.510108e-01, 8.510230e-01, 8.510352e-01, 8.510475e-01, 8.510597e-01, 8.510719e-01, 8.510841e-01, 8.510963e-01, 8.511085e-01, 8.511207e-01, 8.511329e-01, 8.511451e-01, 8.511572e-01, 8.511695e-01, 8.511817e-01, 8.511939e-01, 8.512061e-01, 8.512183e-01, 8.512306e-01, 8.512427e-01, 8.512549e-01, 8.512672e-01, 8.512793e-01, 8.512915e-01, 8.513037e-01, 8.513159e-01, 8.513281e-01, 8.513404e-01, 8.513526e-01, 8.513648e-01, 8.513770e-01, 8.513892e-01, 8.514013e-01, 8.514135e-01, 8.514257e-01, 8.514379e-01, 8.514501e-01, 8.514624e-01, 8.514746e-01, 8.514868e-01, 8.514989e-01, 8.515111e-01, 8.515233e-01, 8.515356e-01, 8.515478e-01, 8.515600e-01, 8.515722e-01, 8.515844e-01, 8.515965e-01, 8.516088e-01, 8.516209e-01, 8.516331e-01, 8.516454e-01, 8.516576e-01, 8.516698e-01, 8.516820e-01, 8.516941e-01, 8.517063e-01, 8.517185e-01, 8.517308e-01, 8.517430e-01, 8.517551e-01, 8.517673e-01, 8.517795e-01, 8.517917e-01, 8.518039e-01, 8.518161e-01, 8.518283e-01, 8.518406e-01, 8.518527e-01, 8.518649e-01, 8.518771e-01, 8.518893e-01, 8.519015e-01, 8.519138e-01, 8.519258e-01, 8.519381e-01, 8.519503e-01, 8.519625e-01, 8.519747e-01, 8.519869e-01, 8.519990e-01, 8.520113e-01, 8.520235e-01, 8.520357e-01, 8.520479e-01, 8.520601e-01, 8.520722e-01, 8.520845e-01, 8.520966e-01, 8.521088e-01, 8.521211e-01, 8.521332e-01, 8.521454e-01, 8.521576e-01, 8.521698e-01, 8.521820e-01, 8.521942e-01, 8.522063e-01, 8.522186e-01, 8.522308e-01, 8.522430e-01, 8.522552e-01, 8.522673e-01, 8.522795e-01, 8.522918e-01, 8.523040e-01, 8.523162e-01, 8.523283e-01, 8.523405e-01, 8.523527e-01, 8.523650e-01, 8.523771e-01, 8.523893e-01, 8.524015e-01, 8.524137e-01, 8.524259e-01, 8.524380e-01, 8.524503e-01, 8.524625e-01, 8.524746e-01, 8.524868e-01, 8.524990e-01, 8.525112e-01, 8.525234e-01, 8.525356e-01, 8.525478e-01, 8.525600e-01, 8.525721e-01, 8.525844e-01, 8.525966e-01, 8.526087e-01, 8.526210e-01, 8.526331e-01, 8.526453e-01, 8.526575e-01, 8.526697e-01, 8.526819e-01, 8.526941e-01, 8.527063e-01, 8.527185e-01, 8.527306e-01, 8.527429e-01, 8.527550e-01, 8.527672e-01, 8.527794e-01, 8.527916e-01, 8.528038e-01, 8.528160e-01, 8.528281e-01, 8.528404e-01, 8.528525e-01, 8.528647e-01, 8.528769e-01, 8.528891e-01, 8.529013e-01, 8.529135e-01, 8.529257e-01, 8.529379e-01, 8.529500e-01, 8.529623e-01, 8.529744e-01, 8.529866e-01, 8.529988e-01, 8.530110e-01, 8.530232e-01, 8.530354e-01, 8.530475e-01, 8.530598e-01, 8.530719e-01, 8.530841e-01, 8.530963e-01, 8.531085e-01, 8.531207e-01, 8.531328e-01, 8.531451e-01, 8.531573e-01, 8.531694e-01, 8.531816e-01, 8.531938e-01, 8.532060e-01, 8.532181e-01, 8.532304e-01, 8.532426e-01, 8.532547e-01, 8.532669e-01, 8.532791e-01, 8.532913e-01, 8.533034e-01, 8.533157e-01, 8.533279e-01, 8.533400e-01, 8.533522e-01, 8.533644e-01, 8.533765e-01, 8.533887e-01, 8.534009e-01, 8.534131e-01, 8.534253e-01, 8.534375e-01, 8.534497e-01, 8.534619e-01, 8.534740e-01, 8.534862e-01, 8.534984e-01, 8.535106e-01, 8.535228e-01, 8.535349e-01, 8.535472e-01, 8.535594e-01, 8.535715e-01, 8.535837e-01, 8.535959e-01, 8.536080e-01, 8.536202e-01, 8.536325e-01, 8.536445e-01, 8.536568e-01, 8.536690e-01, 8.536811e-01, 8.536933e-01, 8.537055e-01, 8.537177e-01, 8.537298e-01, 8.537421e-01, 8.537542e-01, 8.537664e-01, 8.537787e-01, 8.537908e-01, 8.538030e-01, 8.538152e-01, 8.538273e-01, 8.538395e-01, 8.538516e-01, 8.538638e-01, 8.538761e-01, 8.538882e-01, 8.539004e-01, 8.539126e-01, 8.539248e-01, 8.539370e-01, 8.539491e-01, 8.539613e-01, 8.539735e-01, 8.539857e-01, 8.539978e-01, 8.540100e-01, 8.540221e-01, 8.540344e-01, 8.540466e-01, 8.540587e-01, 8.540709e-01, 8.540831e-01, 8.540953e-01, 8.541074e-01, 8.541196e-01, 8.541318e-01, 8.541440e-01, 8.541561e-01, 8.541684e-01, 8.541806e-01, 8.541927e-01, 8.542049e-01, 8.542170e-01, 8.542292e-01, 8.542414e-01, 8.542536e-01, 8.542657e-01, 8.542779e-01, 8.542901e-01, 8.543023e-01, 8.543144e-01, 8.543267e-01, 8.543388e-01, 8.543510e-01, 8.543632e-01, 8.543753e-01, 8.543875e-01, 8.543997e-01, 8.544119e-01, 8.544241e-01, 8.544362e-01, 8.544484e-01, 8.544605e-01, 8.544728e-01, 8.544849e-01, 8.544971e-01, 8.545093e-01, 8.545215e-01, 8.545336e-01, 8.545458e-01, 8.545580e-01, 8.545702e-01, 8.545823e-01, 8.545945e-01, 8.546066e-01, 8.546188e-01, 8.546309e-01, 8.546432e-01, 8.546554e-01, 8.546675e-01, 8.546798e-01, 8.546919e-01, 8.547041e-01, 8.547162e-01, 8.547284e-01, 8.547405e-01, 8.547527e-01, 8.547649e-01, 8.547771e-01, 8.547893e-01, 8.548014e-01, 8.548136e-01, 8.548257e-01, 8.548380e-01, 8.548501e-01, 8.548623e-01, 8.548745e-01, 8.548867e-01, 8.548988e-01, 8.549110e-01, 8.549232e-01, 8.549353e-01, 8.549475e-01, 8.549596e-01, 8.549718e-01, 8.549840e-01, 8.549962e-01, 8.550083e-01, 8.550205e-01, 8.550327e-01, 8.550448e-01, 8.550571e-01, 8.550692e-01, 8.550814e-01, 8.550935e-01, 8.551058e-01, 8.551179e-01, 8.551301e-01, 8.551422e-01, 8.551544e-01, 8.551666e-01, 8.551787e-01, 8.551909e-01, 8.552031e-01, 8.552152e-01, 8.552274e-01, 8.552395e-01, 8.552517e-01, 8.552639e-01, 8.552761e-01, 8.552882e-01, 8.553004e-01, 8.553125e-01, 8.553247e-01, 8.553369e-01, 8.553491e-01, 8.553612e-01, 8.553734e-01, 8.553855e-01, 8.553978e-01, 8.554099e-01, 8.554221e-01, 8.554342e-01, 8.554465e-01, 8.554586e-01, 8.554708e-01, 8.554829e-01, 8.554951e-01, 8.555073e-01, 8.555194e-01, 8.555316e-01, 8.555438e-01, 8.555559e-01, 8.555681e-01, 8.555802e-01, 8.555924e-01, 8.556046e-01, 8.556168e-01, 8.556289e-01, 8.556411e-01, 8.556532e-01, 8.556654e-01, 8.556776e-01, 8.556897e-01, 8.557019e-01, 8.557140e-01, 8.557262e-01, 8.557384e-01, 8.557506e-01, 8.557627e-01, 8.557749e-01, 8.557870e-01, 8.557993e-01, 8.558114e-01, 8.558236e-01, 8.558357e-01, 8.558478e-01, 8.558601e-01, 8.558722e-01, 8.558844e-01, 8.558965e-01, 8.559088e-01, 8.559209e-01, 8.559331e-01, 8.559452e-01, 8.559573e-01, 8.559695e-01, 8.559816e-01, 8.559939e-01, 8.560060e-01, 8.560182e-01, 8.560303e-01, 8.560424e-01, 8.560547e-01, 8.560668e-01, 8.560790e-01, 8.560911e-01, 8.561033e-01, 8.561155e-01, 8.561276e-01, 8.561398e-01, 8.561519e-01, 8.561641e-01, 8.561763e-01, 8.561885e-01, 8.562006e-01, 8.562127e-01, 8.562249e-01, 8.562371e-01, 8.562493e-01, 8.562614e-01, 8.562735e-01, 8.562857e-01, 8.562979e-01, 8.563101e-01, 8.563222e-01, 8.563343e-01, 8.563465e-01, 8.563586e-01, 8.563709e-01, 8.563830e-01, 8.563951e-01, 8.564073e-01, 8.564194e-01, 8.564317e-01, 8.564438e-01, 8.564559e-01, 8.564681e-01, 8.564802e-01, 8.564925e-01, 8.565046e-01, 8.565167e-01, 8.565289e-01, 8.565410e-01, 8.565533e-01, 8.565654e-01, 8.565775e-01, 8.565897e-01, 8.566018e-01, 8.566139e-01, 8.566262e-01, 8.566383e-01, 8.566505e-01, 8.566626e-01, 8.566747e-01, 8.566869e-01, 8.566990e-01, 8.567112e-01, 8.567234e-01, 8.567355e-01, 8.567476e-01, 8.567598e-01, 8.567720e-01, 8.567842e-01, 8.567963e-01, 8.568084e-01, 8.568206e-01, 8.568328e-01, 8.568449e-01, 8.568571e-01, 8.568692e-01, 8.568814e-01, 8.568936e-01, 8.569057e-01, 8.569179e-01, 8.569300e-01, 8.569422e-01, 8.569543e-01, 8.569665e-01, 8.569787e-01, 8.569908e-01, 8.570030e-01, 8.570151e-01, 8.570272e-01, 8.570395e-01, 8.570516e-01, 8.570637e-01, 8.570759e-01, 8.570880e-01, 8.571001e-01, 8.571123e-01, 8.571244e-01, 8.571366e-01, 8.571488e-01, 8.571609e-01, 8.571730e-01, 8.571852e-01, 8.571974e-01, 8.572095e-01, 8.572217e-01, 8.572338e-01, 8.572460e-01, 8.572582e-01, 8.572703e-01, 8.572825e-01, 8.572946e-01, 8.573068e-01, 8.573189e-01, 8.573310e-01, 8.573433e-01, 8.573554e-01, 8.573675e-01, 8.573797e-01, 8.573918e-01, 8.574039e-01, 8.574162e-01, 8.574283e-01, 8.574404e-01, 8.574525e-01, 8.574647e-01, 8.574768e-01, 8.574890e-01, 8.575012e-01, 8.575133e-01, 8.575255e-01, 8.575376e-01, 8.575498e-01, 8.575619e-01, 8.575740e-01, 8.575863e-01, 8.575984e-01, 8.576105e-01, 8.576226e-01, 8.576348e-01, 8.576469e-01, 8.576591e-01, 8.576713e-01, 8.576834e-01, 8.576955e-01, 8.577077e-01, 8.577199e-01, 8.577320e-01, 8.577441e-01, 8.577563e-01, 8.577685e-01, 8.577806e-01, 8.577927e-01, 8.578048e-01, 8.578171e-01, 8.578292e-01, 8.578413e-01, 8.578535e-01, 8.578656e-01, 8.578777e-01, 8.578899e-01, 8.579021e-01, 8.579142e-01, 8.579263e-01, 8.579385e-01, 8.579506e-01, 8.579628e-01, 8.579749e-01, 8.579870e-01, 8.579991e-01, 8.580114e-01, 8.580235e-01, 8.580356e-01, 8.580478e-01, 8.580599e-01, 8.580721e-01, 8.580842e-01, 8.580964e-01, 8.581086e-01, 8.581207e-01, 8.581328e-01, 8.581449e-01, 8.581570e-01, 8.581693e-01, 8.581814e-01, 8.581935e-01, 8.582056e-01, 8.582178e-01, 8.582300e-01, 8.582421e-01, 8.582542e-01, 8.582664e-01, 8.582786e-01, 8.582907e-01, 8.583028e-01, 8.583149e-01, 8.583270e-01, 8.583393e-01, 8.583514e-01, 8.583635e-01, 8.583757e-01, 8.583878e-01, 8.584000e-01, 8.584121e-01, 8.584242e-01, 8.584363e-01, 8.584486e-01, 8.584607e-01, 8.584728e-01, 8.584849e-01, 8.584971e-01, 8.585092e-01, 8.585214e-01, 8.585335e-01, 8.585457e-01, 8.585578e-01, 8.585699e-01, 8.585821e-01, 8.585942e-01, 8.586063e-01, 8.586185e-01, 8.586306e-01, 8.586428e-01, 8.586549e-01, 8.586671e-01, 8.586792e-01, 8.586913e-01, 8.587034e-01, 8.587157e-01, 8.587278e-01, 8.587399e-01, 8.587520e-01, 8.587642e-01, 8.587763e-01, 8.587885e-01, 8.588006e-01, 8.588127e-01, 8.588248e-01, 8.588370e-01, 8.588491e-01, 8.588612e-01, 8.588734e-01, 8.588856e-01, 8.588977e-01, 8.589098e-01, 8.589219e-01, 8.589340e-01, 8.589463e-01, 8.589584e-01, 8.589705e-01, 8.589827e-01, 8.589948e-01, 8.590069e-01, 8.590190e-01, 8.590313e-01, 8.590434e-01, 8.590555e-01, 8.590676e-01, 8.590797e-01, 8.590919e-01, 8.591040e-01, 8.591161e-01, 8.591283e-01, 8.591405e-01, 8.591526e-01, 8.591647e-01, 8.591768e-01, 8.591890e-01, 8.592011e-01, 8.592132e-01, 8.592254e-01, 8.592376e-01, 8.592497e-01, 8.592618e-01, 8.592739e-01, 8.592860e-01, 8.592982e-01, 8.593103e-01, 8.593225e-01, 8.593346e-01, 8.593467e-01, 8.593588e-01, 8.593710e-01, 8.593831e-01, 8.593953e-01, 8.594074e-01, 8.594195e-01, 8.594316e-01, 8.594438e-01, 8.594559e-01, 8.594681e-01, 8.594802e-01, 8.594923e-01, 8.595045e-01, 8.595166e-01, 8.595287e-01, 8.595408e-01, 8.595529e-01, 8.595651e-01, 8.595773e-01, 8.595894e-01, 8.596016e-01, 8.596137e-01, 8.596258e-01, 8.596379e-01, 8.596500e-01, 8.596622e-01, 8.596743e-01, 8.596864e-01, 8.596985e-01, 8.597106e-01, 8.597229e-01, 8.597350e-01, 8.597471e-01, 8.597593e-01, 8.597714e-01, 8.597835e-01, 8.597956e-01, 8.598077e-01, 8.598199e-01, 8.598320e-01, 8.598441e-01, 8.598562e-01, 8.598683e-01, 8.598805e-01, 8.598926e-01, 8.599048e-01, 8.599169e-01, 8.599291e-01, 8.599412e-01, 8.599533e-01, 8.599654e-01, 8.599776e-01, 8.599897e-01, 8.600018e-01, 8.600140e-01, 8.600261e-01, 8.600382e-01, 8.600503e-01, 8.600624e-01, 8.600746e-01, 8.600867e-01, 8.600988e-01, 8.601109e-01, 8.601231e-01, 8.601352e-01, 8.601473e-01, 8.601595e-01, 8.601716e-01, 8.601837e-01, 8.601958e-01, 8.602079e-01, 8.602201e-01, 8.602322e-01, 8.602443e-01, 8.602564e-01, 8.602687e-01, 8.602808e-01, 8.602929e-01, 8.603050e-01, 8.603172e-01, 8.603293e-01, 8.603414e-01, 8.603535e-01, 8.603656e-01, 8.603778e-01, 8.603899e-01, 8.604020e-01, 8.604141e-01, 8.604262e-01, 8.604384e-01, 8.604505e-01, 8.604627e-01, 8.604748e-01, 8.604869e-01, 8.604990e-01, 8.605111e-01, 8.605233e-01, 8.605354e-01, 8.605475e-01, 8.605596e-01, 8.605718e-01, 8.605839e-01, 8.605960e-01, 8.606082e-01, 8.606203e-01, 8.606323e-01, 8.606445e-01, 8.606566e-01, 8.606687e-01, 8.606808e-01, 8.606929e-01, 8.607051e-01, 8.607172e-01, 8.607293e-01, 8.607414e-01, 8.607535e-01, 8.607657e-01, 8.607778e-01, 8.607900e-01, 8.608021e-01, 8.608142e-01, 8.608263e-01, 8.608384e-01, 8.608506e-01, 8.608627e-01, 8.608748e-01, 8.608869e-01, 8.608990e-01, 8.609112e-01, 8.609233e-01, 8.609354e-01, 8.609475e-01, 8.609597e-01, 8.609718e-01, 8.609838e-01, 8.609959e-01, 8.610081e-01, 8.610202e-01, 8.610324e-01, 8.610445e-01, 8.610566e-01, 8.610687e-01, 8.610808e-01, 8.610930e-01, 8.611051e-01, 8.611172e-01, 8.611293e-01, 8.611414e-01, 8.611536e-01, 8.611657e-01, 8.611777e-01, 8.611899e-01, 8.612020e-01, 8.612141e-01, 8.612263e-01, 8.612384e-01, 8.612505e-01, 8.612626e-01, 8.612748e-01, 8.612869e-01, 8.612990e-01, 8.613111e-01, 8.613232e-01, 8.613353e-01, 8.613474e-01, 8.613595e-01, 8.613716e-01, 8.613838e-01, 8.613959e-01, 8.614081e-01, 8.614202e-01, 8.614323e-01, 8.614444e-01, 8.614565e-01, 8.614686e-01, 8.614807e-01, 8.614928e-01, 8.615050e-01, 8.615171e-01, 8.615292e-01, 8.615413e-01, 8.615534e-01, 8.615656e-01, 8.615776e-01, 8.615897e-01, 8.616019e-01, 8.616140e-01, 8.616261e-01, 8.616382e-01, 8.616503e-01, 8.616625e-01, 8.616746e-01, 8.616866e-01, 8.616987e-01, 8.617109e-01, 8.617230e-01, 8.617352e-01, 8.617473e-01, 8.617594e-01, 8.617715e-01, 8.617836e-01, 8.617957e-01, 8.618078e-01, 8.618199e-01, 8.618321e-01, 8.618442e-01, 8.618563e-01, 8.618684e-01, 8.618805e-01, 8.618926e-01, 8.619047e-01, 8.619168e-01, 8.619290e-01, 8.619411e-01, 8.619532e-01, 8.619652e-01, 8.619774e-01, 8.619895e-01, 8.620017e-01, 8.620138e-01, 8.620259e-01, 8.620379e-01, 8.620501e-01, 8.620622e-01, 8.620743e-01, 8.620864e-01, 8.620986e-01, 8.621106e-01, 8.621227e-01, 8.621348e-01, 8.621470e-01, 8.621591e-01, 8.621712e-01, 8.621833e-01, 8.621954e-01, 8.622075e-01, 8.622196e-01, 8.622317e-01, 8.622439e-01, 8.622559e-01, 8.622680e-01, 8.622802e-01, 8.622923e-01, 8.623044e-01, 8.623165e-01, 8.623286e-01, 8.623407e-01, 8.623528e-01, 8.623649e-01, 8.623770e-01, 8.623891e-01, 8.624012e-01, 8.624133e-01, 8.624255e-01, 8.624376e-01, 8.624496e-01, 8.624618e-01, 8.624739e-01, 8.624860e-01, 8.624982e-01, 8.625102e-01, 8.625223e-01, 8.625345e-01, 8.625466e-01, 8.625587e-01, 8.625707e-01, 8.625829e-01, 8.625950e-01, 8.626071e-01, 8.626192e-01, 8.626313e-01, 8.626434e-01, 8.626555e-01, 8.626676e-01, 8.626798e-01, 8.626918e-01, 8.627039e-01, 8.627161e-01, 8.627282e-01, 8.627402e-01, 8.627523e-01, 8.627645e-01, 8.627766e-01, 8.627887e-01, 8.628008e-01, 8.628129e-01, 8.628250e-01, 8.628371e-01, 8.628492e-01, 8.628613e-01, 8.628734e-01, 8.628855e-01, 8.628976e-01, 8.629097e-01, 8.629218e-01, 8.629339e-01, 8.629460e-01, 8.629581e-01, 8.629702e-01, 8.629824e-01, 8.629944e-01, 8.630065e-01, 8.630186e-01, 8.630308e-01, 8.630428e-01, 8.630549e-01, 8.630671e-01, 8.630792e-01, 8.630912e-01, 8.631033e-01, 8.631155e-01, 8.631276e-01, 8.631396e-01, 8.631518e-01, 8.631639e-01, 8.631760e-01, 8.631881e-01, 8.632002e-01, 8.632123e-01, 8.632244e-01, 8.632365e-01, 8.632486e-01, 8.632607e-01, 8.632728e-01, 8.632849e-01, 8.632970e-01, 8.633091e-01, 8.633212e-01, 8.633333e-01, 8.633454e-01, 8.633575e-01, 8.633696e-01, 8.633817e-01, 8.633938e-01, 8.634059e-01, 8.634180e-01, 8.634301e-01, 8.634422e-01, 8.634543e-01, 8.634664e-01, 8.634785e-01, 8.634906e-01, 8.635027e-01, 8.635148e-01, 8.635269e-01, 8.635390e-01, 8.635511e-01, 8.635632e-01, 8.635753e-01, 8.635874e-01, 8.635995e-01, 8.636116e-01, 8.636237e-01, 8.636358e-01, 8.636479e-01, 8.636600e-01, 8.636721e-01, 8.636841e-01, 8.636963e-01, 8.637084e-01, 8.637204e-01, 8.637326e-01, 8.637447e-01, 8.637567e-01, 8.637688e-01, 8.637810e-01, 8.637931e-01, 8.638051e-01, 8.638173e-01, 8.638294e-01, 8.638414e-01, 8.638536e-01, 8.638657e-01, 8.638777e-01, 8.638898e-01, 8.639020e-01, 8.639140e-01, 8.639261e-01, 8.639383e-01, 8.639503e-01, 8.639624e-01, 8.639745e-01, 8.639866e-01, 8.639987e-01, 8.640108e-01, 8.640229e-01, 8.640350e-01, 8.640471e-01, 8.640592e-01, 8.640712e-01, 8.640833e-01, 8.640954e-01, 8.641075e-01, 8.641196e-01, 8.641317e-01, 8.641438e-01, 8.641559e-01, 8.641680e-01, 8.641800e-01, 8.641922e-01, 8.642043e-01, 8.642163e-01, 8.642285e-01, 8.642406e-01, 8.642526e-01, 8.642648e-01, 8.642769e-01, 8.642889e-01, 8.643010e-01, 8.643131e-01, 8.643252e-01, 8.643373e-01, 8.643494e-01, 8.643615e-01, 8.643736e-01, 8.643857e-01, 8.643978e-01, 8.644098e-01, 8.644220e-01, 8.644341e-01, 8.644461e-01, 8.644583e-01, 8.644703e-01, 8.644824e-01, 8.644945e-01, 8.645065e-01, 8.645187e-01, 8.645307e-01, 8.645428e-01, 8.645550e-01, 8.645670e-01, 8.645791e-01, 8.645912e-01, 8.646033e-01, 8.646154e-01, 8.646275e-01, 8.646396e-01, 8.646516e-01, 8.646638e-01, 8.646759e-01, 8.646879e-01, 8.647000e-01, 8.647121e-01, 8.647242e-01, 8.647363e-01, 8.647484e-01, 8.647605e-01, 8.647726e-01, 8.647847e-01, 8.647967e-01, 8.648088e-01, 8.648210e-01, 8.648330e-01, 8.648451e-01, 8.648571e-01, 8.648693e-01, 8.648813e-01, 8.648934e-01, 8.649055e-01, 8.649176e-01, 8.649297e-01, 8.649418e-01, 8.649539e-01, 8.649659e-01, 8.649781e-01, 8.649901e-01, 8.650022e-01, 8.650143e-01, 8.650264e-01, 8.650385e-01, 8.650506e-01, 8.650627e-01, 8.650747e-01, 8.650869e-01, 8.650989e-01, 8.651110e-01, 8.651230e-01, 8.651351e-01, 8.651473e-01, 8.651593e-01, 8.651714e-01, 8.651835e-01, 8.651956e-01, 8.652077e-01, 8.652198e-01, 8.652318e-01, 8.652439e-01, 8.652560e-01, 8.652681e-01, 8.652802e-01, 8.652923e-01, 8.653043e-01, 8.653165e-01, 8.653286e-01, 8.653406e-01, 8.653527e-01, 8.653647e-01, 8.653769e-01, 8.653889e-01, 8.654010e-01, 8.654131e-01, 8.654252e-01, 8.654373e-01, 8.654494e-01, 8.654614e-01, 8.654735e-01, 8.654855e-01, 8.654977e-01, 8.655097e-01, 8.655218e-01, 8.655339e-01, 8.655460e-01, 8.655581e-01, 8.655702e-01, 8.655822e-01, 8.655943e-01, 8.656064e-01, 8.656185e-01, 8.656306e-01, 8.656427e-01, 8.656547e-01, 8.656669e-01, 8.656789e-01, 8.656910e-01, 8.657030e-01, 8.657151e-01, 8.657272e-01, 8.657393e-01, 8.657514e-01, 8.657635e-01, 8.657755e-01, 8.657877e-01, 8.657997e-01, 8.658118e-01, 8.658239e-01, 8.658360e-01, 8.658480e-01, 8.658600e-01, 8.658722e-01, 8.658842e-01, 8.658963e-01, 8.659084e-01, 8.659205e-01, 8.659326e-01, 8.659447e-01, 8.659567e-01, 8.659688e-01, 8.659809e-01, 8.659930e-01, 8.660051e-01, 8.660171e-01, 8.660292e-01, 8.660412e-01, 8.660534e-01, 8.660654e-01, 8.660775e-01, 8.660896e-01, 8.661017e-01, 8.661137e-01, 8.661259e-01, 8.661379e-01, 8.661500e-01, 8.661621e-01, 8.661741e-01, 8.661863e-01, 8.661983e-01, 8.662104e-01, 8.662224e-01, 8.662345e-01, 8.662466e-01, 8.662586e-01, 8.662708e-01, 8.662828e-01, 8.662949e-01, 8.663070e-01, 8.663191e-01, 8.663311e-01, 8.663431e-01, 8.663553e-01, 8.663673e-01, 8.663794e-01, 8.663915e-01, 8.664036e-01, 8.664157e-01, 8.664277e-01, 8.664398e-01, 8.664519e-01, 8.664640e-01, 8.664760e-01, 8.664880e-01, 8.665002e-01, 8.665122e-01, 8.665243e-01, 8.665364e-01, 8.665484e-01, 8.665606e-01, 8.665726e-01, 8.665847e-01, 8.665968e-01, 8.666088e-01, 8.666209e-01, 8.666329e-01, 8.666451e-01, 8.666571e-01, 8.666692e-01, 8.666813e-01, 8.666933e-01, 8.667055e-01, 8.667175e-01, 8.667295e-01, 8.667417e-01, 8.667537e-01, 8.667658e-01, 8.667778e-01, 8.667899e-01, 8.668020e-01, 8.668141e-01, 8.668261e-01, 8.668382e-01, 8.668503e-01, 8.668624e-01, 8.668744e-01, 8.668864e-01, 8.668986e-01, 8.669106e-01, 8.669227e-01, 8.669348e-01, 8.669468e-01, 8.669590e-01, 8.669710e-01, 8.669831e-01, 8.669952e-01, 8.670072e-01, 8.670192e-01, 8.670313e-01, 8.670434e-01, 8.670554e-01, 8.670676e-01, 8.670796e-01, 8.670917e-01, 8.671038e-01, 8.671158e-01, 8.671279e-01, 8.671399e-01, 8.671520e-01, 8.671641e-01, 8.671762e-01, 8.671882e-01, 8.672003e-01, 8.672124e-01, 8.672244e-01, 8.672366e-01, 8.672486e-01, 8.672606e-01, 8.672727e-01, 8.672848e-01, 8.672968e-01, 8.673089e-01, 8.673210e-01, 8.673330e-01, 8.673452e-01, 8.673572e-01, 8.673692e-01, 8.673813e-01, 8.673934e-01, 8.674054e-01, 8.674175e-01, 8.674296e-01, 8.674416e-01, 8.674538e-01, 8.674658e-01, 8.674778e-01, 8.674899e-01, 8.675020e-01, 8.675140e-01, 8.675261e-01, 8.675382e-01, 8.675503e-01, 8.675623e-01, 8.675744e-01, 8.675864e-01, 8.675985e-01, 8.676106e-01, 8.676226e-01, 8.676347e-01, 8.676467e-01, 8.676589e-01, 8.676709e-01, 8.676829e-01, 8.676950e-01, 8.677071e-01, 8.677191e-01, 8.677312e-01, 8.677433e-01, 8.677553e-01, 8.677673e-01, 8.677795e-01, 8.677915e-01, 8.678036e-01, 8.678157e-01, 8.678277e-01, 8.678398e-01, 8.678518e-01, 8.678640e-01, 8.678759e-01, 8.678880e-01, 8.679000e-01, 8.679122e-01, 8.679242e-01, 8.679363e-01, 8.679484e-01, 8.679604e-01, 8.679724e-01, 8.679845e-01, 8.679966e-01, 8.680087e-01, 8.680207e-01, 8.680328e-01, 8.680449e-01, 8.680569e-01, 8.680689e-01, 8.680810e-01, 8.680931e-01, 8.681051e-01, 8.681172e-01, 8.681292e-01, 8.681414e-01, 8.681534e-01, 8.681654e-01, 8.681775e-01, 8.681896e-01, 8.682016e-01, 8.682137e-01, 8.682257e-01, 8.682378e-01, 8.682498e-01, 8.682619e-01, 8.682739e-01, 8.682861e-01, 8.682981e-01, 8.683102e-01, 8.683222e-01, 8.683343e-01, 8.683463e-01, 8.683584e-01, 8.683704e-01, 8.683825e-01, 8.683946e-01, 8.684066e-01, 8.684186e-01, 8.684307e-01, 8.684428e-01, 8.684549e-01, 8.684669e-01, 8.684790e-01, 8.684910e-01, 8.685031e-01, 8.685151e-01, 8.685272e-01, 8.685392e-01, 8.685513e-01, 8.685634e-01, 8.685754e-01, 8.685874e-01, 8.685995e-01, 8.686116e-01, 8.686237e-01, 8.686357e-01, 8.686478e-01, 8.686598e-01, 8.686719e-01, 8.686839e-01, 8.686960e-01, 8.687080e-01, 8.687201e-01, 8.687322e-01, 8.687442e-01, 8.687562e-01, 8.687683e-01, 8.687803e-01, 8.687925e-01, 8.688045e-01, 8.688166e-01, 8.688286e-01, 8.688406e-01, 8.688527e-01, 8.688648e-01, 8.688768e-01, 8.688889e-01, 8.689009e-01, 8.689129e-01, 8.689250e-01, 8.689371e-01, 8.689491e-01, 8.689612e-01, 8.689732e-01, 8.689852e-01, 8.689974e-01, 8.690094e-01, 8.690215e-01, 8.690335e-01, 8.690456e-01, 8.690576e-01, 8.690696e-01, 8.690817e-01, 8.690938e-01, 8.691058e-01, 8.691179e-01, 8.691299e-01, 8.691419e-01, 8.691540e-01, 8.691661e-01, 8.691781e-01, 8.691902e-01, 8.692022e-01, 8.692142e-01, 8.692263e-01, 8.692384e-01, 8.692505e-01, 8.692625e-01, 8.692745e-01, 8.692865e-01, 8.692986e-01, 8.693106e-01, 8.693228e-01, 8.693348e-01, 8.693469e-01, 8.693589e-01, 8.693709e-01, 8.693830e-01, 8.693950e-01, 8.694071e-01, 8.694192e-01, 8.694312e-01, 8.694432e-01, 8.694553e-01, 8.694673e-01, 8.694794e-01, 8.694914e-01, 8.695034e-01, 8.695155e-01, 8.695276e-01, 8.695396e-01, 8.695517e-01, 8.695637e-01, 8.695757e-01, 8.695878e-01, 8.695998e-01, 8.696120e-01, 8.696240e-01, 8.696361e-01, 8.696481e-01, 8.696601e-01, 8.696722e-01, 8.696842e-01, 8.696962e-01, 8.697082e-01, 8.697203e-01, 8.697324e-01, 8.697445e-01, 8.697565e-01, 8.697686e-01, 8.697806e-01, 8.697926e-01, 8.698047e-01, 8.698167e-01, 8.698288e-01, 8.698408e-01, 8.698528e-01, 8.698649e-01, 8.698770e-01, 8.698890e-01, 8.699011e-01, 8.699131e-01, 8.699251e-01, 8.699372e-01, 8.699492e-01, 8.699613e-01, 8.699733e-01, 8.699853e-01, 8.699974e-01, 8.700094e-01, 8.700215e-01, 8.700336e-01, 8.700456e-01, 8.700576e-01, 8.700697e-01, 8.700817e-01, 8.700938e-01, 8.701058e-01, 8.701178e-01, 8.701299e-01, 8.701419e-01, 8.701540e-01, 8.701660e-01, 8.701780e-01, 8.701901e-01, 8.702021e-01, 8.702142e-01, 8.702262e-01, 8.702383e-01, 8.702503e-01, 8.702624e-01, 8.702744e-01, 8.702865e-01, 8.702985e-01, 8.703105e-01, 8.703226e-01, 8.703346e-01, 8.703467e-01, 8.703587e-01, 8.703707e-01, 8.703828e-01, 8.703948e-01, 8.704069e-01, 8.704189e-01, 8.704309e-01, 8.704430e-01, 8.704550e-01, 8.704671e-01, 8.704791e-01, 8.704911e-01, 8.705032e-01, 8.705152e-01, 8.705273e-01, 8.705393e-01, 8.705513e-01, 8.705634e-01, 8.705754e-01, 8.705875e-01, 8.705995e-01, 8.706115e-01, 8.706235e-01, 8.706356e-01, 8.706476e-01, 8.706596e-01, 8.706717e-01, 8.706837e-01, 8.706958e-01, 8.707078e-01, 8.707199e-01, 8.707319e-01, 8.707439e-01, 8.707560e-01, 8.707680e-01, 8.707801e-01, 8.707921e-01, 8.708041e-01, 8.708162e-01, 8.708282e-01, 8.708403e-01, 8.708523e-01, 8.708643e-01, 8.708764e-01, 8.708884e-01, 8.709005e-01, 8.709125e-01, 8.709245e-01, 8.709366e-01, 8.709486e-01, 8.709607e-01, 8.709727e-01, 8.709847e-01, 8.709968e-01, 8.710088e-01, 8.710209e-01, 8.710329e-01, 8.710449e-01, 8.710570e-01, 8.710690e-01, 8.710811e-01, 8.710931e-01, 8.711051e-01, 8.711172e-01, 8.711292e-01, 8.711413e-01, 8.711532e-01, 8.711653e-01, 8.711773e-01, 8.711894e-01, 8.712013e-01, 8.712134e-01, 8.712254e-01, 8.712375e-01, 8.712495e-01, 8.712615e-01, 8.712736e-01, 8.712856e-01, 8.712977e-01, 8.713097e-01, 8.713217e-01, 8.713338e-01, 8.713458e-01, 8.713579e-01, 8.713699e-01, 8.713819e-01, 8.713940e-01, 8.714060e-01, 8.714179e-01, 8.714300e-01, 8.714420e-01, 8.714541e-01, 8.714661e-01, 8.714781e-01, 8.714902e-01, 8.715022e-01, 8.715143e-01, 8.715263e-01, 8.715383e-01, 8.715504e-01, 8.715624e-01, 8.715743e-01, 8.715864e-01, 8.715984e-01, 8.716105e-01, 8.716225e-01, 8.716345e-01, 8.716466e-01, 8.716586e-01, 8.716707e-01, 8.716827e-01, 8.716947e-01, 8.717067e-01, 8.717188e-01, 8.717308e-01, 8.717428e-01, 8.717549e-01, 8.717669e-01, 8.717790e-01, 8.717910e-01, 8.718030e-01, 8.718150e-01, 8.718270e-01, 8.718390e-01, 8.718511e-01, 8.718631e-01, 8.718752e-01, 8.718872e-01, 8.718992e-01, 8.719113e-01, 8.719233e-01, 8.719352e-01, 8.719473e-01, 8.719593e-01, 8.719714e-01, 8.719834e-01, 8.719954e-01, 8.720075e-01, 8.720195e-01, 8.720315e-01, 8.720436e-01, 8.720556e-01, 8.720676e-01, 8.720797e-01, 8.720917e-01, 8.721038e-01, 8.721158e-01, 8.721277e-01, 8.721398e-01, 8.721518e-01, 8.721638e-01, 8.721759e-01, 8.721879e-01, 8.722000e-01, 8.722119e-01, 8.722239e-01, 8.722360e-01, 8.722480e-01, 8.722600e-01, 8.722721e-01, 8.722841e-01, 8.722961e-01, 8.723081e-01, 8.723202e-01, 8.723322e-01, 8.723443e-01, 8.723563e-01, 8.723682e-01, 8.723803e-01, 8.723923e-01, 8.724043e-01, 8.724164e-01, 8.724284e-01, 8.724404e-01, 8.724524e-01, 8.724645e-01, 8.724765e-01, 8.724886e-01, 8.725006e-01, 8.725125e-01, 8.725246e-01, 8.725366e-01, 8.725486e-01, 8.725607e-01, 8.725727e-01, 8.725847e-01, 8.725967e-01, 8.726088e-01, 8.726208e-01, 8.726328e-01, 8.726448e-01, 8.726568e-01, 8.726689e-01, 8.726809e-01, 8.726929e-01, 8.727049e-01, 8.727169e-01, 8.727289e-01, 8.727410e-01, 8.727530e-01, 8.727651e-01, 8.727770e-01, 8.727891e-01, 8.728011e-01, 8.728132e-01, 8.728252e-01, 8.728371e-01, 8.728492e-01, 8.728612e-01, 8.728732e-01, 8.728852e-01, 8.728973e-01, 8.729093e-01, 8.729213e-01, 8.729334e-01, 8.729453e-01, 8.729573e-01, 8.729694e-01, 8.729814e-01, 8.729935e-01, 8.730054e-01, 8.730175e-01, 8.730295e-01, 8.730416e-01, 8.730535e-01, 8.730655e-01, 8.730776e-01, 8.730896e-01, 8.731016e-01, 8.731136e-01, 8.731257e-01, 8.731377e-01, 8.731498e-01, 8.731617e-01, 8.731737e-01, 8.731858e-01, 8.731978e-01, 8.732098e-01, 8.732218e-01, 8.732338e-01, 8.732458e-01, 8.732578e-01, 8.732699e-01, 8.732819e-01, 8.732939e-01, 8.733059e-01, 8.733179e-01, 8.733299e-01, 8.733420e-01, 8.733540e-01, 8.733660e-01, 8.733780e-01, 8.733901e-01, 8.734020e-01, 8.734140e-01, 8.734261e-01, 8.734381e-01, 8.734501e-01, 8.734621e-01, 8.734742e-01, 8.734861e-01, 8.734981e-01, 8.735102e-01, 8.735222e-01, 8.735342e-01, 8.735462e-01, 8.735583e-01, 8.735703e-01, 8.735822e-01, 8.735943e-01, 8.736063e-01, 8.736183e-01, 8.736303e-01, 8.736424e-01, 8.736544e-01, 8.736663e-01, 8.736784e-01, 8.736904e-01, 8.737024e-01, 8.737144e-01, 8.737265e-01, 8.737385e-01, 8.737504e-01, 8.737625e-01, 8.737745e-01, 8.737865e-01, 8.737985e-01, 8.738106e-01, 8.738226e-01, 8.738346e-01, 8.738466e-01, 8.738586e-01, 8.738706e-01, 8.738827e-01, 8.738947e-01, 8.739066e-01, 8.739187e-01, 8.739307e-01, 8.739427e-01, 8.739547e-01, 8.739668e-01, 8.739788e-01, 8.739907e-01, 8.740028e-01, 8.740148e-01, 8.740268e-01, 8.740388e-01, 8.740509e-01, 8.740628e-01, 8.740748e-01, 8.740869e-01, 8.740988e-01, 8.741109e-01, 8.741229e-01, 8.741348e-01, 8.741469e-01, 8.741589e-01, 8.741709e-01, 8.741829e-01, 8.741949e-01, 8.742069e-01, 8.742189e-01, 8.742310e-01, 8.742430e-01, 8.742549e-01, 8.742670e-01, 8.742790e-01, 8.742910e-01, 8.743030e-01, 8.743150e-01, 8.743270e-01, 8.743390e-01, 8.743510e-01, 8.743631e-01, 8.743750e-01, 8.743870e-01, 8.743991e-01, 8.744110e-01, 8.744231e-01, 8.744351e-01, 8.744470e-01, 8.744591e-01, 8.744711e-01, 8.744831e-01, 8.744951e-01, 8.745071e-01, 8.745191e-01, 8.745311e-01, 8.745431e-01, 8.745552e-01, 8.745672e-01, 8.745791e-01, 8.745912e-01, 8.746032e-01, 8.746152e-01, 8.746272e-01, 8.746392e-01, 8.746512e-01, 8.746632e-01, 8.746752e-01, 8.746873e-01, 8.746992e-01, 8.747112e-01, 8.747233e-01, 8.747352e-01, 8.747473e-01, 8.747593e-01, 8.747712e-01, 8.747833e-01, 8.747953e-01, 8.748073e-01, 8.748193e-01, 8.748313e-01, 8.748433e-01, 8.748553e-01, 8.748673e-01, 8.748794e-01, 8.748913e-01, 8.749033e-01, 8.749153e-01, 8.749273e-01, 8.749394e-01, 8.749513e-01, 8.749633e-01, 8.749753e-01, 8.749874e-01, 8.749993e-01, 8.750113e-01, 8.750234e-01, 8.750353e-01, 8.750474e-01, 8.750593e-01, 8.750713e-01, 8.750834e-01, 8.750954e-01, 8.751074e-01, 8.751193e-01, 8.751314e-01, 8.751433e-01, 8.751554e-01, 8.751674e-01, 8.751794e-01, 8.751914e-01, 8.752034e-01, 8.752154e-01, 8.752273e-01, 8.752394e-01, 8.752514e-01, 8.752634e-01, 8.752754e-01, 8.752874e-01, 8.752994e-01, 8.753114e-01, 8.753234e-01, 8.753354e-01, 8.753474e-01, 8.753594e-01, 8.753714e-01, 8.753834e-01, 8.753954e-01, 8.754074e-01, 8.754194e-01, 8.754314e-01, 8.754434e-01, 8.754554e-01, 8.754674e-01, 8.754794e-01, 8.754914e-01, 8.755034e-01, 8.755155e-01, 8.755274e-01, 8.755394e-01, 8.755514e-01, 8.755634e-01, 8.755754e-01, 8.755874e-01, 8.755994e-01, 8.756114e-01, 8.756233e-01, 8.756354e-01, 8.756474e-01, 8.756594e-01, 8.756713e-01, 8.756834e-01, 8.756953e-01, 8.757074e-01, 8.757193e-01, 8.757313e-01, 8.757433e-01, 8.757554e-01, 8.757674e-01, 8.757793e-01, 8.757914e-01, 8.758034e-01, 8.758154e-01, 8.758273e-01, 8.758394e-01, 8.758513e-01, 8.758634e-01, 8.758753e-01, 8.758873e-01, 8.758993e-01, 8.759114e-01, 8.759233e-01, 8.759353e-01, 8.759473e-01, 8.759593e-01, 8.759713e-01, 8.759833e-01, 8.759953e-01, 8.760072e-01, 8.760192e-01, 8.760312e-01, 8.760433e-01, 8.760552e-01, 8.760672e-01, 8.760792e-01, 8.760912e-01, 8.761032e-01, 8.761152e-01, 8.761272e-01, 8.761392e-01, 8.761511e-01, 8.761632e-01, 8.761752e-01, 8.761872e-01, 8.761991e-01, 8.762112e-01, 8.762231e-01, 8.762352e-01, 8.762471e-01, 8.762591e-01, 8.762711e-01, 8.762830e-01, 8.762951e-01, 8.763071e-01, 8.763191e-01, 8.763310e-01, 8.763431e-01, 8.763551e-01, 8.763671e-01, 8.763791e-01, 8.763910e-01, 8.764030e-01, 8.764150e-01, 8.764271e-01, 8.764390e-01, 8.764510e-01, 8.764630e-01, 8.764750e-01, 8.764870e-01, 8.764990e-01, 8.765110e-01, 8.765229e-01, 8.765349e-01, 8.765469e-01, 8.765590e-01, 8.765709e-01, 8.765829e-01, 8.765949e-01, 8.766068e-01, 8.766189e-01, 8.766308e-01, 8.766429e-01, 8.766548e-01, 8.766668e-01, 8.766788e-01, 8.766907e-01, 8.767028e-01, 8.767148e-01, 8.767268e-01, 8.767387e-01, 8.767507e-01, 8.767627e-01, 8.767747e-01, 8.767867e-01, 8.767987e-01, 8.768107e-01, 8.768227e-01, 8.768346e-01, 8.768467e-01, 8.768586e-01, 8.768706e-01, 8.768826e-01, 8.768945e-01, 8.769066e-01, 8.769186e-01, 8.769306e-01, 8.769425e-01, 8.769545e-01, 8.769665e-01, 8.769785e-01, 8.769906e-01, 8.770025e-01, 8.770145e-01, 8.770265e-01, 8.770384e-01, 8.770505e-01, 8.770624e-01, 8.770744e-01, 8.770864e-01, 8.770984e-01, 8.771103e-01, 8.771223e-01, 8.771343e-01, 8.771464e-01, 8.771583e-01, 8.771703e-01, 8.771823e-01, 8.771942e-01, 8.772062e-01, 8.772182e-01, 8.772302e-01, 8.772422e-01, 8.772542e-01, 8.772661e-01, 8.772781e-01, 8.772901e-01, 8.773021e-01, 8.773141e-01, 8.773261e-01, 8.773380e-01, 8.773500e-01, 8.773620e-01, 8.773741e-01, 8.773860e-01, 8.773980e-01, 8.774100e-01, 8.774220e-01, 8.774339e-01, 8.774459e-01, 8.774579e-01, 8.774698e-01, 8.774819e-01, 8.774939e-01, 8.775058e-01, 8.775178e-01, 8.775298e-01, 8.775417e-01, 8.775538e-01, 8.775657e-01, 8.775777e-01, 8.775897e-01, 8.776017e-01, 8.776136e-01, 8.776256e-01, 8.776376e-01, 8.776495e-01, 8.776616e-01, 8.776736e-01, 8.776855e-01, 8.776975e-01, 8.777095e-01, 8.777214e-01, 8.777335e-01, 8.777454e-01, 8.777574e-01, 8.777694e-01, 8.777814e-01, 8.777934e-01, 8.778054e-01, 8.778173e-01, 8.778293e-01, 8.778414e-01, 8.778533e-01, 8.778653e-01, 8.778772e-01, 8.778892e-01, 8.779012e-01, 8.779131e-01, 8.779252e-01, 8.779371e-01, 8.779491e-01, 8.779611e-01, 8.779731e-01, 8.779850e-01, 8.779970e-01, 8.780090e-01, 8.780209e-01, 8.780329e-01, 8.780450e-01, 8.780569e-01, 8.780689e-01, 8.780809e-01, 8.780928e-01, 8.781048e-01, 8.781167e-01, 8.781288e-01, 8.781407e-01, 8.781527e-01, 8.781646e-01, 8.781767e-01, 8.781887e-01, 8.782006e-01, 8.782126e-01, 8.782246e-01, 8.782365e-01, 8.782485e-01, 8.782606e-01, 8.782725e-01, 8.782845e-01, 8.782964e-01, 8.783084e-01, 8.783204e-01, 8.783323e-01, 8.783444e-01, 8.783563e-01, 8.783683e-01, 8.783802e-01, 8.783923e-01, 8.784042e-01, 8.784162e-01, 8.784281e-01, 8.784401e-01, 8.784521e-01, 8.784641e-01, 8.784760e-01, 8.784881e-01, 8.785000e-01, 8.785120e-01, 8.785239e-01, 8.785360e-01, 8.785479e-01, 8.785599e-01, 8.785718e-01, 8.785838e-01, 8.785958e-01, 8.786077e-01, 8.786197e-01, 8.786317e-01, 8.786437e-01, 8.786557e-01, 8.786676e-01, 8.786796e-01, 8.786916e-01, 8.787035e-01, 8.787155e-01, 8.787275e-01, 8.787395e-01, 8.787515e-01, 8.787634e-01, 8.787754e-01, 8.787873e-01, 8.787994e-01, 8.788113e-01, 8.788233e-01, 8.788352e-01, 8.788472e-01, 8.788592e-01, 8.788711e-01, 8.788831e-01, 8.788950e-01, 8.789071e-01, 8.789191e-01, 8.789310e-01, 8.789430e-01, 8.789549e-01, 8.789669e-01, 8.789789e-01, 8.789908e-01, 8.790028e-01, 8.790148e-01, 8.790268e-01, 8.790388e-01, 8.790507e-01, 8.790627e-01, 8.790746e-01, 8.790867e-01, 8.790986e-01, 8.791106e-01, 8.791225e-01, 8.791345e-01, 8.791464e-01, 8.791584e-01, 8.791704e-01, 8.791823e-01, 8.791943e-01, 8.792062e-01, 8.792183e-01, 8.792303e-01, 8.792422e-01, 8.792542e-01, 8.792661e-01, 8.792781e-01, 8.792901e-01, 8.793021e-01, 8.793140e-01, 8.793260e-01, 8.793379e-01, 8.793499e-01, 8.793619e-01, 8.793738e-01, 8.793858e-01, 8.793977e-01, 8.794097e-01, 8.794217e-01, 8.794337e-01, 8.794457e-01, 8.794576e-01, 8.794696e-01, 8.794815e-01, 8.794935e-01, 8.795055e-01, 8.795175e-01, 8.795294e-01, 8.795414e-01, 8.795533e-01, 8.795653e-01, 8.795772e-01, 8.795893e-01, 8.796012e-01, 8.796132e-01, 8.796251e-01, 8.796371e-01, 8.796490e-01, 8.796610e-01, 8.796729e-01, 8.796850e-01, 8.796969e-01, 8.797089e-01, 8.797209e-01, 8.797328e-01, 8.797448e-01, 8.797567e-01, 8.797687e-01, 8.797807e-01, 8.797926e-01, 8.798046e-01, 8.798165e-01, 8.798285e-01, 8.798404e-01, 8.798524e-01, 8.798643e-01, 8.798764e-01, 8.798884e-01, 8.799003e-01, 8.799123e-01, 8.799242e-01, 8.799362e-01, 8.799481e-01, 8.799601e-01, 8.799720e-01, 8.799841e-01, 8.799960e-01, 8.800080e-01, 8.800199e-01, 8.800319e-01, 8.800438e-01, 8.800558e-01, 8.800677e-01, 8.800797e-01, 8.800916e-01, 8.801036e-01, 8.801156e-01, 8.801275e-01, 8.801395e-01, 8.801515e-01, 8.801634e-01, 8.801754e-01, 8.801873e-01, 8.801993e-01, 8.802112e-01, 8.802232e-01, 8.802351e-01, 8.802472e-01, 8.802592e-01, 8.802711e-01, 8.802831e-01, 8.802950e-01, 8.803070e-01, 8.803189e-01, 8.803309e-01, 8.803428e-01, 8.803548e-01, 8.803667e-01, 8.803787e-01, 8.803906e-01, 8.804026e-01, 8.804146e-01, 8.804266e-01, 8.804385e-01, 8.804505e-01, 8.804624e-01, 8.804744e-01, 8.804863e-01, 8.804983e-01, 8.805102e-01, 8.805222e-01, 8.805342e-01, 8.805461e-01, 8.805581e-01, 8.805700e-01, 8.805820e-01, 8.805939e-01, 8.806059e-01, 8.806178e-01, 8.806298e-01, 8.806418e-01, 8.806537e-01, 8.806657e-01, 8.806776e-01, 8.806896e-01, 8.807015e-01, 8.807135e-01, 8.807255e-01, 8.807374e-01, 8.807494e-01, 8.807613e-01, 8.807733e-01, 8.807852e-01, 8.807972e-01, 8.808091e-01, 8.808211e-01, 8.808330e-01, 8.808450e-01, 8.808569e-01, 8.808689e-01, 8.808808e-01, 8.808928e-01, 8.809048e-01, 8.809167e-01, 8.809287e-01, 8.809406e-01, 8.809526e-01, 8.809645e-01, 8.809765e-01, 8.809884e-01, 8.810004e-01, 8.810123e-01, 8.810243e-01, 8.810362e-01, 8.810482e-01, 8.810601e-01, 8.810721e-01, 8.810841e-01, 8.810960e-01, 8.811080e-01, 8.811199e-01, 8.811319e-01, 8.811438e-01, 8.811558e-01, 8.811677e-01, 8.811797e-01, 8.811916e-01, 8.812036e-01, 8.812155e-01, 8.812275e-01, 8.812395e-01, 8.812514e-01, 8.812634e-01, 8.812753e-01, 8.812873e-01, 8.812992e-01, 8.813112e-01, 8.813231e-01, 8.813351e-01, 8.813470e-01, 8.813590e-01, 8.813709e-01, 8.813829e-01, 8.813948e-01, 8.814068e-01, 8.814188e-01, 8.814307e-01, 8.814427e-01, 8.814546e-01, 8.814666e-01, 8.814785e-01, 8.814903e-01, 8.815023e-01, 8.815143e-01, 8.815262e-01, 8.815382e-01, 8.815501e-01, 8.815621e-01, 8.815740e-01, 8.815860e-01, 8.815979e-01, 8.816099e-01, 8.816218e-01, 8.816338e-01, 8.816457e-01, 8.816577e-01, 8.816696e-01, 8.816816e-01, 8.816935e-01, 8.817055e-01, 8.817174e-01, 8.817294e-01, 8.817413e-01, 8.817533e-01, 8.817652e-01, 8.817772e-01, 8.817891e-01, 8.818011e-01, 8.818130e-01, 8.818250e-01, 8.818369e-01, 8.818489e-01, 8.818608e-01, 8.818728e-01, 8.818846e-01, 8.818966e-01, 8.819085e-01, 8.819205e-01, 8.819324e-01, 8.819444e-01, 8.819563e-01, 8.819683e-01, 8.819802e-01, 8.819922e-01, 8.820041e-01, 8.820161e-01, 8.820280e-01, 8.820400e-01, 8.820519e-01, 8.820639e-01, 8.820758e-01, 8.820878e-01, 8.820997e-01, 8.821117e-01, 8.821236e-01, 8.821356e-01, 8.821474e-01, 8.821594e-01, 8.821713e-01, 8.821833e-01, 8.821952e-01, 8.822072e-01, 8.822191e-01, 8.822311e-01, 8.822430e-01, 8.822549e-01, 8.822669e-01, 8.822788e-01, 8.822908e-01, 8.823027e-01, 8.823147e-01, 8.823267e-01, 8.823386e-01, 8.823504e-01, 8.823624e-01, 8.823743e-01, 8.823863e-01, 8.823982e-01, 8.824102e-01, 8.824221e-01, 8.824341e-01, 8.824460e-01, 8.824579e-01, 8.824699e-01, 8.824819e-01, 8.824938e-01, 8.825058e-01, 8.825177e-01, 8.825297e-01, 8.825415e-01, 8.825535e-01, 8.825654e-01, 8.825774e-01, 8.825893e-01, 8.826013e-01, 8.826132e-01, 8.826251e-01, 8.826371e-01, 8.826490e-01, 8.826610e-01, 8.826729e-01, 8.826849e-01, 8.826967e-01, 8.827087e-01, 8.827206e-01, 8.827326e-01, 8.827446e-01, 8.827565e-01, 8.827684e-01, 8.827803e-01, 8.827923e-01, 8.828042e-01, 8.828162e-01, 8.828281e-01, 8.828400e-01, 8.828520e-01, 8.828639e-01, 8.828759e-01, 8.828878e-01, 8.828998e-01, 8.829116e-01, 8.829236e-01, 8.829355e-01, 8.829475e-01, 8.829594e-01, 8.829713e-01, 8.829833e-01, 8.829952e-01, 8.830072e-01, 8.830191e-01, 8.830311e-01, 8.830429e-01, 8.830549e-01, 8.830668e-01, 8.830788e-01, 8.830907e-01, 8.831026e-01, 8.831146e-01, 8.831265e-01, 8.831385e-01, 8.831505e-01, 8.831623e-01, 8.831742e-01, 8.831862e-01, 8.831981e-01, 8.832101e-01, 8.832220e-01, 8.832339e-01, 8.832459e-01, 8.832578e-01, 8.832698e-01, 8.832816e-01, 8.832936e-01, 8.833055e-01, 8.833175e-01, 8.833294e-01, 8.833413e-01, 8.833533e-01, 8.833652e-01, 8.833772e-01, 8.833891e-01, 8.834010e-01, 8.834130e-01, 8.834249e-01, 8.834368e-01, 8.834487e-01, 8.834607e-01, 8.834726e-01, 8.834845e-01, 8.834965e-01, 8.835084e-01, 8.835204e-01, 8.835323e-01, 8.835442e-01, 8.835561e-01, 8.835681e-01, 8.835800e-01, 8.835919e-01, 8.836039e-01, 8.836158e-01, 8.836278e-01, 8.836396e-01, 8.836516e-01, 8.836635e-01, 8.836755e-01, 8.836874e-01, 8.836993e-01, 8.837113e-01, 8.837232e-01, 8.837351e-01, 8.837470e-01, 8.837590e-01, 8.837709e-01, 8.837828e-01, 8.837948e-01, 8.838067e-01, 8.838187e-01, 8.838305e-01, 8.838425e-01, 8.838544e-01, 8.838663e-01, 8.838782e-01, 8.838902e-01, 8.839022e-01, 8.839141e-01, 8.839260e-01, 8.839380e-01, 8.839499e-01, 8.839617e-01, 8.839737e-01, 8.839856e-01, 8.839976e-01, 8.840095e-01, 8.840215e-01, 8.840334e-01, 8.840452e-01, 8.840572e-01, 8.840691e-01, 8.840810e-01, 8.840930e-01, 8.841049e-01, 8.841169e-01, 8.841287e-01, 8.841407e-01, 8.841527e-01, 8.841645e-01, 8.841765e-01, 8.841884e-01, 8.842003e-01, 8.842123e-01, 8.842242e-01, 8.842362e-01, 8.842480e-01, 8.842600e-01, 8.842719e-01, 8.842838e-01, 8.842958e-01, 8.843077e-01, 8.843195e-01, 8.843315e-01, 8.843434e-01, 8.843554e-01, 8.843673e-01, 8.843793e-01, 8.843911e-01, 8.844030e-01, 8.844150e-01, 8.844269e-01, 8.844388e-01, 8.844508e-01, 8.844627e-01, 8.844746e-01, 8.844866e-01, 8.844985e-01, 8.845104e-01, 8.845223e-01, 8.845343e-01, 8.845462e-01, 8.845581e-01, 8.845700e-01, 8.845819e-01, 8.845939e-01, 8.846058e-01, 8.846177e-01, 8.846297e-01, 8.846415e-01, 8.846534e-01, 8.846654e-01, 8.846773e-01, 8.846893e-01, 8.847012e-01, 8.847131e-01, 8.847250e-01, 8.847370e-01, 8.847488e-01, 8.847608e-01, 8.847727e-01, 8.847846e-01, 8.847966e-01, 8.848085e-01, 8.848204e-01, 8.848323e-01, 8.848442e-01, 8.848562e-01, 8.848681e-01, 8.848799e-01, 8.848919e-01, 8.849039e-01, 8.849158e-01, 8.849277e-01, 8.849396e-01, 8.849515e-01, 8.849635e-01, 8.849753e-01, 8.849873e-01, 8.849992e-01, 8.850111e-01, 8.850231e-01, 8.850349e-01, 8.850469e-01, 8.850588e-01, 8.850707e-01, 8.850827e-01, 8.850946e-01, 8.851065e-01, 8.851184e-01, 8.851303e-01, 8.851423e-01, 8.851542e-01, 8.851660e-01, 8.851780e-01, 8.851899e-01, 8.852018e-01, 8.852138e-01, 8.852257e-01, 8.852376e-01, 8.852495e-01, 8.852614e-01, 8.852734e-01, 8.852853e-01, 8.852972e-01, 8.853090e-01, 8.853210e-01, 8.853330e-01, 8.853449e-01, 8.853568e-01, 8.853686e-01, 8.853806e-01, 8.853925e-01, 8.854044e-01, 8.854164e-01, 8.854282e-01, 8.854402e-01, 8.854521e-01, 8.854640e-01, 8.854760e-01, 8.854879e-01, 8.854998e-01, 8.855116e-01, 8.855236e-01, 8.855355e-01, 8.855475e-01, 8.855594e-01, 8.855712e-01, 8.855832e-01, 8.855951e-01, 8.856070e-01, 8.856189e-01, 8.856308e-01, 8.856427e-01, 8.856547e-01, 8.856666e-01, 8.856785e-01, 8.856905e-01, 8.857023e-01, 8.857142e-01, 8.857262e-01, 8.857381e-01, 8.857499e-01, 8.857619e-01, 8.857738e-01, 8.857857e-01, 8.857977e-01, 8.858095e-01, 8.858215e-01, 8.858334e-01, 8.858453e-01, 8.858572e-01, 8.858691e-01, 8.858810e-01, 8.858929e-01, 8.859048e-01, 8.859168e-01, 8.859288e-01, 8.859406e-01, 8.859525e-01, 8.859644e-01, 8.859764e-01, 8.859882e-01, 8.860002e-01, 8.860121e-01, 8.860240e-01, 8.860359e-01, 8.860478e-01, 8.860597e-01, 8.860716e-01, 8.860835e-01, 8.860955e-01, 8.861073e-01, 8.861193e-01, 8.861312e-01, 8.861431e-01, 8.861549e-01, 8.861669e-01, 8.861788e-01, 8.861907e-01, 8.862026e-01, 8.862146e-01, 8.862264e-01, 8.862384e-01, 8.862503e-01, 8.862622e-01, 8.862740e-01, 8.862860e-01, 8.862979e-01, 8.863099e-01, 8.863217e-01, 8.863336e-01, 8.863455e-01, 8.863575e-01, 8.863693e-01, 8.863813e-01, 8.863932e-01, 8.864051e-01, 8.864170e-01, 8.864290e-01, 8.864408e-01, 8.864527e-01, 8.864646e-01, 8.864766e-01, 8.864884e-01, 8.865004e-01, 8.865123e-01, 8.865242e-01, 8.865361e-01, 8.865480e-01, 8.865599e-01, 8.865718e-01, 8.865837e-01, 8.865957e-01, 8.866075e-01, 8.866194e-01, 8.866314e-01, 8.866432e-01, 8.866552e-01, 8.866671e-01, 8.866790e-01, 8.866909e-01, 8.867028e-01, 8.867147e-01, 8.867266e-01, 8.867385e-01, 8.867504e-01, 8.867623e-01, 8.867742e-01, 8.867862e-01, 8.867980e-01, 8.868099e-01, 8.868218e-01, 8.868338e-01, 8.868456e-01, 8.868576e-01, 8.868695e-01, 8.868814e-01, 8.868933e-01, 8.869051e-01, 8.869171e-01, 8.869290e-01, 8.869410e-01, 8.869528e-01, 8.869647e-01, 8.869766e-01, 8.869885e-01, 8.870004e-01, 8.870123e-01, 8.870242e-01, 8.870361e-01, 8.870480e-01, 8.870599e-01, 8.870718e-01, 8.870838e-01, 8.870956e-01, 8.871076e-01, 8.871195e-01, 8.871313e-01, 8.871433e-01, 8.871551e-01, 8.871671e-01, 8.871790e-01, 8.871908e-01, 8.872028e-01, 8.872147e-01, 8.872266e-01, 8.872384e-01, 8.872504e-01, 8.872623e-01, 8.872741e-01, 8.872861e-01, 8.872980e-01, 8.873099e-01, 8.873218e-01, 8.873336e-01, 8.873456e-01, 8.873575e-01, 8.873693e-01, 8.873813e-01, 8.873932e-01, 8.874051e-01, 8.874170e-01, 8.874288e-01, 8.874408e-01, 8.874527e-01, 8.874646e-01, 8.874765e-01, 8.874884e-01, 8.875003e-01, 8.875121e-01, 8.875241e-01, 8.875360e-01, 8.875479e-01, 8.875598e-01, 8.875717e-01, 8.875836e-01, 8.875955e-01, 8.876073e-01, 8.876193e-01, 8.876312e-01, 8.876430e-01, 8.876550e-01, 8.876669e-01, 8.876787e-01, 8.876907e-01, 8.877025e-01, 8.877144e-01, 8.877264e-01, 8.877382e-01, 8.877501e-01, 8.877621e-01, 8.877739e-01, 8.877859e-01, 8.877978e-01, 8.878096e-01, 8.878216e-01, 8.878334e-01, 8.878453e-01, 8.878573e-01, 8.878691e-01, 8.878810e-01, 8.878930e-01, 8.879048e-01, 8.879167e-01, 8.879286e-01, 8.879405e-01, 8.879523e-01, 8.879643e-01, 8.879762e-01, 8.879880e-01, 8.880000e-01, 8.880119e-01, 8.880237e-01, 8.880357e-01, 8.880476e-01, 8.880594e-01, 8.880714e-01, 8.880832e-01, 8.880951e-01, 8.881071e-01, 8.881189e-01, 8.881308e-01, 8.881428e-01, 8.881546e-01, 8.881665e-01, 8.881784e-01, 8.881903e-01, 8.882022e-01, 8.882141e-01, 8.882260e-01, 8.882378e-01, 8.882497e-01, 8.882617e-01, 8.882735e-01, 8.882854e-01, 8.882974e-01, 8.883092e-01, 8.883211e-01, 8.883330e-01, 8.883449e-01, 8.883567e-01, 8.883687e-01, 8.883806e-01, 8.883924e-01, 8.884043e-01, 8.884163e-01, 8.884282e-01, 8.884400e-01, 8.884520e-01, 8.884639e-01, 8.884757e-01, 8.884876e-01, 8.884995e-01, 8.885114e-01, 8.885233e-01, 8.885352e-01, 8.885471e-01, 8.885589e-01, 8.885708e-01, 8.885828e-01, 8.885946e-01, 8.886065e-01, 8.886185e-01, 8.886303e-01, 8.886422e-01, 8.886541e-01, 8.886660e-01, 8.886779e-01, 8.886898e-01, 8.887016e-01, 8.887135e-01, 8.887254e-01, 8.887373e-01, 8.887492e-01, 8.887611e-01, 8.887730e-01, 8.887848e-01, 8.887967e-01, 8.888087e-01, 8.888205e-01, 8.888324e-01, 8.888443e-01, 8.888562e-01, 8.888681e-01, 8.888800e-01, 8.888918e-01, 8.889037e-01, 8.889157e-01, 8.889275e-01, 8.889394e-01, 8.889513e-01, 8.889632e-01, 8.889750e-01, 8.889869e-01, 8.889989e-01, 8.890107e-01, 8.890226e-01, 8.890345e-01, 8.890464e-01, 8.890583e-01, 8.890702e-01, 8.890820e-01, 8.890940e-01, 8.891059e-01, 8.891177e-01, 8.891296e-01, 8.891414e-01, 8.891534e-01, 8.891653e-01, 8.891771e-01, 8.891890e-01, 8.892009e-01, 8.892128e-01, 8.892247e-01, 8.892366e-01, 8.892484e-01, 8.892604e-01, 8.892722e-01, 8.892841e-01, 8.892960e-01, 8.893079e-01, 8.893198e-01, 8.893316e-01, 8.893435e-01, 8.893554e-01, 8.893673e-01, 8.893792e-01, 8.893911e-01, 8.894029e-01, 8.894148e-01, 8.894267e-01, 8.894386e-01, 8.894505e-01, 8.894624e-01, 8.894742e-01, 8.894861e-01, 8.894981e-01, 8.895099e-01, 8.895218e-01, 8.895336e-01, 8.895455e-01, 8.895575e-01, 8.895693e-01, 8.895812e-01, 8.895931e-01, 8.896049e-01, 8.896168e-01, 8.896288e-01, 8.896406e-01, 8.896525e-01, 8.896644e-01, 8.896762e-01, 8.896882e-01, 8.897001e-01, 8.897119e-01, 8.897238e-01, 8.897356e-01, 8.897475e-01, 8.897595e-01, 8.897713e-01, 8.897832e-01, 8.897951e-01, 8.898069e-01, 8.898188e-01, 8.898306e-01, 8.898426e-01, 8.898545e-01, 8.898664e-01, 8.898782e-01, 8.898901e-01, 8.899019e-01, 8.899139e-01, 8.899258e-01, 8.899376e-01, 8.899495e-01, 8.899614e-01, 8.899732e-01, 8.899851e-01, 8.899971e-01, 8.900089e-01, 8.900208e-01, 8.900326e-01, 8.900445e-01, 8.900564e-01, 8.900682e-01, 8.900802e-01, 8.900921e-01, 8.901039e-01, 8.901158e-01, 8.901277e-01, 8.901395e-01, 8.901514e-01, 8.901633e-01, 8.901752e-01, 8.901871e-01, 8.901989e-01, 8.902108e-01, 8.902227e-01, 8.902346e-01, 8.902465e-01, 8.902583e-01, 8.902702e-01, 8.902821e-01, 8.902940e-01, 8.903059e-01, 8.903177e-01, 8.903296e-01, 8.903415e-01, 8.903533e-01, 8.903652e-01, 8.903772e-01, 8.903890e-01, 8.904009e-01, 8.904127e-01, 8.904246e-01, 8.904365e-01, 8.904483e-01, 8.904602e-01, 8.904721e-01, 8.904839e-01, 8.904959e-01, 8.905078e-01, 8.905196e-01, 8.905315e-01, 8.905433e-01, 8.905552e-01, 8.905671e-01, 8.905790e-01, 8.905908e-01, 8.906027e-01, 8.906146e-01, 8.906264e-01, 8.906384e-01, 8.906503e-01, 8.906621e-01, 8.906740e-01, 8.906859e-01, 8.906977e-01, 8.907096e-01, 8.907214e-01, 8.907333e-01, 8.907452e-01, 8.907570e-01, 8.907689e-01, 8.907808e-01, 8.907927e-01, 8.908046e-01, 8.908165e-01, 8.908283e-01, 8.908402e-01, 8.908521e-01, 8.908640e-01, 8.908758e-01, 8.908877e-01, 8.908995e-01, 8.909114e-01, 8.909233e-01, 8.909351e-01, 8.909470e-01, 8.909588e-01, 8.909708e-01, 8.909826e-01, 8.909945e-01, 8.910064e-01, 8.910183e-01, 8.910301e-01, 8.910421e-01, 8.910539e-01, 8.910658e-01, 8.910776e-01, 8.910895e-01, 8.911014e-01, 8.911132e-01, 8.911251e-01, 8.911369e-01, 8.911488e-01, 8.911607e-01, 8.911726e-01, 8.911844e-01, 8.911963e-01, 8.912082e-01, 8.912200e-01, 8.912319e-01, 8.912438e-01, 8.912556e-01, 8.912675e-01, 8.912793e-01, 8.912912e-01, 8.913031e-01, 8.913150e-01, 8.913268e-01, 8.913387e-01, 8.913506e-01, 8.913624e-01, 8.913743e-01, 8.913862e-01, 8.913980e-01, 8.914099e-01, 8.914217e-01, 8.914337e-01, 8.914455e-01, 8.914574e-01, 8.914692e-01, 8.914811e-01, 8.914930e-01, 8.915048e-01, 8.915167e-01, 8.915285e-01, 8.915404e-01, 8.915523e-01, 8.915642e-01, 8.915761e-01, 8.915879e-01, 8.915998e-01, 8.916116e-01, 8.916235e-01, 8.916354e-01, 8.916472e-01, 8.916591e-01, 8.916709e-01, 8.916828e-01, 8.916947e-01, 8.917066e-01, 8.917184e-01, 8.917303e-01, 8.917422e-01, 8.917540e-01, 8.917659e-01, 8.917778e-01, 8.917896e-01, 8.918015e-01, 8.918134e-01, 8.918253e-01, 8.918371e-01, 8.918490e-01, 8.918608e-01, 8.918727e-01, 8.918846e-01, 8.918964e-01, 8.919083e-01, 8.919201e-01, 8.919320e-01, 8.919438e-01, 8.919557e-01, 8.919675e-01, 8.919794e-01, 8.919913e-01, 8.920032e-01, 8.920150e-01, 8.920269e-01, 8.920388e-01, 8.920506e-01, 8.920625e-01, 8.920743e-01, 8.920862e-01, 8.920981e-01, 8.921099e-01, 8.921218e-01, 8.921337e-01, 8.921456e-01, 8.921574e-01, 8.921692e-01, 8.921810e-01, 8.921930e-01, 8.922048e-01, 8.922167e-01, 8.922285e-01, 8.922404e-01, 8.922523e-01, 8.922641e-01, 8.922760e-01, 8.922879e-01, 8.922997e-01, 8.923116e-01, 8.923234e-01, 8.923352e-01, 8.923471e-01, 8.923590e-01, 8.923708e-01, 8.923827e-01, 8.923946e-01, 8.924065e-01, 8.924183e-01, 8.924302e-01, 8.924420e-01, 8.924539e-01, 8.924657e-01, 8.924776e-01, 8.924894e-01, 8.925013e-01, 8.925132e-01, 8.925250e-01, 8.925369e-01, 8.925487e-01, 8.925607e-01, 8.925725e-01, 8.925843e-01, 8.925961e-01, 8.926080e-01, 8.926199e-01, 8.926318e-01, 8.926436e-01, 8.926555e-01, 8.926674e-01, 8.926792e-01, 8.926910e-01, 8.927029e-01, 8.927147e-01, 8.927266e-01, 8.927385e-01, 8.927503e-01, 8.927622e-01, 8.927740e-01, 8.927858e-01, 8.927977e-01, 8.928096e-01, 8.928214e-01, 8.928333e-01, 8.928452e-01, 8.928570e-01, 8.928689e-01, 8.928807e-01, 8.928925e-01, 8.929044e-01, 8.929163e-01, 8.929282e-01, 8.929400e-01, 8.929519e-01, 8.929636e-01, 8.929756e-01, 8.929874e-01, 8.929993e-01, 8.930112e-01, 8.930230e-01, 8.930349e-01, 8.930467e-01, 8.930585e-01, 8.930704e-01, 8.930823e-01, 8.930941e-01, 8.931060e-01, 8.931178e-01, 8.931296e-01, 8.931415e-01, 8.931534e-01, 8.931652e-01, 8.931771e-01, 8.931890e-01, 8.932008e-01, 8.932126e-01, 8.932245e-01, 8.932363e-01, 8.932482e-01, 8.932601e-01, 8.932719e-01, 8.932837e-01, 8.932956e-01, 8.933074e-01, 8.933193e-01, 8.933311e-01, 8.933430e-01, 8.933548e-01, 8.933667e-01, 8.933786e-01, 8.933905e-01, 8.934022e-01, 8.934141e-01, 8.934259e-01, 8.934378e-01, 8.934497e-01, 8.934615e-01, 8.934733e-01, 8.934852e-01, 8.934970e-01, 8.935090e-01, 8.935208e-01, 8.935326e-01, 8.935444e-01, 8.935563e-01, 8.935682e-01, 8.935801e-01, 8.935918e-01, 8.936037e-01, 8.936156e-01, 8.936275e-01, 8.936393e-01, 8.936511e-01, 8.936629e-01, 8.936749e-01, 8.936867e-01, 8.936985e-01, 8.937103e-01, 8.937222e-01, 8.937341e-01, 8.937460e-01, 8.937577e-01, 8.937696e-01, 8.937814e-01, 8.937933e-01, 8.938051e-01, 8.938169e-01, 8.938288e-01, 8.938407e-01, 8.938526e-01, 8.938643e-01, 8.938762e-01, 8.938881e-01, 8.938999e-01, 8.939117e-01, 8.939236e-01, 8.939354e-01, 8.939473e-01, 8.939592e-01, 8.939710e-01, 8.939828e-01, 8.939947e-01, 8.940066e-01, 8.940184e-01, 8.940302e-01, 8.940421e-01, 8.940539e-01, 8.940657e-01, 8.940776e-01, 8.940895e-01, 8.941013e-01, 8.941131e-01, 8.941250e-01, 8.941368e-01, 8.941487e-01, 8.941605e-01, 8.941724e-01, 8.941842e-01, 8.941961e-01, 8.942079e-01, 8.942198e-01, 8.942316e-01, 8.942434e-01, 8.942553e-01, 8.942671e-01, 8.942790e-01, 8.942908e-01, 8.943027e-01, 8.943145e-01, 8.943264e-01, 8.943381e-01, 8.943501e-01, 8.943619e-01, 8.943738e-01, 8.943855e-01, 8.943974e-01, 8.944093e-01, 8.944210e-01, 8.944329e-01, 8.944448e-01, 8.944567e-01, 8.944684e-01, 8.944803e-01, 8.944921e-01, 8.945040e-01, 8.945158e-01, 8.945277e-01, 8.945395e-01, 8.945513e-01, 8.945632e-01, 8.945751e-01, 8.945869e-01, 8.945987e-01, 8.946106e-01, 8.946224e-01, 8.946342e-01, 8.946461e-01, 8.946580e-01, 8.946698e-01, 8.946816e-01, 8.946935e-01, 8.947052e-01, 8.947171e-01, 8.947290e-01, 8.947408e-01, 8.947526e-01, 8.947645e-01, 8.947763e-01, 8.947881e-01, 8.948000e-01, 8.948118e-01, 8.948237e-01, 8.948355e-01, 8.948474e-01, 8.948592e-01, 8.948711e-01, 8.948829e-01, 8.948947e-01, 8.949066e-01, 8.949184e-01, 8.949302e-01, 8.949421e-01, 8.949540e-01, 8.949657e-01, 8.949776e-01, 8.949894e-01, 8.950012e-01, 8.950131e-01, 8.950250e-01, 8.950368e-01, 8.950486e-01, 8.950605e-01, 8.950723e-01, 8.950841e-01, 8.950960e-01, 8.951078e-01, 8.951197e-01, 8.951314e-01, 8.951433e-01, 8.951552e-01, 8.951669e-01, 8.951788e-01, 8.951907e-01, 8.952025e-01, 8.952143e-01, 8.952262e-01, 8.952380e-01, 8.952498e-01, 8.952617e-01, 8.952735e-01, 8.952854e-01, 8.952971e-01, 8.953090e-01, 8.953209e-01, 8.953326e-01, 8.953445e-01, 8.953564e-01, 8.953682e-01, 8.953800e-01, 8.953919e-01, 8.954037e-01, 8.954155e-01, 8.954273e-01, 8.954392e-01, 8.954511e-01, 8.954628e-01, 8.954747e-01, 8.954865e-01, 8.954983e-01, 8.955102e-01, 8.955220e-01, 8.955339e-01, 8.955457e-01, 8.955575e-01, 8.955694e-01, 8.955812e-01, 8.955930e-01, 8.956049e-01, 8.956167e-01, 8.956286e-01, 8.956403e-01, 8.956522e-01, 8.956640e-01, 8.956758e-01, 8.956877e-01, 8.956995e-01, 8.957114e-01, 8.957232e-01, 8.957350e-01, 8.957469e-01, 8.957586e-01, 8.957705e-01, 8.957824e-01, 8.957942e-01, 8.958060e-01, 8.958178e-01, 8.958297e-01, 8.958415e-01, 8.958533e-01, 8.958652e-01, 8.958770e-01, 8.958889e-01, 8.959006e-01, 8.959125e-01, 8.959243e-01, 8.959361e-01, 8.959480e-01, 8.959598e-01, 8.959717e-01, 8.959835e-01, 8.959953e-01, 8.960072e-01, 8.960189e-01, 8.960308e-01, 8.960426e-01, 8.960544e-01, 8.960662e-01, 8.960781e-01, 8.960899e-01, 8.961018e-01, 8.961136e-01, 8.961254e-01, 8.961373e-01, 8.961490e-01, 8.961609e-01, 8.961727e-01, 8.961846e-01, 8.961964e-01, 8.962082e-01, 8.962201e-01, 8.962319e-01, 8.962438e-01, 8.962555e-01, 8.962674e-01, 8.962792e-01, 8.962910e-01, 8.963028e-01, 8.963147e-01, 8.963264e-01, 8.963383e-01, 8.963502e-01, 8.963619e-01, 8.963738e-01, 8.963856e-01, 8.963975e-01, 8.964093e-01, 8.964211e-01, 8.964329e-01, 8.964448e-01, 8.964565e-01, 8.964684e-01, 8.964802e-01, 8.964921e-01, 8.965039e-01, 8.965157e-01, 8.965275e-01, 8.965394e-01, 8.965511e-01, 8.965630e-01, 8.965748e-01, 8.965867e-01, 8.965985e-01, 8.966103e-01, 8.966222e-01, 8.966340e-01, 8.966458e-01, 8.966576e-01, 8.966694e-01, 8.966812e-01, 8.966931e-01, 8.967049e-01, 8.967168e-01, 8.967286e-01, 8.967404e-01, 8.967522e-01, 8.967640e-01, 8.967758e-01, 8.967877e-01, 8.967995e-01, 8.968112e-01, 8.968231e-01, 8.968349e-01, 8.968468e-01, 8.968586e-01, 8.968704e-01, 8.968822e-01, 8.968941e-01, 8.969058e-01, 8.969177e-01, 8.969295e-01, 8.969414e-01, 8.969532e-01, 8.969650e-01, 8.969768e-01, 8.969887e-01, 8.970004e-01, 8.970123e-01, 8.970241e-01, 8.970360e-01, 8.970478e-01, 8.970596e-01, 8.970714e-01, 8.970832e-01, 8.970950e-01, 8.971068e-01, 8.971187e-01, 8.971305e-01, 8.971424e-01, 8.971541e-01, 8.971660e-01, 8.971778e-01, 8.971896e-01, 8.972014e-01, 8.972133e-01, 8.972251e-01, 8.972368e-01, 8.972487e-01, 8.972605e-01, 8.972723e-01, 8.972842e-01, 8.972960e-01, 8.973078e-01, 8.973197e-01, 8.973314e-01, 8.973432e-01, 8.973551e-01, 8.973669e-01, 8.973787e-01, 8.973905e-01, 8.974023e-01, 8.974141e-01, 8.974259e-01, 8.974378e-01, 8.974496e-01, 8.974615e-01, 8.974732e-01, 8.974851e-01, 8.974969e-01, 8.975087e-01, 8.975205e-01, 8.975323e-01, 8.975441e-01, 8.975559e-01, 8.975678e-01, 8.975796e-01, 8.975914e-01, 8.976033e-01, 8.976150e-01, 8.976269e-01, 8.976387e-01, 8.976505e-01, 8.976623e-01, 8.976741e-01, 8.976859e-01, 8.976977e-01, 8.977096e-01, 8.977214e-01, 8.977332e-01, 8.977451e-01, 8.977568e-01, 8.977687e-01, 8.977805e-01, 8.977923e-01, 8.978041e-01, 8.978159e-01, 8.978277e-01, 8.978395e-01, 8.978513e-01, 8.978632e-01, 8.978750e-01, 8.978868e-01, 8.978986e-01, 8.979104e-01, 8.979223e-01, 8.979341e-01, 8.979458e-01, 8.979577e-01, 8.979695e-01, 8.979813e-01, 8.979931e-01, 8.980049e-01, 8.980168e-01, 8.980286e-01, 8.980404e-01, 8.980522e-01, 8.980640e-01, 8.980759e-01, 8.980876e-01, 8.980994e-01, 8.981113e-01, 8.981231e-01, 8.981348e-01, 8.981467e-01, 8.981585e-01, 8.981703e-01, 8.981822e-01, 8.981939e-01, 8.982058e-01, 8.982176e-01, 8.982294e-01, 8.982412e-01, 8.982530e-01, 8.982648e-01, 8.982766e-01, 8.982884e-01, 8.983002e-01, 8.983121e-01, 8.983238e-01, 8.983356e-01, 8.983475e-01, 8.983593e-01, 8.983710e-01, 8.983830e-01, 8.983947e-01, 8.984065e-01, 8.984184e-01, 8.984302e-01, 8.984419e-01, 8.984538e-01, 8.984656e-01, 8.984774e-01, 8.984892e-01, 8.985010e-01, 8.985128e-01, 8.985246e-01, 8.985364e-01, 8.985482e-01, 8.985600e-01, 8.985718e-01, 8.985837e-01, 8.985955e-01, 8.986073e-01, 8.986191e-01, 8.986309e-01, 8.986427e-01, 8.986545e-01, 8.986664e-01, 8.986781e-01, 8.986899e-01, 8.987018e-01, 8.987136e-01, 8.987253e-01, 8.987371e-01, 8.987490e-01, 8.987608e-01, 8.987725e-01, 8.987844e-01, 8.987962e-01, 8.988080e-01, 8.988199e-01, 8.988317e-01, 8.988434e-01, 8.988553e-01, 8.988671e-01, 8.988789e-01, 8.988906e-01, 8.989025e-01, 8.989143e-01, 8.989261e-01, 8.989379e-01, 8.989497e-01, 8.989615e-01, 8.989733e-01, 8.989851e-01, 8.989969e-01, 8.990087e-01, 8.990206e-01, 8.990324e-01, 8.990441e-01, 8.990559e-01, 8.990678e-01, 8.990796e-01, 8.990913e-01, 8.991031e-01, 8.991150e-01, 8.991268e-01, 8.991385e-01, 8.991504e-01, 8.991622e-01, 8.991740e-01, 8.991858e-01, 8.991976e-01, 8.992094e-01, 8.992212e-01, 8.992330e-01, 8.992448e-01, 8.992566e-01, 8.992684e-01, 8.992802e-01, 8.992921e-01, 8.993038e-01, 8.993156e-01, 8.993274e-01, 8.993393e-01, 8.993510e-01, 8.993628e-01, 8.993746e-01, 8.993865e-01, 8.993982e-01, 8.994100e-01, 8.994218e-01, 8.994337e-01, 8.994454e-01, 8.994572e-01, 8.994690e-01, 8.994809e-01, 8.994926e-01, 8.995044e-01, 8.995162e-01, 8.995281e-01, 8.995399e-01, 8.995516e-01, 8.995634e-01, 8.995752e-01, 8.995871e-01, 8.995988e-01, 8.996106e-01, 8.996224e-01, 8.996343e-01, 8.996460e-01, 8.996578e-01, 8.996696e-01, 8.996814e-01, 8.996933e-01, 8.997051e-01, 8.997169e-01, 8.997286e-01, 8.997405e-01, 8.997523e-01, 8.997641e-01, 8.997758e-01, 8.997876e-01, 8.997995e-01, 8.998113e-01, 8.998230e-01, 8.998348e-01, 8.998466e-01, 8.998585e-01, 8.998702e-01, 8.998820e-01, 8.998938e-01, 8.999056e-01, 8.999174e-01, 8.999292e-01, 8.999410e-01, 8.999528e-01, 8.999646e-01, 8.999764e-01, 8.999882e-01, 9.000000e-01, 9.000118e-01, 9.000236e-01, 9.000353e-01, 9.000472e-01, 9.000590e-01, 9.000708e-01, 9.000825e-01, 9.000943e-01, 9.001062e-01, 9.001180e-01, 9.001297e-01, 9.001415e-01, 9.001533e-01, 9.001651e-01, 9.001769e-01, 9.001887e-01, 9.002005e-01, 9.002123e-01, 9.002241e-01, 9.002359e-01, 9.002478e-01, 9.002595e-01, 9.002713e-01, 9.002831e-01, 9.002948e-01, 9.003066e-01, 9.003185e-01, 9.003303e-01, 9.003420e-01, 9.003538e-01, 9.003657e-01, 9.003774e-01, 9.003892e-01, 9.004011e-01, 9.004129e-01, 9.004246e-01, 9.004364e-01, 9.004482e-01, 9.004599e-01, 9.004718e-01, 9.004836e-01, 9.004954e-01, 9.005072e-01, 9.005190e-01, 9.005308e-01, 9.005425e-01, 9.005543e-01, 9.005662e-01, 9.005780e-01, 9.005897e-01, 9.006015e-01, 9.006133e-01, 9.006251e-01, 9.006369e-01, 9.006487e-01, 9.006605e-01, 9.006723e-01, 9.006841e-01, 9.006959e-01, 9.007076e-01, 9.007194e-01, 9.007312e-01, 9.007429e-01, 9.007548e-01, 9.007666e-01, 9.007784e-01, 9.007902e-01, 9.008020e-01, 9.008138e-01, 9.008255e-01, 9.008373e-01, 9.008491e-01, 9.008610e-01, 9.008727e-01, 9.008845e-01, 9.008963e-01, 9.009081e-01, 9.009199e-01, 9.009317e-01, 9.009434e-01, 9.009552e-01, 9.009670e-01, 9.009789e-01, 9.009906e-01, 9.010024e-01, 9.010142e-01, 9.010260e-01, 9.010378e-01, 9.010495e-01, 9.010613e-01, 9.010731e-01, 9.010848e-01, 9.010966e-01, 9.011085e-01, 9.011203e-01, 9.011320e-01, 9.011438e-01, 9.011557e-01, 9.011674e-01, 9.011792e-01, 9.011910e-01, 9.012027e-01, 9.012145e-01, 9.012263e-01, 9.012381e-01, 9.012499e-01, 9.012617e-01, 9.012735e-01, 9.012853e-01, 9.012971e-01, 9.013089e-01, 9.013206e-01, 9.013324e-01, 9.013442e-01, 9.013560e-01, 9.013678e-01, 9.013796e-01, 9.013913e-01, 9.014031e-01, 9.014149e-01, 9.014267e-01, 9.014385e-01, 9.014502e-01, 9.014621e-01, 9.014739e-01, 9.014857e-01, 9.014974e-01, 9.015092e-01, 9.015210e-01, 9.015328e-01, 9.015446e-01, 9.015564e-01, 9.015681e-01, 9.015799e-01, 9.015917e-01, 9.016035e-01, 9.016153e-01, 9.016271e-01, 9.016388e-01, 9.016506e-01, 9.016624e-01, 9.016742e-01, 9.016860e-01, 9.016978e-01, 9.017095e-01, 9.017213e-01, 9.017330e-01, 9.017448e-01, 9.017566e-01, 9.017684e-01, 9.017802e-01, 9.017920e-01, 9.018037e-01, 9.018155e-01, 9.018273e-01, 9.018391e-01, 9.018509e-01, 9.018627e-01, 9.018745e-01, 9.018863e-01, 9.018981e-01, 9.019099e-01, 9.019216e-01, 9.019334e-01, 9.019452e-01, 9.019570e-01, 9.019688e-01, 9.019806e-01, 9.019923e-01, 9.020041e-01, 9.020159e-01, 9.020277e-01, 9.020395e-01, 9.020512e-01, 9.020630e-01, 9.020747e-01, 9.020865e-01, 9.020983e-01, 9.021100e-01, 9.021218e-01, 9.021336e-01, 9.021454e-01, 9.021572e-01, 9.021689e-01, 9.021807e-01, 9.021925e-01, 9.022043e-01, 9.022161e-01, 9.022279e-01, 9.022396e-01, 9.022514e-01, 9.022632e-01, 9.022750e-01, 9.022868e-01, 9.022986e-01, 9.023103e-01, 9.023221e-01, 9.023339e-01, 9.023457e-01, 9.023575e-01, 9.023693e-01, 9.023810e-01, 9.023928e-01, 9.024045e-01, 9.024163e-01, 9.024282e-01, 9.024399e-01, 9.024517e-01, 9.024635e-01, 9.024752e-01, 9.024870e-01, 9.024987e-01, 9.025105e-01, 9.025223e-01, 9.025341e-01, 9.025459e-01, 9.025576e-01, 9.025694e-01, 9.025812e-01, 9.025930e-01, 9.026048e-01, 9.026166e-01, 9.026283e-01, 9.026401e-01, 9.026519e-01, 9.026636e-01, 9.026754e-01, 9.026871e-01, 9.026989e-01, 9.027107e-01, 9.027225e-01, 9.027343e-01, 9.027460e-01, 9.027578e-01, 9.027696e-01, 9.027814e-01, 9.027932e-01, 9.028050e-01, 9.028167e-01, 9.028285e-01, 9.028402e-01, 9.028520e-01, 9.028637e-01, 9.028755e-01, 9.028873e-01, 9.028991e-01, 9.029109e-01, 9.029227e-01, 9.029344e-01, 9.029462e-01, 9.029580e-01, 9.029697e-01, 9.029815e-01, 9.029933e-01, 9.030051e-01, 9.030168e-01, 9.030286e-01, 9.030404e-01, 9.030522e-01, 9.030640e-01, 9.030758e-01, 9.030874e-01, 9.030992e-01, 9.031110e-01, 9.031228e-01, 9.031346e-01, 9.031463e-01, 9.031581e-01, 9.031699e-01, 9.031817e-01, 9.031934e-01, 9.032052e-01, 9.032170e-01, 9.032287e-01, 9.032405e-01, 9.032523e-01, 9.032640e-01, 9.032758e-01, 9.032876e-01, 9.032993e-01, 9.033111e-01, 9.033229e-01, 9.033347e-01, 9.033464e-01, 9.033582e-01, 9.033700e-01, 9.033817e-01, 9.033934e-01, 9.034052e-01, 9.034171e-01, 9.034288e-01, 9.034406e-01, 9.034524e-01, 9.034641e-01, 9.034759e-01, 9.034876e-01, 9.034994e-01, 9.035112e-01, 9.035230e-01, 9.035348e-01, 9.035465e-01, 9.035583e-01, 9.035700e-01, 9.035818e-01, 9.035936e-01, 9.036053e-01, 9.036171e-01, 9.036288e-01, 9.036406e-01, 9.036524e-01, 9.036642e-01, 9.036760e-01, 9.036877e-01, 9.036995e-01, 9.037112e-01, 9.037230e-01, 9.037348e-01, 9.037465e-01, 9.037583e-01, 9.037700e-01, 9.037818e-01, 9.037936e-01, 9.038054e-01, 9.038172e-01, 9.038289e-01, 9.038406e-01, 9.038524e-01, 9.038642e-01, 9.038759e-01, 9.038877e-01, 9.038994e-01, 9.039112e-01, 9.039230e-01, 9.039348e-01, 9.039466e-01, 9.039584e-01, 9.039701e-01, 9.039818e-01, 9.039936e-01, 9.040054e-01, 9.040172e-01, 9.040289e-01, 9.040406e-01, 9.040524e-01, 9.040642e-01, 9.040760e-01, 9.040877e-01, 9.040995e-01, 9.041113e-01, 9.041230e-01, 9.041348e-01, 9.041465e-01, 9.041583e-01, 9.041700e-01, 9.041818e-01, 9.041936e-01, 9.042053e-01, 9.042171e-01, 9.042289e-01, 9.042407e-01, 9.042524e-01, 9.042642e-01, 9.042759e-01, 9.042877e-01, 9.042995e-01, 9.043112e-01, 9.043230e-01, 9.043347e-01, 9.043465e-01, 9.043582e-01, 9.043700e-01, 9.043818e-01, 9.043936e-01, 9.044054e-01, 9.044170e-01, 9.044288e-01, 9.044406e-01, 9.044524e-01, 9.044641e-01, 9.044759e-01, 9.044876e-01, 9.044994e-01, 9.045111e-01, 9.045229e-01, 9.045346e-01, 9.045464e-01, 9.045581e-01, 9.045699e-01, 9.045817e-01, 9.045935e-01, 9.046052e-01, 9.046170e-01, 9.046288e-01, 9.046405e-01, 9.046522e-01, 9.046640e-01, 9.046758e-01, 9.046876e-01, 9.046993e-01, 9.047110e-01, 9.047228e-01, 9.047346e-01, 9.047463e-01, 9.047581e-01, 9.047698e-01, 9.047816e-01, 9.047933e-01, 9.048051e-01, 9.048169e-01, 9.048287e-01, 9.048404e-01, 9.048522e-01, 9.048640e-01, 9.048756e-01, 9.048874e-01, 9.048992e-01, 9.049110e-01, 9.049227e-01, 9.049345e-01, 9.049462e-01, 9.049579e-01, 9.049697e-01, 9.049815e-01, 9.049932e-01, 9.050050e-01, 9.050167e-01, 9.050285e-01, 9.050402e-01, 9.050520e-01, 9.050637e-01, 9.050756e-01, 9.050872e-01, 9.050990e-01, 9.051108e-01, 9.051225e-01, 9.051343e-01, 9.051461e-01, 9.051577e-01, 9.051695e-01, 9.051813e-01, 9.051931e-01, 9.052048e-01, 9.052166e-01, 9.052284e-01, 9.052401e-01, 9.052519e-01, 9.052636e-01, 9.052753e-01, 9.052871e-01, 9.052989e-01, 9.053106e-01, 9.053224e-01, 9.053341e-01, 9.053459e-01, 9.053576e-01, 9.053694e-01, 9.053811e-01, 9.053929e-01, 9.054046e-01, 9.054164e-01, 9.054281e-01, 9.054399e-01, 9.054517e-01, 9.054634e-01, 9.054751e-01, 9.054869e-01, 9.054986e-01, 9.055104e-01, 9.055222e-01, 9.055339e-01, 9.055457e-01, 9.055575e-01, 9.055691e-01, 9.055809e-01, 9.055927e-01, 9.056044e-01, 9.056162e-01, 9.056280e-01, 9.056396e-01, 9.056515e-01, 9.056631e-01, 9.056749e-01, 9.056867e-01, 9.056984e-01, 9.057102e-01, 9.057220e-01, 9.057336e-01, 9.057454e-01, 9.057572e-01, 9.057689e-01, 9.057807e-01, 9.057925e-01, 9.058042e-01, 9.058160e-01, 9.058276e-01, 9.058394e-01, 9.058512e-01, 9.058629e-01, 9.058747e-01, 9.058865e-01, 9.058982e-01, 9.059100e-01, 9.059216e-01, 9.059334e-01, 9.059452e-01, 9.059569e-01, 9.059687e-01, 9.059805e-01, 9.059922e-01, 9.060039e-01, 9.060156e-01, 9.060274e-01, 9.060392e-01, 9.060509e-01, 9.060627e-01, 9.060744e-01, 9.060861e-01, 9.060979e-01, 9.061096e-01, 9.061214e-01, 9.061332e-01, 9.061449e-01, 9.061567e-01, 9.061683e-01, 9.061801e-01, 9.061919e-01, 9.062036e-01, 9.062154e-01, 9.062271e-01, 9.062389e-01, 9.062506e-01, 9.062623e-01, 9.062741e-01, 9.062858e-01, 9.062976e-01, 9.063092e-01, 9.063210e-01, 9.063329e-01, 9.063445e-01, 9.063563e-01, 9.063680e-01, 9.063798e-01, 9.063916e-01, 9.064032e-01, 9.064150e-01, 9.064267e-01, 9.064385e-01, 9.064502e-01, 9.064620e-01, 9.064738e-01, 9.064854e-01, 9.064972e-01, 9.065089e-01, 9.065207e-01, 9.065324e-01, 9.065442e-01, 9.065560e-01, 9.065677e-01, 9.065794e-01, 9.065912e-01, 9.066029e-01, 9.066146e-01, 9.066264e-01, 9.066382e-01, 9.066499e-01, 9.066617e-01, 9.066734e-01, 9.066851e-01, 9.066969e-01, 9.067086e-01, 9.067203e-01, 9.067321e-01, 9.067439e-01, 9.067556e-01, 9.067674e-01, 9.067791e-01, 9.067908e-01, 9.068025e-01, 9.068143e-01, 9.068260e-01, 9.068378e-01, 9.068494e-01, 9.068612e-01, 9.068729e-01, 9.068847e-01, 9.068965e-01, 9.069082e-01, 9.069200e-01, 9.069317e-01, 9.069434e-01, 9.069551e-01, 9.069669e-01, 9.069786e-01, 9.069904e-01, 9.070021e-01, 9.070139e-01, 9.070256e-01, 9.070374e-01, 9.070491e-01, 9.070609e-01, 9.070725e-01, 9.070843e-01, 9.070960e-01, 9.071078e-01, 9.071195e-01, 9.071313e-01, 9.071429e-01, 9.071547e-01, 9.071664e-01, 9.071782e-01, 9.071899e-01, 9.072017e-01, 9.072134e-01, 9.072252e-01, 9.072369e-01, 9.072486e-01, 9.072604e-01, 9.072721e-01, 9.072839e-01, 9.072956e-01, 9.073073e-01, 9.073191e-01, 9.073308e-01, 9.073426e-01, 9.073542e-01, 9.073660e-01, 9.073777e-01, 9.073895e-01, 9.074012e-01, 9.074129e-01, 9.074247e-01, 9.074364e-01, 9.074481e-01, 9.074599e-01, 9.074716e-01, 9.074834e-01, 9.074951e-01, 9.075069e-01, 9.075186e-01, 9.075304e-01, 9.075420e-01, 9.075539e-01, 9.075655e-01, 9.075773e-01, 9.075890e-01, 9.076007e-01, 9.076124e-01, 9.076242e-01, 9.076359e-01, 9.076476e-01, 9.076594e-01, 9.076711e-01, 9.076829e-01, 9.076946e-01, 9.077064e-01, 9.077181e-01, 9.077299e-01, 9.077415e-01, 9.077532e-01, 9.077650e-01, 9.077767e-01, 9.077885e-01, 9.078002e-01, 9.078119e-01, 9.078237e-01, 9.078354e-01, 9.078472e-01, 9.078588e-01, 9.078706e-01, 9.078823e-01, 9.078941e-01, 9.079058e-01, 9.079176e-01, 9.079292e-01, 9.079410e-01, 9.079527e-01, 9.079644e-01, 9.079762e-01, 9.079879e-01, 9.079997e-01, 9.080114e-01, 9.080232e-01, 9.080349e-01, 9.080465e-01, 9.080583e-01, 9.080700e-01, 9.080818e-01, 9.080935e-01, 9.081053e-01, 9.081170e-01, 9.081287e-01, 9.081405e-01, 9.081522e-01, 9.081639e-01, 9.081756e-01, 9.081873e-01, 9.081991e-01, 9.082108e-01, 9.082226e-01, 9.082343e-01, 9.082460e-01, 9.082577e-01, 9.082695e-01, 9.082812e-01, 9.082929e-01, 9.083046e-01, 9.083164e-01, 9.083281e-01, 9.083399e-01, 9.083515e-01, 9.083633e-01, 9.083750e-01, 9.083867e-01, 9.083985e-01, 9.084102e-01, 9.084219e-01, 9.084337e-01, 9.084454e-01, 9.084572e-01, 9.084688e-01, 9.084805e-01, 9.084923e-01, 9.085040e-01, 9.085157e-01, 9.085275e-01, 9.085392e-01, 9.085510e-01, 9.085627e-01, 9.085743e-01, 9.085861e-01, 9.085978e-01, 9.086095e-01, 9.086213e-01, 9.086330e-01, 9.086448e-01, 9.086565e-01, 9.086682e-01, 9.086800e-01, 9.086916e-01, 9.087033e-01, 9.087151e-01, 9.087268e-01, 9.087386e-01, 9.087503e-01, 9.087620e-01, 9.087738e-01, 9.087855e-01, 9.087971e-01, 9.088089e-01, 9.088206e-01, 9.088323e-01, 9.088441e-01, 9.088558e-01, 9.088675e-01, 9.088793e-01, 9.088910e-01, 9.089027e-01, 9.089144e-01, 9.089261e-01, 9.089379e-01, 9.089496e-01, 9.089614e-01, 9.089730e-01, 9.089848e-01, 9.089965e-01, 9.090082e-01, 9.090199e-01, 9.090317e-01, 9.090434e-01, 9.090552e-01, 9.090669e-01, 9.090785e-01, 9.090903e-01, 9.091020e-01, 9.091137e-01, 9.091255e-01, 9.091372e-01, 9.091489e-01, 9.091607e-01, 9.091724e-01, 9.091840e-01, 9.091958e-01, 9.092075e-01, 9.092192e-01, 9.092310e-01, 9.092427e-01, 9.092544e-01, 9.092662e-01, 9.092779e-01, 9.092895e-01, 9.093013e-01, 9.093130e-01, 9.093247e-01, 9.093364e-01, 9.093482e-01, 9.093599e-01, 9.093716e-01, 9.093834e-01, 9.093950e-01, 9.094068e-01, 9.094185e-01, 9.094303e-01, 9.094419e-01, 9.094536e-01, 9.094654e-01, 9.094771e-01, 9.094888e-01, 9.095005e-01, 9.095123e-01, 9.095240e-01, 9.095356e-01, 9.095474e-01, 9.095591e-01, 9.095708e-01, 9.095826e-01, 9.095943e-01, 9.096060e-01, 9.096177e-01, 9.096295e-01, 9.096411e-01, 9.096529e-01, 9.096646e-01, 9.096764e-01, 9.096881e-01, 9.096997e-01, 9.097114e-01, 9.097232e-01, 9.097349e-01, 9.097466e-01, 9.097583e-01, 9.097701e-01, 9.097818e-01, 9.097934e-01, 9.098052e-01, 9.098169e-01, 9.098287e-01, 9.098403e-01, 9.098521e-01, 9.098638e-01, 9.098755e-01, 9.098872e-01, 9.098990e-01, 9.099107e-01, 9.099224e-01, 9.099340e-01, 9.099458e-01, 9.099575e-01, 9.099692e-01, 9.099810e-01, 9.099927e-01, 9.100044e-01, 9.100161e-01, 9.100278e-01, 9.100395e-01, 9.100513e-01, 9.100630e-01, 9.100747e-01, 9.100863e-01, 9.100981e-01, 9.101098e-01, 9.101215e-01, 9.101332e-01, 9.101450e-01, 9.101567e-01, 9.101684e-01, 9.101801e-01, 9.101918e-01, 9.102036e-01, 9.102153e-01, 9.102269e-01, 9.102386e-01, 9.102504e-01, 9.102621e-01, 9.102738e-01, 9.102855e-01, 9.102972e-01, 9.103090e-01, 9.103207e-01, 9.103324e-01, 9.103441e-01, 9.103557e-01, 9.103675e-01, 9.103792e-01, 9.103909e-01, 9.104027e-01, 9.104143e-01, 9.104261e-01, 9.104378e-01, 9.104495e-01, 9.104612e-01, 9.104729e-01, 9.104847e-01, 9.104964e-01, 9.105080e-01, 9.105197e-01, 9.105315e-01, 9.105432e-01, 9.105549e-01, 9.105666e-01, 9.105783e-01, 9.105900e-01, 9.106018e-01, 9.106135e-01, 9.106252e-01, 9.106368e-01, 9.106486e-01, 9.106603e-01, 9.106721e-01, 9.106838e-01, 9.106954e-01, 9.107071e-01, 9.107188e-01, 9.107305e-01, 9.107423e-01, 9.107540e-01, 9.107657e-01, 9.107774e-01, 9.107891e-01, 9.108008e-01, 9.108126e-01, 9.108242e-01, 9.108359e-01, 9.108476e-01, 9.108593e-01, 9.108710e-01, 9.108828e-01, 9.108945e-01, 9.109062e-01, 9.109179e-01, 9.109296e-01, 9.109413e-01, 9.109530e-01, 9.109647e-01, 9.109765e-01, 9.109882e-01, 9.109998e-01, 9.110115e-01, 9.110232e-01, 9.110350e-01, 9.110467e-01, 9.110584e-01, 9.110701e-01, 9.110818e-01, 9.110935e-01, 9.111052e-01, 9.111169e-01, 9.111286e-01, 9.111403e-01, 9.111521e-01, 9.111637e-01, 9.111754e-01, 9.111871e-01, 9.111988e-01, 9.112106e-01, 9.112223e-01, 9.112340e-01, 9.112457e-01, 9.112574e-01, 9.112691e-01, 9.112808e-01, 9.112925e-01, 9.113042e-01, 9.113159e-01, 9.113277e-01, 9.113393e-01, 9.113510e-01, 9.113627e-01, 9.113744e-01, 9.113861e-01, 9.113978e-01, 9.114095e-01, 9.114213e-01, 9.114330e-01, 9.114447e-01, 9.114563e-01, 9.114681e-01, 9.114798e-01, 9.114915e-01, 9.115031e-01, 9.115148e-01, 9.115266e-01, 9.115383e-01, 9.115500e-01, 9.115617e-01, 9.115734e-01, 9.115851e-01, 9.115968e-01, 9.116085e-01, 9.116202e-01, 9.116319e-01, 9.116436e-01, 9.116552e-01, 9.116670e-01, 9.116787e-01, 9.116904e-01, 9.117022e-01, 9.117138e-01, 9.117255e-01, 9.117372e-01, 9.117489e-01, 9.117606e-01, 9.117723e-01, 9.117840e-01, 9.117957e-01, 9.118074e-01, 9.118192e-01, 9.118308e-01, 9.118425e-01, 9.118543e-01, 9.118659e-01, 9.118776e-01, 9.118893e-01, 9.119011e-01, 9.119127e-01, 9.119244e-01, 9.119361e-01, 9.119478e-01, 9.119595e-01, 9.119712e-01, 9.119829e-01, 9.119946e-01, 9.120063e-01, 9.120181e-01, 9.120297e-01, 9.120414e-01, 9.120532e-01, 9.120649e-01, 9.120765e-01, 9.120882e-01, 9.120999e-01, 9.121116e-01, 9.121233e-01, 9.121350e-01, 9.121467e-01, 9.121584e-01, 9.121701e-01, 9.121818e-01, 9.121935e-01, 9.122052e-01, 9.122169e-01, 9.122286e-01, 9.122403e-01, 9.122519e-01, 9.122636e-01, 9.122754e-01, 9.122871e-01, 9.122987e-01, 9.123104e-01, 9.123221e-01, 9.123338e-01, 9.123455e-01, 9.123572e-01, 9.123689e-01, 9.123806e-01, 9.123924e-01, 9.124041e-01, 9.124157e-01, 9.124275e-01, 9.124392e-01, 9.124509e-01, 9.124625e-01, 9.124743e-01, 9.124860e-01, 9.124976e-01, 9.125093e-01, 9.125210e-01, 9.125327e-01, 9.125444e-01, 9.125561e-01, 9.125678e-01, 9.125795e-01, 9.125912e-01, 9.126029e-01, 9.126146e-01, 9.126263e-01, 9.126379e-01, 9.126497e-01, 9.126614e-01, 9.126731e-01, 9.126847e-01, 9.126964e-01, 9.127080e-01, 9.127197e-01, 9.127315e-01, 9.127432e-01, 9.127548e-01, 9.127665e-01, 9.127782e-01, 9.127899e-01, 9.128016e-01, 9.128133e-01, 9.128250e-01, 9.128367e-01, 9.128484e-01, 9.128601e-01, 9.128718e-01, 9.128835e-01, 9.128952e-01, 9.129069e-01, 9.129186e-01, 9.129303e-01, 9.129419e-01, 9.129537e-01, 9.129654e-01, 9.129770e-01, 9.129887e-01, 9.130004e-01, 9.130121e-01, 9.130238e-01, 9.130355e-01, 9.130472e-01, 9.130588e-01, 9.130705e-01, 9.130822e-01, 9.130939e-01, 9.131056e-01, 9.131173e-01, 9.131290e-01, 9.131407e-01, 9.131524e-01, 9.131641e-01, 9.131758e-01, 9.131874e-01, 9.131991e-01, 9.132109e-01, 9.132226e-01, 9.132342e-01, 9.132459e-01, 9.132576e-01, 9.132692e-01, 9.132809e-01, 9.132926e-01, 9.133043e-01, 9.133160e-01, 9.133277e-01, 9.133394e-01, 9.133511e-01, 9.133628e-01, 9.133745e-01, 9.133862e-01, 9.133979e-01, 9.134096e-01, 9.134212e-01, 9.134329e-01, 9.134446e-01, 9.134563e-01, 9.134679e-01, 9.134797e-01, 9.134914e-01, 9.135031e-01, 9.135147e-01, 9.135264e-01, 9.135382e-01, 9.135497e-01, 9.135615e-01, 9.135731e-01, 9.135848e-01, 9.135965e-01, 9.136082e-01, 9.136199e-01, 9.136316e-01, 9.136433e-01, 9.136550e-01, 9.136666e-01, 9.136783e-01, 9.136900e-01, 9.137017e-01, 9.137134e-01, 9.137251e-01, 9.137368e-01, 9.137484e-01, 9.137602e-01, 9.137717e-01, 9.137835e-01, 9.137952e-01, 9.138069e-01, 9.138185e-01, 9.138302e-01, 9.138420e-01, 9.138536e-01, 9.138653e-01, 9.138770e-01, 9.138886e-01, 9.139003e-01, 9.139120e-01, 9.139237e-01, 9.139354e-01, 9.139471e-01, 9.139587e-01, 9.139704e-01, 9.139821e-01, 9.139938e-01, 9.140055e-01, 9.140172e-01, 9.140289e-01, 9.140405e-01, 9.140522e-01, 9.140639e-01, 9.140756e-01, 9.140873e-01, 9.140990e-01, 9.141107e-01, 9.141223e-01, 9.141340e-01, 9.141456e-01, 9.141573e-01, 9.141691e-01, 9.141808e-01, 9.141924e-01, 9.142041e-01, 9.142157e-01, 9.142274e-01, 9.142391e-01, 9.142509e-01, 9.142625e-01, 9.142742e-01, 9.142858e-01, 9.142975e-01, 9.143092e-01, 9.143209e-01, 9.143326e-01, 9.143442e-01, 9.143559e-01, 9.143676e-01, 9.143793e-01, 9.143910e-01, 9.144027e-01, 9.144143e-01, 9.144260e-01, 9.144377e-01, 9.144494e-01, 9.144611e-01, 9.144727e-01, 9.144844e-01, 9.144961e-01, 9.145077e-01, 9.145195e-01, 9.145312e-01, 9.145428e-01, 9.145545e-01, 9.145662e-01, 9.145778e-01, 9.145895e-01, 9.146011e-01, 9.146128e-01, 9.146246e-01, 9.146363e-01, 9.146479e-01, 9.146596e-01, 9.146712e-01, 9.146829e-01, 9.146946e-01, 9.147063e-01, 9.147179e-01, 9.147297e-01, 9.147413e-01, 9.147530e-01, 9.147647e-01, 9.147763e-01, 9.147880e-01, 9.147997e-01, 9.148114e-01, 9.148231e-01, 9.148347e-01, 9.148464e-01, 9.148581e-01, 9.148698e-01, 9.148814e-01, 9.148931e-01, 9.149048e-01, 9.149165e-01, 9.149282e-01, 9.149398e-01, 9.149515e-01, 9.149632e-01, 9.149749e-01, 9.149865e-01, 9.149982e-01, 9.150099e-01, 9.150215e-01, 9.150332e-01, 9.150448e-01, 9.150566e-01, 9.150683e-01, 9.150800e-01, 9.150916e-01, 9.151033e-01, 9.151149e-01, 9.151266e-01, 9.151382e-01, 9.151499e-01, 9.151617e-01, 9.151734e-01, 9.151850e-01, 9.151967e-01, 9.152083e-01, 9.152200e-01, 9.152316e-01, 9.152433e-01, 9.152550e-01, 9.152668e-01, 9.152783e-01, 9.152901e-01, 9.153017e-01, 9.153134e-01, 9.153250e-01, 9.153367e-01, 9.153484e-01, 9.153600e-01, 9.153717e-01, 9.153834e-01, 9.153951e-01, 9.154067e-01, 9.154184e-01, 9.154301e-01, 9.154418e-01, 9.154534e-01, 9.154651e-01, 9.154768e-01, 9.154884e-01, 9.155001e-01, 9.155118e-01, 9.155235e-01, 9.155351e-01, 9.155468e-01, 9.155585e-01, 9.155701e-01, 9.155818e-01, 9.155935e-01, 9.156052e-01, 9.156168e-01, 9.156285e-01, 9.156402e-01, 9.156518e-01, 9.156635e-01, 9.156752e-01, 9.156869e-01, 9.156985e-01, 9.157102e-01, 9.157219e-01, 9.157335e-01, 9.157452e-01, 9.157569e-01, 9.157685e-01, 9.157802e-01, 9.157919e-01, 9.158036e-01, 9.158152e-01, 9.158269e-01, 9.158386e-01, 9.158502e-01, 9.158618e-01, 9.158736e-01, 9.158852e-01, 9.158969e-01, 9.159086e-01, 9.159202e-01, 9.159319e-01, 9.159436e-01, 9.159552e-01, 9.159669e-01, 9.159786e-01, 9.159902e-01, 9.160019e-01, 9.160135e-01, 9.160253e-01, 9.160368e-01, 9.160486e-01, 9.160603e-01, 9.160719e-01, 9.160836e-01, 9.160953e-01, 9.161069e-01, 9.161186e-01, 9.161302e-01, 9.161419e-01, 9.161536e-01, 9.161652e-01, 9.161769e-01, 9.161885e-01, 9.162002e-01, 9.162118e-01, 9.162235e-01, 9.162351e-01, 9.162468e-01, 9.162586e-01, 9.162701e-01, 9.162819e-01, 9.162936e-01, 9.163052e-01, 9.163169e-01, 9.163285e-01, 9.163402e-01, 9.163519e-01, 9.163635e-01, 9.163752e-01, 9.163868e-01, 9.163985e-01, 9.164101e-01, 9.164218e-01, 9.164335e-01, 9.164451e-01, 9.164568e-01, 9.164684e-01, 9.164801e-01, 9.164919e-01, 9.165034e-01, 9.165152e-01, 9.165267e-01, 9.165385e-01, 9.165502e-01, 9.165618e-01, 9.165735e-01, 9.165851e-01, 9.165968e-01, 9.166085e-01, 9.166201e-01, 9.166318e-01, 9.166434e-01, 9.166551e-01, 9.166667e-01, 9.166784e-01, 9.166901e-01, 9.167017e-01, 9.167134e-01, 9.167250e-01, 9.167367e-01, 9.167483e-01, 9.167600e-01, 9.167717e-01, 9.167833e-01, 9.167950e-01, 9.168066e-01, 9.168184e-01, 9.168299e-01, 9.168417e-01, 9.168532e-01, 9.168650e-01, 9.168767e-01, 9.168882e-01, 9.169000e-01, 9.169115e-01, 9.169233e-01, 9.169350e-01, 9.169466e-01, 9.169583e-01, 9.169699e-01, 9.169816e-01, 9.169932e-01, 9.170049e-01, 9.170166e-01, 9.170282e-01, 9.170399e-01, 9.170515e-01, 9.170632e-01, 9.170749e-01, 9.170865e-01, 9.170982e-01, 9.171098e-01, 9.171215e-01, 9.171331e-01, 9.171448e-01, 9.171565e-01, 9.171681e-01, 9.171798e-01, 9.171914e-01, 9.172031e-01, 9.172147e-01, 9.172264e-01, 9.172380e-01, 9.172497e-01, 9.172614e-01, 9.172730e-01, 9.172847e-01, 9.172963e-01, 9.173080e-01, 9.173196e-01, 9.173313e-01, 9.173429e-01, 9.173546e-01, 9.173663e-01, 9.173779e-01, 9.173896e-01, 9.174012e-01, 9.174129e-01, 9.174245e-01, 9.174362e-01, 9.174478e-01, 9.174595e-01, 9.174711e-01, 9.174828e-01, 9.174944e-01, 9.175061e-01, 9.175177e-01, 9.175294e-01, 9.175411e-01, 9.175527e-01, 9.175644e-01, 9.175760e-01, 9.175877e-01, 9.175993e-01, 9.176110e-01, 9.176226e-01, 9.176343e-01, 9.176459e-01, 9.176576e-01, 9.176692e-01, 9.176809e-01, 9.176925e-01, 9.177042e-01, 9.177158e-01, 9.177275e-01, 9.177392e-01, 9.177508e-01, 9.177625e-01, 9.177741e-01, 9.177858e-01, 9.177974e-01, 9.178091e-01, 9.178208e-01, 9.178324e-01, 9.178441e-01, 9.178557e-01, 9.178674e-01, 9.178790e-01, 9.178907e-01, 9.179023e-01, 9.179140e-01, 9.179256e-01, 9.179373e-01, 9.179489e-01, 9.179606e-01, 9.179722e-01, 9.179839e-01, 9.179955e-01, 9.180072e-01, 9.180188e-01, 9.180305e-01, 9.180421e-01, 9.180538e-01, 9.180654e-01, 9.180771e-01, 9.180887e-01, 9.181004e-01, 9.181120e-01, 9.181237e-01, 9.181353e-01, 9.181470e-01, 9.181586e-01, 9.181703e-01, 9.181819e-01, 9.181935e-01, 9.182052e-01, 9.182168e-01, 9.182285e-01, 9.182401e-01, 9.182518e-01, 9.182634e-01, 9.182751e-01, 9.182867e-01, 9.182984e-01, 9.183100e-01, 9.183217e-01, 9.183334e-01, 9.183450e-01, 9.183567e-01, 9.183683e-01, 9.183800e-01, 9.183916e-01, 9.184033e-01, 9.184149e-01, 9.184266e-01, 9.184382e-01, 9.184499e-01, 9.184615e-01, 9.184731e-01, 9.184848e-01, 9.184964e-01, 9.185081e-01, 9.185197e-01, 9.185314e-01, 9.185430e-01, 9.185546e-01, 9.185663e-01, 9.185779e-01, 9.185896e-01, 9.186012e-01, 9.186129e-01, 9.186245e-01, 9.186361e-01, 9.186478e-01, 9.186594e-01, 9.186711e-01, 9.186828e-01, 9.186944e-01, 9.187061e-01, 9.187176e-01, 9.187294e-01, 9.187409e-01, 9.187527e-01, 9.187642e-01, 9.187759e-01, 9.187875e-01, 9.187992e-01, 9.188108e-01, 9.188225e-01, 9.188341e-01, 9.188458e-01, 9.188574e-01, 9.188691e-01, 9.188807e-01, 9.188924e-01, 9.189040e-01, 9.189156e-01, 9.189273e-01, 9.189389e-01, 9.189506e-01, 9.189622e-01, 9.189738e-01, 9.189855e-01, 9.189971e-01, 9.190088e-01, 9.190204e-01, 9.190320e-01, 9.190437e-01, 9.190553e-01, 9.190670e-01, 9.190786e-01, 9.190903e-01, 9.191020e-01, 9.191136e-01, 9.191251e-01, 9.191369e-01, 9.191484e-01, 9.191601e-01, 9.191718e-01, 9.191834e-01, 9.191951e-01, 9.192067e-01, 9.192183e-01, 9.192300e-01, 9.192416e-01, 9.192533e-01, 9.192649e-01, 9.192765e-01, 9.192882e-01, 9.192998e-01, 9.193114e-01, 9.193231e-01, 9.193347e-01, 9.193463e-01, 9.193580e-01, 9.193696e-01, 9.193813e-01, 9.193929e-01, 9.194046e-01, 9.194162e-01, 9.194279e-01, 9.194394e-01, 9.194512e-01, 9.194627e-01, 9.194744e-01, 9.194860e-01, 9.194977e-01, 9.195093e-01, 9.195210e-01, 9.195326e-01, 9.195442e-01, 9.195559e-01, 9.195675e-01, 9.195791e-01, 9.195908e-01, 9.196024e-01, 9.196140e-01, 9.196257e-01, 9.196373e-01, 9.196489e-01, 9.196606e-01, 9.196723e-01, 9.196839e-01, 9.196956e-01, 9.197071e-01, 9.197187e-01, 9.197304e-01, 9.197420e-01, 9.197537e-01, 9.197654e-01, 9.197770e-01, 9.197886e-01, 9.198003e-01, 9.198119e-01, 9.198235e-01, 9.198352e-01, 9.198468e-01, 9.198584e-01, 9.198701e-01, 9.198817e-01, 9.198933e-01, 9.199049e-01, 9.199166e-01, 9.199283e-01, 9.199398e-01, 9.199516e-01, 9.199631e-01, 9.199747e-01, 9.199864e-01, 9.199980e-01, 9.200097e-01, 9.200213e-01, 9.200330e-01, 9.200446e-01, 9.200562e-01, 9.200679e-01, 9.200795e-01, 9.200911e-01, 9.201028e-01, 9.201144e-01, 9.201260e-01, 9.201376e-01, 9.201493e-01, 9.201609e-01, 9.201725e-01, 9.201841e-01, 9.201958e-01, 9.202074e-01, 9.202191e-01, 9.202307e-01, 9.202424e-01, 9.202540e-01, 9.202656e-01, 9.202773e-01, 9.202889e-01, 9.203005e-01, 9.203122e-01, 9.203238e-01, 9.203354e-01, 9.203470e-01, 9.203587e-01, 9.203703e-01, 9.203819e-01, 9.203935e-01, 9.204052e-01, 9.204168e-01, 9.204285e-01, 9.204401e-01, 9.204518e-01, 9.204634e-01, 9.204749e-01, 9.204866e-01, 9.204983e-01, 9.205099e-01, 9.205215e-01, 9.205331e-01, 9.205448e-01, 9.205564e-01, 9.205680e-01, 9.205796e-01, 9.205913e-01, 9.206029e-01, 9.206145e-01, 9.206262e-01, 9.206378e-01, 9.206495e-01, 9.206610e-01, 9.206727e-01, 9.206843e-01, 9.206960e-01, 9.207076e-01, 9.207192e-01, 9.207308e-01, 9.207425e-01, 9.207541e-01, 9.207657e-01, 9.207773e-01, 9.207890e-01, 9.208006e-01, 9.208122e-01, 9.208238e-01, 9.208356e-01, 9.208471e-01, 9.208587e-01, 9.208704e-01, 9.208820e-01, 9.208937e-01, 9.209053e-01, 9.209169e-01, 9.209285e-01, 9.209401e-01, 9.209518e-01, 9.209634e-01, 9.209750e-01, 9.209866e-01, 9.209982e-01, 9.210099e-01, 9.210215e-01, 9.210331e-01, 9.210448e-01, 9.210564e-01, 9.210681e-01, 9.210796e-01, 9.210913e-01, 9.211029e-01, 9.211145e-01, 9.211262e-01, 9.211378e-01, 9.211494e-01, 9.211610e-01, 9.211726e-01, 9.211843e-01, 9.211959e-01, 9.212075e-01, 9.212191e-01, 9.212307e-01, 9.212424e-01, 9.212540e-01, 9.212657e-01, 9.212773e-01, 9.212888e-01, 9.213005e-01, 9.213122e-01, 9.213238e-01, 9.213354e-01, 9.213470e-01, 9.213586e-01, 9.213702e-01, 9.213819e-01, 9.213935e-01, 9.214051e-01, 9.214168e-01, 9.214283e-01, 9.214399e-01, 9.214516e-01, 9.214633e-01, 9.214749e-01, 9.214865e-01, 9.214981e-01, 9.215097e-01, 9.215214e-01, 9.215330e-01, 9.215446e-01, 9.215562e-01, 9.215679e-01, 9.215794e-01, 9.215911e-01, 9.216027e-01, 9.216143e-01, 9.216260e-01, 9.216376e-01, 9.216492e-01, 9.216608e-01, 9.216725e-01, 9.216841e-01, 9.216957e-01, 9.217073e-01, 9.217189e-01, 9.217305e-01, 9.217421e-01, 9.217538e-01, 9.217654e-01, 9.217771e-01, 9.217886e-01, 9.218003e-01, 9.218119e-01, 9.218235e-01, 9.218351e-01, 9.218468e-01, 9.218584e-01, 9.218700e-01, 9.218816e-01, 9.218932e-01, 9.219048e-01, 9.219164e-01, 9.219280e-01, 9.219397e-01, 9.219514e-01, 9.219630e-01, 9.219745e-01, 9.219862e-01, 9.219978e-01, 9.220094e-01, 9.220210e-01, 9.220326e-01, 9.220443e-01, 9.220559e-01, 9.220675e-01, 9.220791e-01, 9.220908e-01, 9.221023e-01, 9.221140e-01, 9.221256e-01, 9.221372e-01, 9.221488e-01, 9.221605e-01, 9.221721e-01, 9.221837e-01, 9.221953e-01, 9.222069e-01, 9.222185e-01, 9.222301e-01, 9.222417e-01, 9.222534e-01, 9.222649e-01, 9.222766e-01, 9.222882e-01, 9.222999e-01, 9.223115e-01, 9.223231e-01, 9.223347e-01, 9.223463e-01, 9.223579e-01, 9.223695e-01, 9.223812e-01, 9.223927e-01, 9.224043e-01, 9.224160e-01, 9.224276e-01, 9.224393e-01, 9.224509e-01, 9.224625e-01, 9.224741e-01, 9.224857e-01, 9.224973e-01, 9.225089e-01, 9.225205e-01, 9.225321e-01, 9.225438e-01, 9.225553e-01, 9.225670e-01, 9.225786e-01, 9.225902e-01, 9.226018e-01, 9.226134e-01, 9.226250e-01, 9.226367e-01, 9.226483e-01, 9.226599e-01, 9.226716e-01, 9.226831e-01, 9.226947e-01, 9.227064e-01, 9.227180e-01, 9.227296e-01, 9.227412e-01, 9.227528e-01, 9.227644e-01, 9.227760e-01, 9.227876e-01, 9.227992e-01, 9.228109e-01, 9.228224e-01, 9.228340e-01, 9.228457e-01, 9.228573e-01, 9.228688e-01, 9.228805e-01, 9.228921e-01, 9.229037e-01, 9.229153e-01, 9.229269e-01, 9.229386e-01, 9.229502e-01, 9.229618e-01, 9.229735e-01, 9.229851e-01, 9.229966e-01, 9.230083e-01, 9.230199e-01, 9.230315e-01, 9.230431e-01, 9.230547e-01, 9.230663e-01, 9.230779e-01, 9.230895e-01, 9.231011e-01, 9.231128e-01, 9.231244e-01, 9.231359e-01, 9.231476e-01, 9.231592e-01, 9.231708e-01, 9.231824e-01, 9.231940e-01, 9.232056e-01, 9.232172e-01, 9.232289e-01, 9.232404e-01, 9.232520e-01, 9.232637e-01, 9.232753e-01, 9.232869e-01, 9.232985e-01, 9.233101e-01, 9.233217e-01, 9.233333e-01, 9.233449e-01, 9.233565e-01, 9.233682e-01, 9.233798e-01, 9.233913e-01, 9.234030e-01, 9.234146e-01, 9.234262e-01, 9.234377e-01, 9.234493e-01, 9.234609e-01, 9.234725e-01, 9.234841e-01, 9.234958e-01, 9.235073e-01, 9.235190e-01, 9.235306e-01, 9.235422e-01, 9.235538e-01, 9.235654e-01, 9.235770e-01, 9.235886e-01, 9.236003e-01, 9.236118e-01, 9.236234e-01, 9.236351e-01, 9.236467e-01, 9.236583e-01, 9.236699e-01, 9.236815e-01, 9.236931e-01, 9.237047e-01, 9.237163e-01, 9.237279e-01, 9.237396e-01, 9.237511e-01, 9.237627e-01, 9.237743e-01, 9.237859e-01, 9.237975e-01, 9.238091e-01, 9.238207e-01, 9.238323e-01, 9.238439e-01, 9.238555e-01, 9.238672e-01, 9.238787e-01, 9.238904e-01, 9.239020e-01, 9.239136e-01, 9.239252e-01, 9.239367e-01, 9.239483e-01, 9.239599e-01, 9.239715e-01, 9.239832e-01, 9.239948e-01, 9.240063e-01, 9.240180e-01, 9.240296e-01, 9.240412e-01, 9.240528e-01, 9.240644e-01, 9.240760e-01, 9.240875e-01, 9.240991e-01, 9.241108e-01, 9.241224e-01, 9.241340e-01, 9.241456e-01, 9.241572e-01, 9.241688e-01, 9.241804e-01, 9.241920e-01, 9.242036e-01, 9.242151e-01, 9.242268e-01, 9.242384e-01, 9.242500e-01, 9.242616e-01, 9.242732e-01, 9.242848e-01, 9.242964e-01, 9.243080e-01, 9.243196e-01, 9.243312e-01, 9.243428e-01, 9.243544e-01, 9.243660e-01, 9.243776e-01, 9.243892e-01, 9.244008e-01, 9.244124e-01, 9.244241e-01, 9.244356e-01, 9.244472e-01, 9.244587e-01, 9.244704e-01, 9.244820e-01, 9.244936e-01, 9.245052e-01, 9.245168e-01, 9.245284e-01, 9.245399e-01, 9.245515e-01, 9.245632e-01, 9.245748e-01, 9.245864e-01, 9.245980e-01, 9.246096e-01, 9.246211e-01, 9.246327e-01, 9.246444e-01, 9.246560e-01, 9.246675e-01, 9.246792e-01, 9.246908e-01, 9.247023e-01, 9.247139e-01, 9.247255e-01, 9.247371e-01, 9.247487e-01, 9.247603e-01, 9.247720e-01, 9.247835e-01, 9.247951e-01, 9.248067e-01, 9.248183e-01, 9.248299e-01, 9.248415e-01, 9.248531e-01, 9.248646e-01, 9.248763e-01, 9.248879e-01, 9.248995e-01, 9.249111e-01, 9.249227e-01, 9.249342e-01, 9.249458e-01, 9.249575e-01, 9.249690e-01, 9.249806e-01, 9.249923e-01, 9.250038e-01, 9.250154e-01, 9.250270e-01, 9.250386e-01, 9.250502e-01, 9.250618e-01, 9.250733e-01, 9.250849e-01, 9.250966e-01, 9.251082e-01, 9.251198e-01, 9.251313e-01, 9.251429e-01, 9.251545e-01, 9.251661e-01, 9.251778e-01, 9.251894e-01, 9.252009e-01, 9.252125e-01, 9.252241e-01, 9.252357e-01, 9.252473e-01, 9.252588e-01, 9.252704e-01, 9.252821e-01, 9.252937e-01, 9.253052e-01, 9.253168e-01, 9.253284e-01, 9.253400e-01, 9.253516e-01, 9.253632e-01, 9.253747e-01, 9.253864e-01, 9.253980e-01, 9.254096e-01, 9.254212e-01, 9.254327e-01, 9.254443e-01, 9.254559e-01, 9.254676e-01, 9.254791e-01, 9.254907e-01, 9.255023e-01, 9.255139e-01, 9.255255e-01, 9.255370e-01, 9.255486e-01, 9.255602e-01, 9.255719e-01, 9.255834e-01, 9.255950e-01, 9.256066e-01, 9.256182e-01, 9.256298e-01, 9.256413e-01, 9.256529e-01, 9.256645e-01, 9.256762e-01, 9.256877e-01, 9.256993e-01, 9.257109e-01, 9.257225e-01, 9.257341e-01, 9.257456e-01, 9.257572e-01, 9.257689e-01, 9.257805e-01, 9.257920e-01, 9.258036e-01, 9.258152e-01, 9.258268e-01, 9.258384e-01, 9.258499e-01, 9.258615e-01, 9.258732e-01, 9.258847e-01, 9.258963e-01, 9.259079e-01, 9.259195e-01, 9.259310e-01, 9.259427e-01, 9.259542e-01, 9.259658e-01, 9.259773e-01, 9.259890e-01, 9.260006e-01, 9.260121e-01, 9.260237e-01, 9.260353e-01, 9.260470e-01, 9.260585e-01, 9.260701e-01, 9.260817e-01, 9.260933e-01, 9.261048e-01, 9.261164e-01, 9.261280e-01, 9.261397e-01, 9.261512e-01, 9.261628e-01, 9.261744e-01, 9.261859e-01, 9.261975e-01, 9.262092e-01, 9.262207e-01, 9.262323e-01, 9.262438e-01, 9.262555e-01, 9.262670e-01, 9.262786e-01, 9.262902e-01, 9.263018e-01, 9.263133e-01, 9.263250e-01, 9.263366e-01, 9.263481e-01, 9.263597e-01, 9.263713e-01, 9.263828e-01, 9.263945e-01, 9.264060e-01, 9.264176e-01, 9.264292e-01, 9.264408e-01, 9.264524e-01, 9.264639e-01, 9.264755e-01, 9.264871e-01, 9.264987e-01, 9.265103e-01, 9.265219e-01, 9.265335e-01, 9.265450e-01, 9.265566e-01, 9.265682e-01, 9.265798e-01, 9.265913e-01, 9.266030e-01, 9.266145e-01, 9.266261e-01, 9.266377e-01, 9.266492e-01, 9.266608e-01, 9.266725e-01, 9.266840e-01, 9.266956e-01, 9.267072e-01, 9.267187e-01, 9.267303e-01, 9.267419e-01, 9.267535e-01, 9.267651e-01, 9.267766e-01, 9.267882e-01, 9.267998e-01, 9.268114e-01, 9.268229e-01, 9.268345e-01, 9.268461e-01, 9.268577e-01, 9.268693e-01, 9.268809e-01, 9.268924e-01, 9.269040e-01, 9.269156e-01, 9.269271e-01, 9.269388e-01, 9.269504e-01, 9.269619e-01, 9.269735e-01, 9.269850e-01, 9.269966e-01, 9.270082e-01, 9.270198e-01, 9.270314e-01, 9.270430e-01, 9.270545e-01, 9.270661e-01, 9.270777e-01, 9.270893e-01, 9.271008e-01, 9.271125e-01, 9.271240e-01, 9.271356e-01, 9.271471e-01, 9.271587e-01, 9.271703e-01, 9.271818e-01, 9.271935e-01, 9.272051e-01, 9.272166e-01, 9.272282e-01, 9.272397e-01, 9.272513e-01, 9.272630e-01, 9.272745e-01, 9.272861e-01, 9.272976e-01, 9.273092e-01, 9.273208e-01, 9.273323e-01, 9.273440e-01, 9.273556e-01, 9.273671e-01, 9.273787e-01, 9.273902e-01, 9.274018e-01, 9.274134e-01, 9.274250e-01, 9.274366e-01, 9.274481e-01, 9.274597e-01, 9.274713e-01, 9.274828e-01, 9.274944e-01, 9.275060e-01, 9.275176e-01, 9.275292e-01, 9.275407e-01, 9.275523e-01, 9.275638e-01, 9.275755e-01, 9.275870e-01, 9.275986e-01, 9.276102e-01, 9.276217e-01, 9.276333e-01, 9.276448e-01, 9.276565e-01, 9.276680e-01, 9.276796e-01, 9.276912e-01, 9.277027e-01, 9.277143e-01, 9.277259e-01, 9.277375e-01, 9.277490e-01, 9.277606e-01, 9.277722e-01, 9.277837e-01, 9.277953e-01, 9.278069e-01, 9.278185e-01, 9.278300e-01, 9.278416e-01, 9.278532e-01, 9.278647e-01, 9.278764e-01, 9.278879e-01, 9.278995e-01, 9.279110e-01, 9.279226e-01, 9.279342e-01, 9.279457e-01, 9.279574e-01, 9.279689e-01, 9.279805e-01, 9.279920e-01, 9.280036e-01, 9.280152e-01, 9.280267e-01, 9.280384e-01, 9.280499e-01, 9.280615e-01, 9.280730e-01, 9.280846e-01, 9.280961e-01, 9.281077e-01, 9.281192e-01, 9.281309e-01, 9.281425e-01, 9.281540e-01, 9.281656e-01, 9.281771e-01, 9.281887e-01, 9.282002e-01, 9.282119e-01, 9.282234e-01, 9.282350e-01, 9.282465e-01, 9.282581e-01, 9.282696e-01, 9.282812e-01, 9.282928e-01, 9.283044e-01, 9.283159e-01, 9.283275e-01, 9.283391e-01, 9.283506e-01, 9.283623e-01, 9.283738e-01, 9.283854e-01, 9.283969e-01, 9.284085e-01, 9.284201e-01, 9.284316e-01, 9.284432e-01, 9.284548e-01, 9.284663e-01, 9.284779e-01, 9.284894e-01, 9.285011e-01, 9.285126e-01, 9.285242e-01, 9.285357e-01, 9.285473e-01, 9.285588e-01, 9.285704e-01, 9.285820e-01, 9.285936e-01, 9.286051e-01, 9.286167e-01, 9.286282e-01, 9.286398e-01, 9.286514e-01, 9.286630e-01, 9.286745e-01, 9.286861e-01, 9.286976e-01, 9.287092e-01, 9.287208e-01, 9.287324e-01, 9.287439e-01, 9.287554e-01, 9.287670e-01, 9.287785e-01, 9.287902e-01, 9.288017e-01, 9.288133e-01, 9.288248e-01, 9.288364e-01, 9.288480e-01, 9.288595e-01, 9.288711e-01, 9.288827e-01, 9.288942e-01, 9.289058e-01, 9.289173e-01, 9.289290e-01, 9.289405e-01, 9.289520e-01, 9.289636e-01, 9.289751e-01, 9.289867e-01, 9.289982e-01, 9.290099e-01, 9.290214e-01, 9.290330e-01, 9.290445e-01, 9.290561e-01, 9.290677e-01, 9.290792e-01, 9.290908e-01, 9.291023e-01, 9.291139e-01, 9.291254e-01, 9.291371e-01, 9.291486e-01, 9.291602e-01, 9.291717e-01, 9.291833e-01, 9.291948e-01, 9.292064e-01, 9.292179e-01, 9.292295e-01, 9.292411e-01, 9.292526e-01, 9.292642e-01, 9.292758e-01, 9.292873e-01, 9.292989e-01, 9.293104e-01, 9.293220e-01, 9.293335e-01, 9.293451e-01, 9.293567e-01, 9.293682e-01, 9.293798e-01, 9.293913e-01, 9.294029e-01, 9.294145e-01, 9.294261e-01, 9.294376e-01, 9.294491e-01, 9.294607e-01, 9.294722e-01, 9.294838e-01, 9.294954e-01, 9.295069e-01, 9.295185e-01, 9.295300e-01, 9.295416e-01, 9.295532e-01, 9.295647e-01, 9.295763e-01, 9.295878e-01, 9.295994e-01, 9.296110e-01, 9.296225e-01, 9.296341e-01, 9.296456e-01, 9.296572e-01, 9.296687e-01, 9.296802e-01, 9.296919e-01, 9.297034e-01, 9.297150e-01, 9.297265e-01, 9.297380e-01, 9.297497e-01, 9.297612e-01, 9.297728e-01, 9.297843e-01, 9.297958e-01, 9.298074e-01, 9.298189e-01, 9.298305e-01, 9.298421e-01, 9.298536e-01, 9.298652e-01, 9.298767e-01, 9.298882e-01, 9.298999e-01, 9.299114e-01, 9.299229e-01, 9.299345e-01, 9.299461e-01, 9.299576e-01, 9.299692e-01, 9.299807e-01, 9.299923e-01, 9.300038e-01, 9.300154e-01, 9.300269e-01, 9.300385e-01, 9.300500e-01, 9.300616e-01, 9.300731e-01, 9.300848e-01, 9.300963e-01, 9.301078e-01, 9.301194e-01, 9.301310e-01, 9.301425e-01, 9.301541e-01, 9.301656e-01, 9.301771e-01, 9.301887e-01, 9.302002e-01, 9.302118e-01, 9.302233e-01, 9.302349e-01, 9.302464e-01, 9.302580e-01, 9.302695e-01, 9.302810e-01, 9.302927e-01, 9.303042e-01, 9.303157e-01, 9.303274e-01, 9.303389e-01, 9.303504e-01, 9.303620e-01, 9.303735e-01, 9.303851e-01, 9.303966e-01, 9.304082e-01, 9.304197e-01, 9.304313e-01, 9.304428e-01, 9.304544e-01, 9.304659e-01, 9.304775e-01, 9.304890e-01, 9.305006e-01, 9.305121e-01, 9.305236e-01, 9.305353e-01, 9.305468e-01, 9.305583e-01, 9.305699e-01, 9.305815e-01, 9.305930e-01, 9.306045e-01, 9.306161e-01, 9.306276e-01, 9.306391e-01, 9.306508e-01, 9.306623e-01, 9.306738e-01, 9.306854e-01, 9.306969e-01, 9.307085e-01, 9.307200e-01, 9.307316e-01, 9.307431e-01, 9.307546e-01, 9.307662e-01, 9.307777e-01, 9.307893e-01, 9.308009e-01, 9.308124e-01, 9.308239e-01, 9.308355e-01, 9.308470e-01, 9.308586e-01, 9.308701e-01, 9.308817e-01, 9.308932e-01, 9.309047e-01, 9.309163e-01, 9.309279e-01, 9.309394e-01, 9.309509e-01, 9.309624e-01, 9.309741e-01, 9.309856e-01, 9.309971e-01, 9.310088e-01, 9.310203e-01, 9.310318e-01, 9.310433e-01, 9.310549e-01, 9.310665e-01, 9.310780e-01, 9.310895e-01, 9.311011e-01, 9.311126e-01, 9.311242e-01, 9.311357e-01, 9.311473e-01, 9.311588e-01, 9.311703e-01, 9.311818e-01, 9.311934e-01, 9.312050e-01, 9.312165e-01, 9.312280e-01, 9.312396e-01, 9.312512e-01, 9.312627e-01, 9.312742e-01, 9.312858e-01, 9.312973e-01, 9.313089e-01, 9.313204e-01, 9.313320e-01, 9.313435e-01, 9.313550e-01, 9.313666e-01, 9.313781e-01, 9.313897e-01, 9.314012e-01, 9.314127e-01, 9.314243e-01, 9.314358e-01, 9.314474e-01, 9.314589e-01, 9.314704e-01, 9.314820e-01, 9.314935e-01, 9.315051e-01, 9.315166e-01, 9.315282e-01, 9.315397e-01, 9.315513e-01, 9.315628e-01, 9.315743e-01, 9.315859e-01, 9.315974e-01, 9.316090e-01, 9.316205e-01, 9.316321e-01, 9.316436e-01, 9.316551e-01, 9.316667e-01, 9.316782e-01, 9.316898e-01, 9.317013e-01, 9.317128e-01, 9.317244e-01, 9.317359e-01, 9.317475e-01, 9.317590e-01, 9.317705e-01, 9.317821e-01, 9.317936e-01, 9.318052e-01, 9.318167e-01, 9.318282e-01, 9.318398e-01, 9.318513e-01, 9.318629e-01, 9.318744e-01, 9.318859e-01, 9.318975e-01, 9.319090e-01, 9.319206e-01, 9.319321e-01, 9.319437e-01, 9.319552e-01, 9.319667e-01, 9.319782e-01, 9.319898e-01, 9.320014e-01, 9.320129e-01, 9.320244e-01, 9.320359e-01, 9.320474e-01, 9.320590e-01, 9.320706e-01, 9.320821e-01, 9.320936e-01, 9.321051e-01, 9.321167e-01, 9.321283e-01, 9.321398e-01, 9.321513e-01, 9.321628e-01, 9.321743e-01, 9.321859e-01, 9.321975e-01, 9.322090e-01, 9.322205e-01, 9.322320e-01, 9.322436e-01, 9.322551e-01, 9.322667e-01, 9.322782e-01, 9.322897e-01, 9.323013e-01, 9.323128e-01, 9.323243e-01, 9.323359e-01, 9.323474e-01, 9.323590e-01, 9.323705e-01, 9.323820e-01, 9.323936e-01, 9.324051e-01, 9.324166e-01, 9.324282e-01, 9.324397e-01, 9.324512e-01, 9.324628e-01, 9.324743e-01, 9.324858e-01, 9.324973e-01, 9.325089e-01, 9.325204e-01, 9.325320e-01, 9.325435e-01, 9.325550e-01, 9.325665e-01, 9.325781e-01, 9.325896e-01, 9.326012e-01, 9.326127e-01, 9.326242e-01, 9.326358e-01, 9.326473e-01, 9.326588e-01, 9.326704e-01, 9.326819e-01, 9.326935e-01, 9.327050e-01, 9.327165e-01, 9.327281e-01, 9.327396e-01, 9.327511e-01, 9.327626e-01, 9.327741e-01, 9.327856e-01, 9.327972e-01, 9.328088e-01, 9.328203e-01, 9.328318e-01, 9.328433e-01, 9.328549e-01, 9.328664e-01, 9.328779e-01, 9.328895e-01, 9.329010e-01, 9.329125e-01, 9.329241e-01, 9.329356e-01, 9.329472e-01, 9.329587e-01, 9.329702e-01, 9.329817e-01, 9.329932e-01, 9.330047e-01, 9.330163e-01, 9.330278e-01, 9.330393e-01, 9.330509e-01, 9.330624e-01, 9.330740e-01, 9.330855e-01, 9.330970e-01, 9.331086e-01, 9.331201e-01, 9.331316e-01, 9.331431e-01, 9.331546e-01, 9.331661e-01, 9.331777e-01, 9.331892e-01, 9.332007e-01, 9.332123e-01, 9.332238e-01, 9.332354e-01, 9.332469e-01, 9.332584e-01, 9.332700e-01, 9.332815e-01, 9.332930e-01, 9.333045e-01, 9.333161e-01, 9.333276e-01, 9.333391e-01, 9.333506e-01, 9.333621e-01, 9.333737e-01, 9.333852e-01, 9.333967e-01, 9.334083e-01, 9.334198e-01, 9.334314e-01, 9.334429e-01, 9.334544e-01, 9.334660e-01, 9.334775e-01, 9.334890e-01, 9.335005e-01, 9.335120e-01, 9.335235e-01, 9.335350e-01, 9.335466e-01, 9.335581e-01, 9.335696e-01, 9.335812e-01, 9.335927e-01, 9.336042e-01, 9.336157e-01, 9.336272e-01, 9.336388e-01, 9.336503e-01, 9.336618e-01, 9.336733e-01, 9.336849e-01, 9.336964e-01, 9.337079e-01, 9.337195e-01, 9.337310e-01, 9.337425e-01, 9.337540e-01, 9.337655e-01, 9.337770e-01, 9.337886e-01, 9.338001e-01, 9.338116e-01, 9.338232e-01, 9.338347e-01, 9.338462e-01, 9.338577e-01, 9.338692e-01, 9.338807e-01, 9.338923e-01, 9.339038e-01, 9.339153e-01, 9.339268e-01, 9.339384e-01, 9.339499e-01, 9.339614e-01, 9.339730e-01, 9.339845e-01, 9.339960e-01, 9.340075e-01, 9.340190e-01, 9.340305e-01, 9.340421e-01, 9.340536e-01, 9.340651e-01, 9.340767e-01, 9.340882e-01, 9.340997e-01, 9.341112e-01, 9.341227e-01, 9.341342e-01, 9.341458e-01, 9.341573e-01, 9.341688e-01, 9.341803e-01, 9.341919e-01, 9.342034e-01, 9.342149e-01, 9.342265e-01, 9.342380e-01, 9.342495e-01, 9.342610e-01, 9.342725e-01, 9.342840e-01, 9.342956e-01, 9.343071e-01, 9.343186e-01, 9.343302e-01, 9.343417e-01, 9.343532e-01, 9.343647e-01, 9.343762e-01, 9.343877e-01, 9.343993e-01, 9.344107e-01, 9.344223e-01, 9.344338e-01, 9.344453e-01, 9.344568e-01, 9.344683e-01, 9.344798e-01, 9.344914e-01, 9.345029e-01, 9.345144e-01, 9.345260e-01, 9.345375e-01, 9.345490e-01, 9.345605e-01, 9.345720e-01, 9.345835e-01, 9.345951e-01, 9.346066e-01, 9.346181e-01, 9.346296e-01, 9.346411e-01, 9.346526e-01, 9.346641e-01, 9.346756e-01, 9.346872e-01, 9.346987e-01, 9.347102e-01, 9.347218e-01, 9.347333e-01, 9.347448e-01, 9.347563e-01, 9.347678e-01, 9.347793e-01, 9.347908e-01, 9.348023e-01, 9.348139e-01, 9.348254e-01, 9.348369e-01, 9.348484e-01, 9.348599e-01, 9.348714e-01, 9.348830e-01, 9.348945e-01, 9.349059e-01, 9.349174e-01, 9.349290e-01, 9.349405e-01, 9.349520e-01, 9.349636e-01, 9.349751e-01, 9.349866e-01, 9.349982e-01, 9.350097e-01, 9.350212e-01, 9.350326e-01, 9.350441e-01, 9.350557e-01, 9.350672e-01, 9.350787e-01, 9.350902e-01, 9.351017e-01, 9.351133e-01, 9.351248e-01, 9.351362e-01, 9.351478e-01, 9.351593e-01, 9.351708e-01, 9.351823e-01, 9.351938e-01, 9.352053e-01, 9.352169e-01, 9.352283e-01, 9.352399e-01, 9.352514e-01, 9.352629e-01, 9.352744e-01, 9.352859e-01, 9.352975e-01, 9.353090e-01, 9.353204e-01, 9.353319e-01, 9.353434e-01, 9.353550e-01, 9.353665e-01, 9.353780e-01, 9.353896e-01, 9.354011e-01, 9.354125e-01, 9.354240e-01, 9.354355e-01, 9.354471e-01, 9.354586e-01, 9.354701e-01, 9.354817e-01, 9.354931e-01, 9.355046e-01, 9.355161e-01, 9.355277e-01, 9.355392e-01, 9.355507e-01, 9.355621e-01, 9.355736e-01, 9.355852e-01, 9.355967e-01, 9.356082e-01, 9.356198e-01, 9.356313e-01, 9.356427e-01, 9.356542e-01, 9.356658e-01, 9.356773e-01, 9.356888e-01, 9.357004e-01, 9.357117e-01, 9.357233e-01, 9.357348e-01, 9.357463e-01, 9.357579e-01, 9.357694e-01, 9.357808e-01, 9.357923e-01, 9.358039e-01, 9.358154e-01, 9.358269e-01, 9.358385e-01, 9.358498e-01, 9.358614e-01, 9.358729e-01, 9.358844e-01, 9.358960e-01, 9.359074e-01, 9.359189e-01, 9.359304e-01, 9.359420e-01, 9.359535e-01, 9.359649e-01, 9.359764e-01, 9.359879e-01, 9.359995e-01, 9.360110e-01, 9.360225e-01, 9.360340e-01, 9.360455e-01, 9.360570e-01, 9.360685e-01, 9.360800e-01, 9.360915e-01, 9.361030e-01, 9.361145e-01, 9.361261e-01, 9.361375e-01, 9.361491e-01, 9.361606e-01, 9.361721e-01, 9.361836e-01, 9.361950e-01, 9.362066e-01, 9.362181e-01, 9.362296e-01, 9.362411e-01, 9.362526e-01, 9.362641e-01, 9.362756e-01, 9.362872e-01, 9.362985e-01, 9.363101e-01, 9.363216e-01, 9.363331e-01, 9.363447e-01, 9.363561e-01, 9.363676e-01, 9.363791e-01, 9.363907e-01, 9.364021e-01, 9.364136e-01, 9.364251e-01, 9.364367e-01, 9.364482e-01, 9.364597e-01, 9.364712e-01, 9.364827e-01, 9.364942e-01, 9.365056e-01, 9.365172e-01, 9.365287e-01, 9.365402e-01, 9.365516e-01, 9.365632e-01, 9.365747e-01, 9.365862e-01, 9.365976e-01, 9.366091e-01, 9.366207e-01, 9.366322e-01, 9.366437e-01, 9.366552e-01, 9.366667e-01, 9.366782e-01, 9.366897e-01, 9.367012e-01, 9.367127e-01, 9.367242e-01, 9.367357e-01, 9.367472e-01, 9.367587e-01, 9.367703e-01, 9.367816e-01, 9.367932e-01, 9.368047e-01, 9.368162e-01, 9.368277e-01, 9.368392e-01, 9.368507e-01, 9.368622e-01, 9.368737e-01, 9.368852e-01, 9.368967e-01, 9.369082e-01, 9.369197e-01, 9.369312e-01, 9.369426e-01, 9.369541e-01, 9.369657e-01, 9.369772e-01, 9.369887e-01, 9.370002e-01, 9.370117e-01, 9.370232e-01, 9.370347e-01, 9.370462e-01, 9.370577e-01, 9.370691e-01, 9.370807e-01, 9.370922e-01, 9.371036e-01, 9.371151e-01, 9.371267e-01, 9.371381e-01, 9.371496e-01, 9.371611e-01, 9.371727e-01, 9.371841e-01, 9.371957e-01, 9.372072e-01, 9.372186e-01, 9.372301e-01, 9.372416e-01, 9.372531e-01, 9.372646e-01, 9.372761e-01, 9.372876e-01, 9.372991e-01, 9.373106e-01, 9.373221e-01, 9.373336e-01, 9.373451e-01, 9.373566e-01, 9.373680e-01, 9.373796e-01, 9.373911e-01, 9.374025e-01, 9.374141e-01, 9.374256e-01, 9.374370e-01, 9.374486e-01, 9.374601e-01, 9.374715e-01, 9.374830e-01, 9.374945e-01, 9.375060e-01, 9.375175e-01, 9.375290e-01, 9.375405e-01, 9.375520e-01, 9.375635e-01, 9.375749e-01, 9.375865e-01, 9.375980e-01, 9.376094e-01, 9.376209e-01, 9.376324e-01, 9.376439e-01, 9.376554e-01, 9.376670e-01, 9.376784e-01, 9.376899e-01, 9.377015e-01, 9.377128e-01, 9.377244e-01, 9.377359e-01, 9.377474e-01, 9.377589e-01, 9.377703e-01, 9.377818e-01, 9.377934e-01, 9.378048e-01, 9.378163e-01, 9.378278e-01, 9.378393e-01, 9.378508e-01, 9.378622e-01, 9.378738e-01, 9.378853e-01, 9.378967e-01, 9.379082e-01, 9.379198e-01, 9.379312e-01, 9.379427e-01, 9.379542e-01, 9.379657e-01, 9.379772e-01, 9.379886e-01, 9.380001e-01, 9.380117e-01, 9.380231e-01, 9.380347e-01, 9.380461e-01, 9.380576e-01, 9.380691e-01, 9.380805e-01, 9.380921e-01, 9.381036e-01, 9.381151e-01, 9.381266e-01, 9.381380e-01, 9.381495e-01, 9.381611e-01, 9.381725e-01, 9.381840e-01, 9.381955e-01, 9.382070e-01, 9.382185e-01, 9.382299e-01, 9.382415e-01, 9.382529e-01, 9.382644e-01, 9.382759e-01, 9.382874e-01, 9.382989e-01, 9.383103e-01, 9.383219e-01, 9.383334e-01, 9.383448e-01, 9.383563e-01, 9.383678e-01, 9.383793e-01, 9.383909e-01, 9.384022e-01, 9.384138e-01, 9.384252e-01, 9.384367e-01, 9.384482e-01, 9.384597e-01, 9.384713e-01, 9.384826e-01, 9.384942e-01, 9.385056e-01, 9.385172e-01, 9.385286e-01, 9.385401e-01, 9.385516e-01, 9.385630e-01, 9.385746e-01, 9.385861e-01, 9.385976e-01, 9.386090e-01, 9.386205e-01, 9.386320e-01, 9.386435e-01, 9.386550e-01, 9.386664e-01, 9.386780e-01, 9.386894e-01, 9.387009e-01, 9.387124e-01, 9.387239e-01, 9.387354e-01, 9.387468e-01, 9.387584e-01, 9.387698e-01, 9.387813e-01, 9.387928e-01, 9.388043e-01, 9.388157e-01, 9.388272e-01, 9.388388e-01, 9.388502e-01, 9.388617e-01, 9.388732e-01, 9.388847e-01, 9.388961e-01, 9.389076e-01, 9.389191e-01, 9.389306e-01, 9.389420e-01, 9.389536e-01, 9.389650e-01, 9.389765e-01, 9.389880e-01, 9.389995e-01, 9.390110e-01, 9.390224e-01, 9.390340e-01, 9.390454e-01, 9.390569e-01, 9.390684e-01, 9.390799e-01, 9.390913e-01, 9.391028e-01, 9.391143e-01, 9.391258e-01, 9.391372e-01, 9.391488e-01, 9.391602e-01, 9.391717e-01, 9.391832e-01, 9.391947e-01, 9.392061e-01, 9.392176e-01, 9.392291e-01, 9.392406e-01, 9.392520e-01, 9.392636e-01, 9.392750e-01, 9.392865e-01, 9.392980e-01, 9.393095e-01, 9.393209e-01, 9.393324e-01, 9.393439e-01, 9.393554e-01, 9.393668e-01, 9.393784e-01, 9.393898e-01, 9.394013e-01, 9.394128e-01, 9.394243e-01, 9.394357e-01, 9.394472e-01, 9.394587e-01, 9.394702e-01, 9.394816e-01, 9.394932e-01, 9.395046e-01, 9.395161e-01, 9.395276e-01, 9.395391e-01, 9.395505e-01, 9.395620e-01, 9.395735e-01, 9.395850e-01, 9.395964e-01, 9.396080e-01, 9.396194e-01, 9.396308e-01, 9.396424e-01, 9.396538e-01, 9.396653e-01, 9.396768e-01, 9.396883e-01, 9.396997e-01, 9.397112e-01, 9.397227e-01, 9.397342e-01, 9.397456e-01, 9.397572e-01, 9.397686e-01, 9.397800e-01, 9.397916e-01, 9.398030e-01, 9.398145e-01, 9.398260e-01, 9.398375e-01, 9.398489e-01, 9.398604e-01, 9.398718e-01, 9.398834e-01, 9.398948e-01, 9.399062e-01, 9.399178e-01, 9.399292e-01, 9.399408e-01, 9.399522e-01, 9.399637e-01, 9.399751e-01, 9.399866e-01, 9.399981e-01, 9.400095e-01, 9.400210e-01, 9.400325e-01, 9.400440e-01, 9.400554e-01, 9.400670e-01, 9.400784e-01, 9.400898e-01, 9.401014e-01, 9.401128e-01, 9.401243e-01, 9.401358e-01, 9.401473e-01, 9.401587e-01, 9.401702e-01, 9.401817e-01, 9.401931e-01, 9.402046e-01, 9.402161e-01, 9.402275e-01, 9.402390e-01, 9.402505e-01, 9.402620e-01, 9.402735e-01, 9.402848e-01, 9.402964e-01, 9.403079e-01, 9.403194e-01, 9.403308e-01, 9.403423e-01, 9.403538e-01, 9.403652e-01, 9.403767e-01, 9.403881e-01, 9.403996e-01, 9.404111e-01, 9.404225e-01, 9.404340e-01, 9.404455e-01, 9.404570e-01, 9.404685e-01, 9.404799e-01, 9.404914e-01, 9.405029e-01, 9.405143e-01, 9.405258e-01, 9.405373e-01, 9.405488e-01, 9.405602e-01, 9.405717e-01, 9.405832e-01, 9.405946e-01, 9.406061e-01, 9.406176e-01, 9.406290e-01, 9.406405e-01, 9.406520e-01, 9.406634e-01, 9.406749e-01, 9.406863e-01, 9.406979e-01, 9.407094e-01, 9.407207e-01, 9.407323e-01, 9.407437e-01, 9.407551e-01, 9.407667e-01, 9.407781e-01, 9.407896e-01, 9.408011e-01, 9.408125e-01, 9.408240e-01, 9.408355e-01, 9.408469e-01, 9.408584e-01, 9.408699e-01, 9.408813e-01, 9.408928e-01, 9.409043e-01, 9.409157e-01, 9.409272e-01, 9.409387e-01, 9.409501e-01, 9.409616e-01, 9.409730e-01, 9.409845e-01, 9.409960e-01, 9.410074e-01, 9.410190e-01, 9.410304e-01, 9.410418e-01, 9.410534e-01, 9.410648e-01, 9.410763e-01, 9.410878e-01, 9.410992e-01, 9.411107e-01, 9.411222e-01, 9.411336e-01, 9.411451e-01, 9.411566e-01, 9.411680e-01, 9.411795e-01, 9.411910e-01, 9.412024e-01, 9.412138e-01, 9.412253e-01, 9.412368e-01, 9.412482e-01, 9.412597e-01, 9.412712e-01, 9.412826e-01, 9.412941e-01, 9.413056e-01, 9.413170e-01, 9.413285e-01, 9.413400e-01, 9.413514e-01, 9.413629e-01, 9.413744e-01, 9.413858e-01, 9.413972e-01, 9.414088e-01, 9.414202e-01, 9.414316e-01, 9.414431e-01, 9.414546e-01, 9.414660e-01, 9.414775e-01, 9.414890e-01, 9.415004e-01, 9.415119e-01, 9.415234e-01, 9.415348e-01, 9.415463e-01, 9.415577e-01, 9.415692e-01, 9.415807e-01, 9.415921e-01, 9.416037e-01, 9.416150e-01, 9.416265e-01, 9.416379e-01, 9.416495e-01, 9.416609e-01, 9.416723e-01, 9.416839e-01, 9.416953e-01, 9.417067e-01, 9.417182e-01, 9.417297e-01, 9.417411e-01, 9.417526e-01, 9.417640e-01, 9.417756e-01, 9.417869e-01, 9.417984e-01, 9.418100e-01, 9.418213e-01, 9.418328e-01, 9.418442e-01, 9.418558e-01, 9.418672e-01, 9.418786e-01, 9.418901e-01, 9.419016e-01, 9.419130e-01, 9.419245e-01, 9.419359e-01, 9.419474e-01, 9.419588e-01, 9.419703e-01, 9.419817e-01, 9.419932e-01, 9.420047e-01, 9.420161e-01, 9.420276e-01, 9.420391e-01, 9.420505e-01, 9.420620e-01, 9.420734e-01, 9.420849e-01, 9.420964e-01, 9.421078e-01, 9.421192e-01, 9.421307e-01, 9.421422e-01, 9.421536e-01, 9.421651e-01, 9.421766e-01, 9.421880e-01, 9.421995e-01, 9.422109e-01, 9.422224e-01, 9.422339e-01, 9.422453e-01, 9.422567e-01, 9.422682e-01, 9.422797e-01, 9.422911e-01, 9.423026e-01, 9.423140e-01, 9.423255e-01, 9.423370e-01, 9.423484e-01, 9.423599e-01, 9.423713e-01, 9.423828e-01, 9.423943e-01, 9.424057e-01, 9.424171e-01, 9.424285e-01, 9.424401e-01, 9.424515e-01, 9.424629e-01, 9.424744e-01, 9.424859e-01, 9.424974e-01, 9.425088e-01, 9.425202e-01, 9.425316e-01, 9.425431e-01, 9.425546e-01, 9.425660e-01, 9.425775e-01, 9.425889e-01, 9.426004e-01, 9.426119e-01, 9.426233e-01, 9.426348e-01, 9.426462e-01, 9.426577e-01, 9.426692e-01, 9.426806e-01, 9.426920e-01, 9.427035e-01, 9.427149e-01, 9.427264e-01, 9.427379e-01, 9.427493e-01, 9.427607e-01, 9.427722e-01, 9.427837e-01, 9.427952e-01, 9.428065e-01, 9.428180e-01, 9.428294e-01, 9.428409e-01, 9.428524e-01, 9.428638e-01, 9.428753e-01, 9.428867e-01, 9.428982e-01, 9.429096e-01, 9.429211e-01, 9.429325e-01, 9.429440e-01, 9.429554e-01, 9.429669e-01, 9.429783e-01, 9.429898e-01, 9.430013e-01, 9.430127e-01, 9.430241e-01, 9.430355e-01, 9.430470e-01, 9.430586e-01, 9.430699e-01, 9.430814e-01, 9.430928e-01, 9.431043e-01, 9.431157e-01, 9.431272e-01, 9.431387e-01, 9.431501e-01, 9.431615e-01, 9.431730e-01, 9.431844e-01, 9.431959e-01, 9.432073e-01, 9.432188e-01, 9.432303e-01, 9.432417e-01, 9.432531e-01, 9.432645e-01, 9.432760e-01, 9.432874e-01, 9.432989e-01, 9.433104e-01, 9.433218e-01, 9.433333e-01, 9.433447e-01, 9.433562e-01, 9.433676e-01, 9.433790e-01, 9.433905e-01, 9.434020e-01, 9.434134e-01, 9.434248e-01, 9.434363e-01, 9.434477e-01, 9.434592e-01, 9.434706e-01, 9.434820e-01, 9.434935e-01, 9.435050e-01, 9.435164e-01, 9.435279e-01, 9.435393e-01, 9.435508e-01, 9.435622e-01, 9.435736e-01, 9.435850e-01, 9.435965e-01, 9.436080e-01, 9.436194e-01, 9.436309e-01, 9.436423e-01, 9.436538e-01, 9.436652e-01, 9.436767e-01, 9.436880e-01, 9.436995e-01, 9.437110e-01, 9.437225e-01, 9.437339e-01, 9.437453e-01, 9.437568e-01, 9.437682e-01, 9.437796e-01, 9.437911e-01, 9.438025e-01, 9.438140e-01, 9.438254e-01, 9.438368e-01, 9.438484e-01, 9.438598e-01, 9.438712e-01, 9.438826e-01, 9.438941e-01, 9.439055e-01, 9.439170e-01, 9.439284e-01, 9.439399e-01, 9.439513e-01, 9.439627e-01, 9.439741e-01, 9.439856e-01, 9.439971e-01, 9.440085e-01, 9.440200e-01, 9.440314e-01, 9.440429e-01, 9.440543e-01, 9.440657e-01, 9.440772e-01, 9.440886e-01, 9.441000e-01, 9.441115e-01, 9.441229e-01, 9.441344e-01, 9.441458e-01, 9.441572e-01, 9.441687e-01, 9.441801e-01, 9.441915e-01, 9.442031e-01, 9.442145e-01, 9.442260e-01, 9.442374e-01, 9.442488e-01, 9.442602e-01, 9.442717e-01, 9.442831e-01, 9.442946e-01, 9.443060e-01, 9.443175e-01, 9.443288e-01, 9.443403e-01, 9.443517e-01, 9.443632e-01, 9.443746e-01, 9.443861e-01, 9.443975e-01, 9.444090e-01, 9.444203e-01, 9.444318e-01, 9.444432e-01, 9.444547e-01, 9.444661e-01, 9.444776e-01, 9.444890e-01, 9.445004e-01, 9.445119e-01, 9.445233e-01, 9.445347e-01, 9.445462e-01, 9.445577e-01, 9.445691e-01, 9.445806e-01, 9.445920e-01, 9.446034e-01, 9.446149e-01, 9.446263e-01, 9.446378e-01, 9.446492e-01, 9.446606e-01, 9.446720e-01, 9.446835e-01, 9.446949e-01, 9.447064e-01, 9.447178e-01, 9.447293e-01, 9.447407e-01, 9.447521e-01, 9.447635e-01, 9.447750e-01, 9.447864e-01, 9.447979e-01, 9.448093e-01, 9.448208e-01, 9.448322e-01, 9.448436e-01, 9.448550e-01, 9.448665e-01, 9.448779e-01, 9.448893e-01, 9.449007e-01, 9.449121e-01, 9.449236e-01, 9.449350e-01, 9.449465e-01, 9.449579e-01, 9.449694e-01, 9.449808e-01, 9.449922e-01, 9.450036e-01, 9.450151e-01, 9.450265e-01, 9.450380e-01, 9.450494e-01, 9.450608e-01, 9.450723e-01, 9.450837e-01, 9.450951e-01, 9.451066e-01, 9.451180e-01, 9.451295e-01, 9.451409e-01, 9.451523e-01, 9.451638e-01, 9.451752e-01, 9.451866e-01, 9.451981e-01, 9.452095e-01, 9.452209e-01, 9.452324e-01, 9.452437e-01, 9.452552e-01, 9.452666e-01, 9.452780e-01, 9.452895e-01, 9.453009e-01, 9.453124e-01, 9.453238e-01, 9.453352e-01, 9.453467e-01, 9.453581e-01, 9.453695e-01, 9.453810e-01, 9.453924e-01, 9.454039e-01, 9.454153e-01, 9.454267e-01, 9.454381e-01, 9.454495e-01, 9.454610e-01, 9.454724e-01, 9.454838e-01, 9.454952e-01, 9.455067e-01, 9.455181e-01, 9.455296e-01, 9.455410e-01, 9.455525e-01, 9.455639e-01, 9.455753e-01, 9.455867e-01, 9.455981e-01, 9.456096e-01, 9.456210e-01, 9.456324e-01, 9.456438e-01, 9.456553e-01, 9.456667e-01, 9.456782e-01, 9.456896e-01, 9.457011e-01, 9.457124e-01, 9.457239e-01, 9.457353e-01, 9.457467e-01, 9.457581e-01, 9.457695e-01, 9.457810e-01, 9.457924e-01, 9.458039e-01, 9.458153e-01, 9.458268e-01, 9.458382e-01, 9.458495e-01, 9.458610e-01, 9.458724e-01, 9.458839e-01, 9.458953e-01, 9.459067e-01, 9.459181e-01, 9.459296e-01, 9.459410e-01, 9.459524e-01, 9.459638e-01, 9.459752e-01, 9.459867e-01, 9.459981e-01, 9.460096e-01, 9.460210e-01, 9.460325e-01, 9.460439e-01, 9.460552e-01, 9.460667e-01, 9.460781e-01, 9.460896e-01, 9.461010e-01, 9.461124e-01, 9.461238e-01, 9.461353e-01, 9.461467e-01, 9.461581e-01, 9.461695e-01, 9.461809e-01, 9.461924e-01, 9.462038e-01, 9.462153e-01, 9.462266e-01, 9.462380e-01, 9.462495e-01, 9.462609e-01, 9.462724e-01, 9.462838e-01, 9.462953e-01, 9.463066e-01, 9.463180e-01, 9.463295e-01, 9.463409e-01, 9.463524e-01, 9.463637e-01, 9.463752e-01, 9.463866e-01, 9.463980e-01, 9.464094e-01, 9.464208e-01, 9.464323e-01, 9.464437e-01, 9.464551e-01, 9.464665e-01, 9.464779e-01, 9.464894e-01, 9.465008e-01, 9.465123e-01, 9.465236e-01, 9.465351e-01, 9.465465e-01, 9.465579e-01, 9.465694e-01, 9.465808e-01, 9.465922e-01, 9.466036e-01, 9.466150e-01, 9.466265e-01, 9.466379e-01, 9.466494e-01, 9.466607e-01, 9.466721e-01, 9.466836e-01, 9.466950e-01, 9.467065e-01, 9.467178e-01, 9.467292e-01, 9.467407e-01, 9.467521e-01, 9.467635e-01, 9.467750e-01, 9.467863e-01, 9.467978e-01, 9.468092e-01, 9.468206e-01, 9.468321e-01, 9.468434e-01, 9.468549e-01, 9.468663e-01, 9.468777e-01, 9.468892e-01, 9.469005e-01, 9.469120e-01, 9.469234e-01, 9.469348e-01, 9.469463e-01, 9.469576e-01, 9.469691e-01, 9.469805e-01, 9.469919e-01, 9.470034e-01, 9.470147e-01, 9.470261e-01, 9.470376e-01, 9.470490e-01, 9.470604e-01, 9.470719e-01, 9.470832e-01, 9.470947e-01, 9.471061e-01, 9.471175e-01, 9.471289e-01, 9.471403e-01, 9.471518e-01, 9.471632e-01, 9.471746e-01, 9.471860e-01, 9.471974e-01, 9.472089e-01, 9.472203e-01, 9.472317e-01, 9.472431e-01, 9.472545e-01, 9.472659e-01, 9.472774e-01, 9.472888e-01, 9.473002e-01, 9.473116e-01, 9.473230e-01, 9.473345e-01, 9.473459e-01, 9.473573e-01, 9.473687e-01, 9.473801e-01, 9.473915e-01, 9.474030e-01, 9.474143e-01, 9.474258e-01, 9.474372e-01, 9.474486e-01, 9.474600e-01, 9.474714e-01, 9.474829e-01, 9.474943e-01, 9.475057e-01, 9.475171e-01, 9.475285e-01, 9.475399e-01, 9.475513e-01, 9.475628e-01, 9.475742e-01, 9.475855e-01, 9.475970e-01, 9.476084e-01, 9.476199e-01, 9.476312e-01, 9.476426e-01, 9.476541e-01, 9.476655e-01, 9.476768e-01, 9.476883e-01, 9.476997e-01, 9.477111e-01, 9.477225e-01, 9.477339e-01, 9.477454e-01, 9.477568e-01, 9.477682e-01, 9.477796e-01, 9.477910e-01, 9.478024e-01, 9.478139e-01, 9.478253e-01, 9.478366e-01, 9.478481e-01, 9.478595e-01, 9.478709e-01, 9.478823e-01, 9.478937e-01, 9.479052e-01, 9.479165e-01, 9.479280e-01, 9.479394e-01, 9.479507e-01, 9.479622e-01, 9.479736e-01, 9.479851e-01, 9.479964e-01, 9.480078e-01, 9.480193e-01, 9.480307e-01, 9.480420e-01, 9.480535e-01, 9.480649e-01, 9.480763e-01, 9.480878e-01, 9.480991e-01, 9.481105e-01, 9.481220e-01, 9.481334e-01, 9.481447e-01, 9.481562e-01, 9.481676e-01, 9.481789e-01, 9.481904e-01, 9.482018e-01, 9.482132e-01, 9.482246e-01, 9.482360e-01, 9.482474e-01, 9.482589e-01, 9.482703e-01, 9.482816e-01, 9.482931e-01, 9.483045e-01, 9.483159e-01, 9.483273e-01, 9.483387e-01, 9.483501e-01, 9.483615e-01, 9.483730e-01, 9.483843e-01, 9.483957e-01, 9.484072e-01, 9.484186e-01, 9.484299e-01, 9.484414e-01, 9.484528e-01, 9.484642e-01, 9.484757e-01, 9.484870e-01, 9.484984e-01, 9.485099e-01, 9.485212e-01, 9.485326e-01, 9.485441e-01, 9.485554e-01, 9.485669e-01, 9.485782e-01, 9.485897e-01, 9.486011e-01, 9.486125e-01, 9.486239e-01, 9.486353e-01, 9.486467e-01, 9.486581e-01, 9.486696e-01, 9.486809e-01, 9.486923e-01, 9.487038e-01, 9.487151e-01, 9.487265e-01, 9.487379e-01, 9.487494e-01, 9.487608e-01, 9.487721e-01, 9.487836e-01, 9.487950e-01, 9.488063e-01, 9.488178e-01, 9.488291e-01, 9.488406e-01, 9.488520e-01, 9.488634e-01, 9.488748e-01, 9.488862e-01, 9.488976e-01, 9.489090e-01, 9.489204e-01, 9.489318e-01, 9.489433e-01, 9.489546e-01, 9.489660e-01, 9.489774e-01, 9.489889e-01, 9.490002e-01, 9.490116e-01, 9.490231e-01, 9.490344e-01, 9.490458e-01, 9.490573e-01, 9.490686e-01, 9.490800e-01, 9.490914e-01, 9.491029e-01, 9.491143e-01, 9.491256e-01, 9.491371e-01, 9.491484e-01, 9.491599e-01, 9.491713e-01, 9.491826e-01, 9.491941e-01, 9.492055e-01, 9.492169e-01, 9.492283e-01, 9.492397e-01, 9.492511e-01, 9.492624e-01, 9.492739e-01, 9.492853e-01, 9.492967e-01, 9.493081e-01, 9.493195e-01, 9.493309e-01, 9.493423e-01, 9.493537e-01, 9.493650e-01, 9.493765e-01, 9.493879e-01, 9.493993e-01, 9.494107e-01, 9.494221e-01, 9.494335e-01, 9.494448e-01, 9.494563e-01, 9.494677e-01, 9.494790e-01, 9.494905e-01, 9.495019e-01, 9.495133e-01, 9.495246e-01, 9.495361e-01, 9.495474e-01, 9.495589e-01, 9.495703e-01, 9.495816e-01, 9.495931e-01, 9.496045e-01, 9.496159e-01, 9.496272e-01, 9.496387e-01, 9.496500e-01, 9.496614e-01, 9.496729e-01, 9.496843e-01, 9.496957e-01, 9.497070e-01, 9.497185e-01, 9.497298e-01, 9.497412e-01, 9.497526e-01, 9.497640e-01, 9.497754e-01, 9.497868e-01, 9.497982e-01, 9.498096e-01, 9.498211e-01, 9.498324e-01, 9.498438e-01, 9.498552e-01, 9.498667e-01, 9.498780e-01, 9.498894e-01, 9.499007e-01, 9.499122e-01, 9.499236e-01, 9.499350e-01, 9.499463e-01, 9.499578e-01, 9.499691e-01, 9.499806e-01, 9.499919e-01, 9.500033e-01, 9.500147e-01, 9.500262e-01, 9.500375e-01, 9.500489e-01, 9.500603e-01, 9.500717e-01, 9.500831e-01, 9.500945e-01, 9.501058e-01, 9.501173e-01, 9.501286e-01, 9.501401e-01, 9.501514e-01, 9.501629e-01, 9.501742e-01, 9.501857e-01, 9.501970e-01, 9.502084e-01, 9.502198e-01, 9.502313e-01, 9.502426e-01, 9.502540e-01, 9.502653e-01, 9.502768e-01, 9.502882e-01, 9.502996e-01, 9.503109e-01, 9.503224e-01, 9.503337e-01, 9.503452e-01, 9.503565e-01, 9.503679e-01, 9.503793e-01, 9.503908e-01, 9.504021e-01, 9.504135e-01, 9.504249e-01, 9.504363e-01, 9.504477e-01, 9.504591e-01, 9.504704e-01, 9.504819e-01, 9.504932e-01, 9.505046e-01, 9.505160e-01, 9.505274e-01, 9.505388e-01, 9.505502e-01, 9.505616e-01, 9.505730e-01, 9.505844e-01, 9.505957e-01, 9.506072e-01, 9.506186e-01, 9.506299e-01, 9.506413e-01, 9.506527e-01, 9.506641e-01, 9.506755e-01, 9.506869e-01, 9.506983e-01, 9.507097e-01, 9.507210e-01, 9.507325e-01, 9.507439e-01, 9.507552e-01, 9.507666e-01, 9.507779e-01, 9.507894e-01, 9.508008e-01, 9.508122e-01, 9.508235e-01, 9.508350e-01, 9.508463e-01, 9.508577e-01, 9.508691e-01, 9.508805e-01, 9.508919e-01, 9.509032e-01, 9.509147e-01, 9.509261e-01, 9.509374e-01, 9.509488e-01, 9.509602e-01, 9.509716e-01, 9.509830e-01, 9.509944e-01, 9.510058e-01, 9.510171e-01, 9.510285e-01, 9.510399e-01, 9.510514e-01, 9.510627e-01, 9.510741e-01, 9.510854e-01, 9.510968e-01, 9.511083e-01, 9.511196e-01, 9.511310e-01, 9.511424e-01, 9.511538e-01, 9.511652e-01, 9.511765e-01, 9.511880e-01, 9.511993e-01, 9.512107e-01, 9.512221e-01, 9.512334e-01, 9.512449e-01, 9.512563e-01, 9.512676e-01, 9.512790e-01, 9.512904e-01, 9.513018e-01, 9.513132e-01, 9.513245e-01, 9.513360e-01, 9.513473e-01, 9.513587e-01, 9.513701e-01, 9.513814e-01, 9.513929e-01, 9.514042e-01, 9.514157e-01, 9.514270e-01, 9.514384e-01, 9.514498e-01, 9.514611e-01, 9.514725e-01, 9.514840e-01, 9.514953e-01, 9.515067e-01, 9.515181e-01, 9.515294e-01, 9.515409e-01, 9.515522e-01, 9.515636e-01, 9.515750e-01, 9.515864e-01, 9.515978e-01, 9.516091e-01, 9.516205e-01, 9.516320e-01, 9.516433e-01, 9.516547e-01, 9.516661e-01, 9.516774e-01, 9.516888e-01, 9.517002e-01, 9.517116e-01, 9.517229e-01, 9.517344e-01, 9.517457e-01, 9.517571e-01, 9.517685e-01, 9.517798e-01, 9.517913e-01, 9.518026e-01, 9.518140e-01, 9.518254e-01, 9.518368e-01, 9.518481e-01, 9.518595e-01, 9.518709e-01, 9.518822e-01, 9.518937e-01, 9.519051e-01, 9.519164e-01, 9.519278e-01, 9.519392e-01, 9.519506e-01, 9.519620e-01, 9.519733e-01, 9.519847e-01, 9.519961e-01, 9.520075e-01, 9.520188e-01, 9.520302e-01, 9.520416e-01, 9.520530e-01, 9.520644e-01, 9.520757e-01, 9.520871e-01, 9.520985e-01, 9.521099e-01, 9.521213e-01, 9.521326e-01, 9.521440e-01, 9.521554e-01, 9.521668e-01, 9.521782e-01, 9.521895e-01, 9.522009e-01, 9.522123e-01, 9.522237e-01, 9.522350e-01, 9.522464e-01, 9.522578e-01, 9.522691e-01, 9.522806e-01, 9.522919e-01, 9.523033e-01, 9.523147e-01, 9.523261e-01, 9.523374e-01, 9.523488e-01, 9.523602e-01, 9.523715e-01, 9.523829e-01, 9.523944e-01, 9.524057e-01, 9.524170e-01, 9.524285e-01, 9.524398e-01, 9.524512e-01, 9.524626e-01, 9.524740e-01, 9.524853e-01, 9.524966e-01, 9.525081e-01, 9.525195e-01, 9.525308e-01, 9.525422e-01, 9.525536e-01, 9.525650e-01, 9.525763e-01, 9.525877e-01, 9.525991e-01, 9.526104e-01, 9.526218e-01, 9.526332e-01, 9.526446e-01, 9.526559e-01, 9.526673e-01, 9.526787e-01, 9.526901e-01, 9.527014e-01, 9.527128e-01, 9.527242e-01, 9.527355e-01, 9.527469e-01, 9.527584e-01, 9.527697e-01, 9.527810e-01, 9.527924e-01, 9.528039e-01, 9.528152e-01, 9.528266e-01, 9.528379e-01, 9.528493e-01, 9.528607e-01, 9.528720e-01, 9.528834e-01, 9.528948e-01, 9.529062e-01, 9.529175e-01, 9.529288e-01, 9.529403e-01, 9.529517e-01, 9.529630e-01, 9.529744e-01, 9.529858e-01, 9.529971e-01, 9.530085e-01, 9.530199e-01, 9.530313e-01, 9.530426e-01, 9.530540e-01, 9.530653e-01, 9.530767e-01, 9.530881e-01, 9.530995e-01, 9.531108e-01, 9.531222e-01, 9.531336e-01, 9.531450e-01, 9.531563e-01, 9.531677e-01, 9.531790e-01, 9.531904e-01, 9.532018e-01, 9.532132e-01, 9.532245e-01, 9.532359e-01, 9.532473e-01, 9.532586e-01, 9.532700e-01, 9.532813e-01, 9.532928e-01, 9.533041e-01, 9.533155e-01, 9.533268e-01, 9.533382e-01, 9.533496e-01, 9.533610e-01, 9.533723e-01, 9.533837e-01, 9.533951e-01, 9.534065e-01, 9.534178e-01, 9.534292e-01, 9.534405e-01, 9.534519e-01, 9.534633e-01, 9.534746e-01, 9.534860e-01, 9.534974e-01, 9.535087e-01, 9.535201e-01, 9.535315e-01, 9.535428e-01, 9.535542e-01, 9.535655e-01, 9.535770e-01, 9.535883e-01, 9.535997e-01, 9.536110e-01, 9.536224e-01, 9.536338e-01, 9.536452e-01, 9.536565e-01, 9.536679e-01, 9.536792e-01, 9.536906e-01, 9.537020e-01, 9.537134e-01, 9.537247e-01, 9.537361e-01, 9.537474e-01, 9.537588e-01, 9.537702e-01, 9.537815e-01, 9.537929e-01, 9.538043e-01, 9.538156e-01, 9.538270e-01, 9.538384e-01, 9.538497e-01, 9.538611e-01, 9.538724e-01, 9.538838e-01, 9.538952e-01, 9.539066e-01, 9.539179e-01, 9.539293e-01, 9.539406e-01, 9.539520e-01, 9.539633e-01, 9.539747e-01, 9.539861e-01, 9.539975e-01, 9.540088e-01, 9.540202e-01, 9.540315e-01, 9.540429e-01, 9.540543e-01, 9.540657e-01, 9.540770e-01, 9.540884e-01, 9.540997e-01, 9.541111e-01, 9.541224e-01, 9.541337e-01, 9.541452e-01, 9.541566e-01, 9.541679e-01, 9.541793e-01, 9.541906e-01, 9.542019e-01, 9.542133e-01, 9.542248e-01, 9.542361e-01, 9.542475e-01, 9.542588e-01, 9.542702e-01, 9.542815e-01, 9.542928e-01, 9.543042e-01, 9.543155e-01, 9.543270e-01, 9.543384e-01, 9.543497e-01, 9.543610e-01, 9.543724e-01, 9.543837e-01, 9.543951e-01, 9.544064e-01, 9.544179e-01, 9.544293e-01, 9.544406e-01, 9.544519e-01, 9.544633e-01, 9.544746e-01, 9.544860e-01, 9.544973e-01, 9.545087e-01, 9.545200e-01, 9.545315e-01, 9.545428e-01, 9.545542e-01, 9.545655e-01, 9.545769e-01, 9.545882e-01, 9.545996e-01, 9.546109e-01, 9.546223e-01, 9.546337e-01, 9.546450e-01, 9.546564e-01, 9.546678e-01, 9.546791e-01, 9.546905e-01, 9.547018e-01, 9.547132e-01, 9.547246e-01, 9.547359e-01, 9.547473e-01, 9.547586e-01, 9.547699e-01, 9.547813e-01, 9.547927e-01, 9.548041e-01, 9.548154e-01, 9.548268e-01, 9.548382e-01, 9.548495e-01, 9.548608e-01, 9.548722e-01, 9.548835e-01, 9.548949e-01, 9.549062e-01, 9.549176e-01, 9.549289e-01, 9.549403e-01, 9.549516e-01, 9.549631e-01, 9.549744e-01, 9.549858e-01, 9.549971e-01, 9.550085e-01, 9.550198e-01, 9.550312e-01, 9.550425e-01, 9.550539e-01, 9.550653e-01, 9.550766e-01, 9.550880e-01, 9.550993e-01, 9.551106e-01, 9.551220e-01, 9.551333e-01, 9.551447e-01, 9.551560e-01, 9.551674e-01, 9.551787e-01, 9.551902e-01, 9.552015e-01, 9.552129e-01, 9.552242e-01, 9.552356e-01, 9.552469e-01, 9.552583e-01, 9.552696e-01, 9.552810e-01, 9.552923e-01, 9.553037e-01, 9.553151e-01, 9.553264e-01, 9.553378e-01, 9.553491e-01, 9.553604e-01, 9.553718e-01, 9.553831e-01, 9.553945e-01, 9.554058e-01, 9.554172e-01, 9.554285e-01, 9.554399e-01, 9.554513e-01, 9.554626e-01, 9.554740e-01, 9.554853e-01, 9.554967e-01, 9.555080e-01, 9.555194e-01, 9.555307e-01, 9.555420e-01, 9.555534e-01, 9.555647e-01, 9.555761e-01, 9.555874e-01, 9.555988e-01, 9.556102e-01, 9.556215e-01, 9.556329e-01, 9.556442e-01, 9.556556e-01, 9.556669e-01, 9.556783e-01, 9.556896e-01, 9.557010e-01, 9.557123e-01, 9.557236e-01, 9.557350e-01, 9.557464e-01, 9.557577e-01, 9.557691e-01, 9.557804e-01, 9.557918e-01, 9.558031e-01, 9.558145e-01, 9.558258e-01, 9.558372e-01, 9.558485e-01, 9.558599e-01, 9.558712e-01, 9.558826e-01, 9.558939e-01, 9.559053e-01, 9.559166e-01, 9.559280e-01, 9.559394e-01, 9.559507e-01, 9.559621e-01, 9.559734e-01, 9.559847e-01, 9.559961e-01, 9.560074e-01, 9.560188e-01, 9.560301e-01, 9.560414e-01, 9.560528e-01, 9.560641e-01, 9.560754e-01, 9.560868e-01, 9.560981e-01, 9.561095e-01, 9.561208e-01, 9.561322e-01, 9.561436e-01, 9.561549e-01, 9.561663e-01, 9.561776e-01, 9.561890e-01, 9.562003e-01, 9.562117e-01, 9.562230e-01, 9.562344e-01, 9.562457e-01, 9.562570e-01, 9.562683e-01, 9.562797e-01, 9.562910e-01, 9.563024e-01, 9.563137e-01, 9.563251e-01, 9.563364e-01, 9.563478e-01, 9.563591e-01, 9.563705e-01, 9.563819e-01, 9.563932e-01, 9.564046e-01, 9.564159e-01, 9.564272e-01, 9.564385e-01, 9.564499e-01, 9.564612e-01, 9.564726e-01, 9.564839e-01, 9.564953e-01, 9.565066e-01, 9.565180e-01, 9.565293e-01, 9.565406e-01, 9.565520e-01, 9.565634e-01, 9.565746e-01, 9.565860e-01, 9.565973e-01, 9.566087e-01, 9.566200e-01, 9.566314e-01, 9.566427e-01, 9.566541e-01, 9.566655e-01, 9.566768e-01, 9.566880e-01, 9.566994e-01, 9.567108e-01, 9.567221e-01, 9.567335e-01, 9.567448e-01, 9.567562e-01, 9.567675e-01, 9.567789e-01, 9.567902e-01, 9.568015e-01, 9.568129e-01, 9.568242e-01, 9.568355e-01, 9.568469e-01, 9.568582e-01, 9.568696e-01, 9.568809e-01, 9.568923e-01, 9.569036e-01, 9.569149e-01, 9.569263e-01, 9.569376e-01, 9.569489e-01, 9.569603e-01, 9.569716e-01, 9.569830e-01, 9.569943e-01, 9.570056e-01, 9.570170e-01, 9.570283e-01, 9.570397e-01, 9.570510e-01, 9.570624e-01, 9.570737e-01, 9.570850e-01, 9.570963e-01, 9.571077e-01, 9.571190e-01, 9.571304e-01, 9.571418e-01, 9.571531e-01, 9.571643e-01, 9.571757e-01, 9.571871e-01, 9.571984e-01, 9.572098e-01, 9.572212e-01, 9.572325e-01, 9.572437e-01, 9.572551e-01, 9.572664e-01, 9.572778e-01, 9.572892e-01, 9.573005e-01, 9.573117e-01, 9.573231e-01, 9.573345e-01, 9.573458e-01, 9.573572e-01, 9.573685e-01, 9.573799e-01, 9.573911e-01, 9.574025e-01, 9.574139e-01, 9.574252e-01, 9.574365e-01, 9.574479e-01, 9.574592e-01, 9.574705e-01, 9.574819e-01, 9.574932e-01, 9.575046e-01, 9.575158e-01, 9.575272e-01, 9.575385e-01, 9.575499e-01, 9.575612e-01, 9.575726e-01, 9.575838e-01, 9.575952e-01, 9.576066e-01, 9.576179e-01, 9.576293e-01, 9.576406e-01, 9.576519e-01, 9.576632e-01, 9.576746e-01, 9.576859e-01, 9.576973e-01, 9.577085e-01, 9.577199e-01, 9.577312e-01, 9.577426e-01, 9.577539e-01, 9.577652e-01, 9.577765e-01, 9.577879e-01, 9.577993e-01, 9.578106e-01, 9.578218e-01, 9.578332e-01, 9.578446e-01, 9.578559e-01, 9.578673e-01, 9.578785e-01, 9.578899e-01, 9.579012e-01, 9.579126e-01, 9.579239e-01, 9.579352e-01, 9.579465e-01, 9.579579e-01, 9.579692e-01, 9.579805e-01, 9.579918e-01, 9.580032e-01, 9.580145e-01, 9.580259e-01, 9.580372e-01, 9.580485e-01, 9.580599e-01, 9.580712e-01, 9.580825e-01, 9.580938e-01, 9.581052e-01, 9.581165e-01, 9.581279e-01, 9.581392e-01, 9.581505e-01, 9.581619e-01, 9.581732e-01, 9.581845e-01, 9.581958e-01, 9.582072e-01, 9.582185e-01, 9.582298e-01, 9.582412e-01, 9.582525e-01, 9.582639e-01, 9.582751e-01, 9.582865e-01, 9.582978e-01, 9.583092e-01, 9.583204e-01, 9.583318e-01, 9.583431e-01, 9.583545e-01, 9.583657e-01, 9.583771e-01, 9.583884e-01, 9.583998e-01, 9.584111e-01, 9.584224e-01, 9.584337e-01, 9.584451e-01, 9.584564e-01, 9.584677e-01, 9.584791e-01, 9.584904e-01, 9.585017e-01, 9.585131e-01, 9.585244e-01, 9.585357e-01, 9.585470e-01, 9.585584e-01, 9.585697e-01, 9.585811e-01, 9.585924e-01, 9.586037e-01, 9.586151e-01, 9.586263e-01, 9.586377e-01, 9.586490e-01, 9.586604e-01, 9.586716e-01, 9.586830e-01, 9.586943e-01, 9.587056e-01, 9.587169e-01, 9.587283e-01, 9.587396e-01, 9.587509e-01, 9.587622e-01, 9.587736e-01, 9.587849e-01, 9.587962e-01, 9.588076e-01, 9.588189e-01, 9.588302e-01, 9.588416e-01, 9.588529e-01, 9.588642e-01, 9.588755e-01, 9.588869e-01, 9.588981e-01, 9.589095e-01, 9.589208e-01, 9.589322e-01, 9.589434e-01, 9.589548e-01, 9.589661e-01, 9.589774e-01, 9.589888e-01, 9.590001e-01, 9.590114e-01, 9.590227e-01, 9.590341e-01, 9.590454e-01, 9.590567e-01, 9.590681e-01, 9.590794e-01, 9.590907e-01, 9.591020e-01, 9.591134e-01, 9.591246e-01, 9.591359e-01, 9.591473e-01, 9.591586e-01, 9.591699e-01, 9.591813e-01, 9.591926e-01, 9.592039e-01, 9.592153e-01, 9.592265e-01, 9.592379e-01, 9.592492e-01, 9.592605e-01, 9.592718e-01, 9.592832e-01, 9.592944e-01, 9.593058e-01, 9.593171e-01, 9.593284e-01, 9.593398e-01, 9.593511e-01, 9.593624e-01, 9.593738e-01, 9.593851e-01, 9.593964e-01, 9.594077e-01, 9.594191e-01, 9.594303e-01, 9.594417e-01, 9.594530e-01, 9.594643e-01, 9.594756e-01, 9.594869e-01, 9.594983e-01, 9.595096e-01, 9.595209e-01, 9.595322e-01, 9.595436e-01, 9.595549e-01, 9.595662e-01, 9.595776e-01, 9.595888e-01, 9.596002e-01, 9.596114e-01, 9.596228e-01, 9.596341e-01, 9.596454e-01, 9.596567e-01, 9.596681e-01, 9.596794e-01, 9.596907e-01, 9.597021e-01, 9.597133e-01, 9.597247e-01, 9.597359e-01, 9.597473e-01, 9.597586e-01, 9.597699e-01, 9.597812e-01, 9.597925e-01, 9.598039e-01, 9.598152e-01, 9.598265e-01, 9.598379e-01, 9.598492e-01, 9.598604e-01, 9.598718e-01, 9.598831e-01, 9.598944e-01, 9.599057e-01, 9.599170e-01, 9.599284e-01, 9.599397e-01, 9.599510e-01, 9.599624e-01, 9.599736e-01, 9.599850e-01, 9.599962e-01, 9.600076e-01, 9.600189e-01, 9.600302e-01, 9.600415e-01, 9.600528e-01, 9.600642e-01, 9.600755e-01, 9.600868e-01, 9.600981e-01, 9.601094e-01, 9.601207e-01, 9.601321e-01, 9.601434e-01, 9.601547e-01, 9.601660e-01, 9.601773e-01, 9.601886e-01, 9.602000e-01, 9.602113e-01, 9.602225e-01, 9.602339e-01, 9.602452e-01, 9.602565e-01, 9.602679e-01, 9.602792e-01, 9.602905e-01, 9.603018e-01, 9.603131e-01, 9.603243e-01, 9.603357e-01, 9.603471e-01, 9.603583e-01, 9.603697e-01, 9.603810e-01, 9.603923e-01, 9.604036e-01, 9.604149e-01, 9.604262e-01, 9.604375e-01, 9.604489e-01, 9.604602e-01, 9.604715e-01, 9.604828e-01, 9.604941e-01, 9.605054e-01, 9.605168e-01, 9.605280e-01, 9.605393e-01, 9.605507e-01, 9.605620e-01, 9.605733e-01, 9.605846e-01, 9.605960e-01, 9.606072e-01, 9.606186e-01, 9.606298e-01, 9.606411e-01, 9.606524e-01, 9.606638e-01, 9.606751e-01, 9.606864e-01, 9.606978e-01, 9.607090e-01, 9.607204e-01, 9.607316e-01, 9.607430e-01, 9.607543e-01, 9.607656e-01, 9.607769e-01, 9.607882e-01, 9.607995e-01, 9.608108e-01, 9.608221e-01, 9.608334e-01, 9.608447e-01, 9.608561e-01, 9.608673e-01, 9.608787e-01, 9.608901e-01, 9.609013e-01, 9.609126e-01, 9.609239e-01, 9.609352e-01, 9.609465e-01, 9.609579e-01, 9.609692e-01, 9.609805e-01, 9.609917e-01, 9.610031e-01, 9.610144e-01, 9.610257e-01, 9.610370e-01, 9.610484e-01, 9.610596e-01, 9.610710e-01, 9.610822e-01, 9.610935e-01, 9.611048e-01, 9.611162e-01, 9.611275e-01, 9.611388e-01, 9.611501e-01, 9.611614e-01, 9.611727e-01, 9.611840e-01, 9.611953e-01, 9.612067e-01, 9.612179e-01, 9.612293e-01, 9.612405e-01, 9.612519e-01, 9.612631e-01, 9.612745e-01, 9.612858e-01, 9.612970e-01, 9.613084e-01, 9.613196e-01, 9.613310e-01, 9.613423e-01, 9.613536e-01, 9.613649e-01, 9.613762e-01, 9.613875e-01, 9.613988e-01, 9.614101e-01, 9.614214e-01, 9.614327e-01, 9.614441e-01, 9.614553e-01, 9.614667e-01, 9.614779e-01, 9.614893e-01, 9.615006e-01, 9.615119e-01, 9.615232e-01, 9.615344e-01, 9.615458e-01, 9.615571e-01, 9.615684e-01, 9.615797e-01, 9.615910e-01, 9.616023e-01, 9.616137e-01, 9.616249e-01, 9.616362e-01, 9.616475e-01, 9.616588e-01, 9.616702e-01, 9.616814e-01, 9.616928e-01, 9.617040e-01, 9.617154e-01, 9.617267e-01, 9.617379e-01, 9.617493e-01, 9.617605e-01, 9.617718e-01, 9.617831e-01, 9.617945e-01, 9.618058e-01, 9.618170e-01, 9.618284e-01, 9.618396e-01, 9.618510e-01, 9.618623e-01, 9.618736e-01, 9.618849e-01, 9.618962e-01, 9.619075e-01, 9.619188e-01, 9.619301e-01, 9.619414e-01, 9.619527e-01, 9.619640e-01, 9.619752e-01, 9.619866e-01, 9.619979e-01, 9.620092e-01, 9.620205e-01, 9.620318e-01, 9.620431e-01, 9.620544e-01, 9.620657e-01, 9.620770e-01, 9.620883e-01, 9.620996e-01, 9.621108e-01, 9.621222e-01, 9.621335e-01, 9.621448e-01, 9.621561e-01, 9.621673e-01, 9.621787e-01, 9.621900e-01, 9.622013e-01, 9.622126e-01, 9.622238e-01, 9.622352e-01, 9.622465e-01, 9.622578e-01, 9.622691e-01, 9.622803e-01, 9.622917e-01, 9.623029e-01, 9.623143e-01, 9.623256e-01, 9.623368e-01, 9.623482e-01, 9.623594e-01, 9.623707e-01, 9.623821e-01, 9.623933e-01, 9.624047e-01, 9.624159e-01, 9.624272e-01, 9.624386e-01, 9.624498e-01, 9.624612e-01, 9.624724e-01, 9.624837e-01, 9.624950e-01, 9.625063e-01, 9.625176e-01, 9.625289e-01, 9.625402e-01, 9.625515e-01, 9.625628e-01, 9.625741e-01, 9.625854e-01, 9.625967e-01, 9.626080e-01, 9.626193e-01, 9.626306e-01, 9.626418e-01, 9.626532e-01, 9.626645e-01, 9.626758e-01, 9.626871e-01, 9.626983e-01, 9.627096e-01, 9.627209e-01, 9.627322e-01, 9.627436e-01, 9.627548e-01, 9.627661e-01, 9.627774e-01, 9.627887e-01, 9.628000e-01, 9.628114e-01, 9.628226e-01, 9.628339e-01, 9.628452e-01, 9.628565e-01, 9.628677e-01, 9.628791e-01, 9.628904e-01, 9.629017e-01, 9.629130e-01, 9.629242e-01, 9.629355e-01, 9.629468e-01, 9.629581e-01, 9.629694e-01, 9.629807e-01, 9.629920e-01, 9.630033e-01, 9.630146e-01, 9.630259e-01, 9.630371e-01, 9.630485e-01, 9.630598e-01, 9.630710e-01, 9.630824e-01, 9.630936e-01, 9.631049e-01, 9.631162e-01, 9.631275e-01, 9.631388e-01, 9.631500e-01, 9.631614e-01, 9.631727e-01, 9.631839e-01, 9.631953e-01, 9.632065e-01, 9.632178e-01, 9.632292e-01, 9.632404e-01, 9.632517e-01, 9.632630e-01, 9.632743e-01, 9.632856e-01, 9.632968e-01, 9.633082e-01, 9.633195e-01, 9.633307e-01, 9.633421e-01, 9.633533e-01, 9.633646e-01, 9.633759e-01, 9.633872e-01, 9.633985e-01, 9.634097e-01, 9.634211e-01, 9.634324e-01, 9.634436e-01, 9.634549e-01, 9.634662e-01, 9.634775e-01, 9.634888e-01, 9.635001e-01, 9.635114e-01, 9.635227e-01, 9.635339e-01, 9.635453e-01, 9.635565e-01, 9.635678e-01, 9.635792e-01, 9.635904e-01, 9.636016e-01, 9.636129e-01, 9.636243e-01, 9.636356e-01, 9.636468e-01, 9.636581e-01, 9.636694e-01, 9.636807e-01, 9.636919e-01, 9.637032e-01, 9.637146e-01, 9.637259e-01, 9.637371e-01, 9.637484e-01, 9.637597e-01, 9.637710e-01, 9.637823e-01, 9.637936e-01, 9.638049e-01, 9.638162e-01, 9.638274e-01, 9.638388e-01, 9.638500e-01, 9.638613e-01, 9.638726e-01, 9.638838e-01, 9.638951e-01, 9.639064e-01, 9.639177e-01, 9.639289e-01, 9.639403e-01, 9.639516e-01, 9.639629e-01, 9.639741e-01, 9.639854e-01, 9.639967e-01, 9.640080e-01, 9.640192e-01, 9.640306e-01, 9.640419e-01, 9.640532e-01, 9.640644e-01, 9.640757e-01, 9.640870e-01, 9.640983e-01, 9.641095e-01, 9.641208e-01, 9.641321e-01, 9.641434e-01, 9.641547e-01, 9.641659e-01, 9.641773e-01, 9.641886e-01, 9.641998e-01, 9.642111e-01, 9.642224e-01, 9.642337e-01, 9.642450e-01, 9.642562e-01, 9.642675e-01, 9.642788e-01, 9.642901e-01, 9.643014e-01, 9.643127e-01, 9.643239e-01, 9.643352e-01, 9.643465e-01, 9.643578e-01, 9.643691e-01, 9.643803e-01, 9.643916e-01, 9.644030e-01, 9.644142e-01, 9.644255e-01, 9.644367e-01, 9.644480e-01, 9.644594e-01, 9.644706e-01, 9.644819e-01, 9.644932e-01, 9.645044e-01, 9.645157e-01, 9.645270e-01, 9.645383e-01, 9.645495e-01, 9.645608e-01, 9.645722e-01, 9.645835e-01, 9.645947e-01, 9.646060e-01, 9.646173e-01, 9.646285e-01, 9.646398e-01, 9.646511e-01, 9.646624e-01, 9.646736e-01, 9.646849e-01, 9.646962e-01, 9.647076e-01, 9.647188e-01, 9.647301e-01, 9.647413e-01, 9.647526e-01, 9.647639e-01, 9.647752e-01, 9.647865e-01, 9.647977e-01, 9.648090e-01, 9.648203e-01, 9.648315e-01, 9.648429e-01, 9.648541e-01, 9.648654e-01, 9.648767e-01, 9.648879e-01, 9.648992e-01, 9.649106e-01, 9.649218e-01, 9.649331e-01, 9.649444e-01, 9.649556e-01, 9.649669e-01, 9.649782e-01, 9.649895e-01, 9.650007e-01, 9.650120e-01, 9.650233e-01, 9.650345e-01, 9.650458e-01, 9.650571e-01, 9.650685e-01, 9.650797e-01, 9.650910e-01, 9.651023e-01, 9.651135e-01, 9.651248e-01, 9.651360e-01, 9.651473e-01, 9.651586e-01, 9.651699e-01, 9.651812e-01, 9.651924e-01, 9.652037e-01, 9.652150e-01, 9.652262e-01, 9.652375e-01, 9.652488e-01, 9.652601e-01, 9.652714e-01, 9.652826e-01, 9.652939e-01, 9.653051e-01, 9.653164e-01, 9.653277e-01, 9.653391e-01, 9.653503e-01, 9.653616e-01, 9.653729e-01, 9.653841e-01, 9.653954e-01, 9.654067e-01, 9.654179e-01, 9.654292e-01, 9.654405e-01, 9.654518e-01, 9.654630e-01, 9.654743e-01, 9.654856e-01, 9.654968e-01, 9.655081e-01, 9.655194e-01, 9.655306e-01, 9.655419e-01, 9.655532e-01, 9.655645e-01, 9.655758e-01, 9.655870e-01, 9.655983e-01, 9.656096e-01, 9.656208e-01, 9.656321e-01, 9.656433e-01, 9.656546e-01, 9.656659e-01, 9.656771e-01, 9.656885e-01, 9.656998e-01, 9.657111e-01, 9.657223e-01, 9.657336e-01, 9.657449e-01, 9.657561e-01, 9.657674e-01, 9.657786e-01, 9.657899e-01, 9.658012e-01, 9.658124e-01, 9.658237e-01, 9.658350e-01, 9.658463e-01, 9.658576e-01, 9.658688e-01, 9.658801e-01, 9.658914e-01, 9.659026e-01, 9.659139e-01, 9.659252e-01, 9.659364e-01, 9.659477e-01, 9.659590e-01, 9.659702e-01, 9.659815e-01, 9.659927e-01, 9.660040e-01, 9.660153e-01, 9.660265e-01, 9.660379e-01, 9.660491e-01, 9.660604e-01, 9.660717e-01, 9.660829e-01, 9.660942e-01, 9.661055e-01, 9.661167e-01, 9.661280e-01, 9.661393e-01, 9.661505e-01, 9.661618e-01, 9.661731e-01, 9.661843e-01, 9.661956e-01, 9.662068e-01, 9.662181e-01, 9.662294e-01, 9.662406e-01, 9.662519e-01, 9.662632e-01, 9.662744e-01, 9.662857e-01, 9.662970e-01, 9.663082e-01, 9.663195e-01, 9.663308e-01, 9.663420e-01, 9.663534e-01, 9.663647e-01, 9.663759e-01, 9.663872e-01, 9.663985e-01, 9.664097e-01, 9.664210e-01, 9.664323e-01, 9.664435e-01, 9.664548e-01, 9.664661e-01, 9.664773e-01, 9.664886e-01, 9.664999e-01, 9.665111e-01, 9.665224e-01, 9.665337e-01, 9.665449e-01, 9.665562e-01, 9.665675e-01, 9.665787e-01, 9.665900e-01, 9.666013e-01, 9.666125e-01, 9.666238e-01, 9.666350e-01, 9.666463e-01, 9.666576e-01, 9.666688e-01, 9.666801e-01, 9.666914e-01, 9.667026e-01, 9.667139e-01, 9.667251e-01, 9.667364e-01, 9.667476e-01, 9.667589e-01, 9.667702e-01, 9.667814e-01, 9.667927e-01, 9.668040e-01, 9.668152e-01, 9.668264e-01, 9.668377e-01, 9.668490e-01, 9.668602e-01, 9.668715e-01, 9.668828e-01, 9.668940e-01, 9.669053e-01, 9.669166e-01, 9.669278e-01, 9.669391e-01, 9.669504e-01, 9.669616e-01, 9.669729e-01, 9.669842e-01, 9.669954e-01, 9.670067e-01, 9.670179e-01, 9.670292e-01, 9.670405e-01, 9.670517e-01, 9.670630e-01, 9.670743e-01, 9.670855e-01, 9.670968e-01, 9.671081e-01, 9.671193e-01, 9.671305e-01, 9.671417e-01, 9.671530e-01, 9.671643e-01, 9.671755e-01, 9.671868e-01, 9.671981e-01, 9.672093e-01, 9.672206e-01, 9.672319e-01, 9.672431e-01, 9.672544e-01, 9.672657e-01, 9.672769e-01, 9.672882e-01, 9.672995e-01, 9.673107e-01, 9.673219e-01, 9.673332e-01, 9.673445e-01, 9.673557e-01, 9.673670e-01, 9.673783e-01, 9.673895e-01, 9.674008e-01, 9.674121e-01, 9.674233e-01, 9.674346e-01, 9.674459e-01, 9.674571e-01, 9.674684e-01, 9.674795e-01, 9.674908e-01, 9.675021e-01, 9.675133e-01, 9.675246e-01, 9.675359e-01, 9.675471e-01, 9.675584e-01, 9.675696e-01, 9.675809e-01, 9.675922e-01, 9.676034e-01, 9.676147e-01, 9.676259e-01, 9.676372e-01, 9.676484e-01, 9.676597e-01, 9.676710e-01, 9.676822e-01, 9.676935e-01, 9.677048e-01, 9.677159e-01, 9.677272e-01, 9.677384e-01, 9.677497e-01, 9.677610e-01, 9.677722e-01, 9.677835e-01, 9.677948e-01, 9.678060e-01, 9.678173e-01, 9.678285e-01, 9.678398e-01, 9.678510e-01, 9.678623e-01, 9.678736e-01, 9.678848e-01, 9.678961e-01, 9.679074e-01, 9.679185e-01, 9.679298e-01, 9.679410e-01, 9.679523e-01, 9.679636e-01, 9.679748e-01, 9.679861e-01, 9.679974e-01, 9.680086e-01, 9.680198e-01, 9.680311e-01, 9.680424e-01, 9.680536e-01, 9.680649e-01, 9.680762e-01, 9.680874e-01, 9.680986e-01, 9.681098e-01, 9.681211e-01, 9.681324e-01, 9.681436e-01, 9.681549e-01, 9.681662e-01, 9.681774e-01, 9.681886e-01, 9.681999e-01, 9.682112e-01, 9.682224e-01, 9.682337e-01, 9.682449e-01, 9.682561e-01, 9.682674e-01, 9.682786e-01, 9.682899e-01, 9.683012e-01, 9.683124e-01, 9.683236e-01, 9.683349e-01, 9.683462e-01, 9.683574e-01, 9.683687e-01, 9.683800e-01, 9.683911e-01, 9.684024e-01, 9.684137e-01, 9.684249e-01, 9.684362e-01, 9.684474e-01, 9.684587e-01, 9.684699e-01, 9.684812e-01, 9.684924e-01, 9.685037e-01, 9.685150e-01, 9.685261e-01, 9.685374e-01, 9.685487e-01, 9.685599e-01, 9.685712e-01, 9.685824e-01, 9.685937e-01, 9.686049e-01, 9.686162e-01, 9.686275e-01, 9.686387e-01, 9.686499e-01, 9.686611e-01, 9.686724e-01, 9.686837e-01, 9.686949e-01, 9.687061e-01, 9.687174e-01, 9.687287e-01, 9.687399e-01, 9.687512e-01, 9.687623e-01, 9.687736e-01, 9.687849e-01, 9.687961e-01, 9.688074e-01, 9.688186e-01, 9.688299e-01, 9.688411e-01, 9.688524e-01, 9.688637e-01, 9.688748e-01, 9.688861e-01, 9.688973e-01, 9.689086e-01, 9.689199e-01, 9.689311e-01, 9.689423e-01, 9.689536e-01, 9.689649e-01, 9.689761e-01, 9.689873e-01, 9.689986e-01, 9.690098e-01, 9.690211e-01, 9.690323e-01, 9.690436e-01, 9.690548e-01, 9.690661e-01, 9.690773e-01, 9.690886e-01, 9.690998e-01, 9.691111e-01, 9.691224e-01, 9.691335e-01, 9.691448e-01, 9.691560e-01, 9.691673e-01, 9.691785e-01, 9.691898e-01, 9.692010e-01, 9.692123e-01, 9.692234e-01, 9.692347e-01, 9.692460e-01, 9.692572e-01, 9.692684e-01, 9.692797e-01, 9.692910e-01, 9.693022e-01, 9.693135e-01, 9.693246e-01, 9.693359e-01, 9.693472e-01, 9.693584e-01, 9.693696e-01, 9.693809e-01, 9.693922e-01, 9.694033e-01, 9.694146e-01, 9.694259e-01, 9.694371e-01, 9.694483e-01, 9.694596e-01, 9.694709e-01, 9.694821e-01, 9.694933e-01, 9.695045e-01, 9.695158e-01, 9.695271e-01, 9.695383e-01, 9.695495e-01, 9.695608e-01, 9.695721e-01, 9.695832e-01, 9.695945e-01, 9.696057e-01, 9.696169e-01, 9.696282e-01, 9.696395e-01, 9.696507e-01, 9.696619e-01, 9.696732e-01, 9.696844e-01, 9.696956e-01, 9.697069e-01, 9.697182e-01, 9.697294e-01, 9.697406e-01, 9.697518e-01, 9.697631e-01, 9.697743e-01, 9.697856e-01, 9.697968e-01, 9.698081e-01, 9.698193e-01, 9.698306e-01, 9.698418e-01, 9.698530e-01, 9.698642e-01, 9.698755e-01, 9.698868e-01, 9.698980e-01, 9.699093e-01, 9.699205e-01, 9.699317e-01, 9.699429e-01, 9.699542e-01, 9.699654e-01, 9.699767e-01, 9.699879e-01, 9.699991e-01, 9.700103e-01, 9.700216e-01, 9.700329e-01, 9.700441e-01, 9.700553e-01, 9.700666e-01, 9.700778e-01, 9.700890e-01, 9.701003e-01, 9.701115e-01, 9.701228e-01, 9.701340e-01, 9.701452e-01, 9.701564e-01, 9.701677e-01, 9.701789e-01, 9.701902e-01, 9.702014e-01, 9.702126e-01, 9.702238e-01, 9.702351e-01, 9.702463e-01, 9.702576e-01, 9.702688e-01, 9.702801e-01, 9.702913e-01, 9.703025e-01, 9.703137e-01, 9.703250e-01, 9.703363e-01, 9.703475e-01, 9.703587e-01, 9.703700e-01, 9.703811e-01, 9.703924e-01, 9.704037e-01, 9.704149e-01, 9.704261e-01, 9.704374e-01, 9.704486e-01, 9.704598e-01, 9.704711e-01, 9.704823e-01, 9.704936e-01, 9.705047e-01, 9.705160e-01, 9.705272e-01, 9.705384e-01, 9.705497e-01, 9.705610e-01, 9.705721e-01, 9.705834e-01, 9.705946e-01, 9.706059e-01, 9.706171e-01, 9.706283e-01, 9.706395e-01, 9.706508e-01, 9.706620e-01, 9.706733e-01, 9.706845e-01, 9.706957e-01, 9.707069e-01, 9.707182e-01, 9.707294e-01, 9.707407e-01, 9.707519e-01, 9.707631e-01, 9.707744e-01, 9.707856e-01, 9.707968e-01, 9.708080e-01, 9.708193e-01, 9.708306e-01, 9.708417e-01, 9.708530e-01, 9.708642e-01, 9.708754e-01, 9.708867e-01, 9.708979e-01, 9.709091e-01, 9.709204e-01, 9.709316e-01, 9.709429e-01, 9.709540e-01, 9.709653e-01, 9.709765e-01, 9.709877e-01, 9.709990e-01, 9.710101e-01, 9.710214e-01, 9.710327e-01, 9.710439e-01, 9.710552e-01, 9.710664e-01, 9.710776e-01, 9.710889e-01, 9.711000e-01, 9.711113e-01, 9.711225e-01, 9.711338e-01, 9.711450e-01, 9.711562e-01, 9.711674e-01, 9.711787e-01, 9.711899e-01, 9.712011e-01, 9.712123e-01, 9.712236e-01, 9.712348e-01, 9.712461e-01, 9.712572e-01, 9.712685e-01, 9.712797e-01, 9.712909e-01, 9.713022e-01, 9.713134e-01, 9.713246e-01, 9.713358e-01, 9.713471e-01, 9.713582e-01, 9.713695e-01, 9.713808e-01, 9.713920e-01, 9.714032e-01, 9.714144e-01, 9.714257e-01, 9.714369e-01, 9.714481e-01, 9.714594e-01, 9.714706e-01, 9.714819e-01, 9.714930e-01, 9.715043e-01, 9.715155e-01, 9.715267e-01, 9.715379e-01, 9.715492e-01, 9.715604e-01, 9.715716e-01, 9.715829e-01, 9.715940e-01, 9.716053e-01, 9.716165e-01, 9.716278e-01, 9.716389e-01, 9.716502e-01, 9.716614e-01, 9.716727e-01, 9.716839e-01, 9.716951e-01, 9.717063e-01, 9.717175e-01, 9.717288e-01, 9.717400e-01, 9.717513e-01, 9.717624e-01, 9.717737e-01, 9.717849e-01, 9.717962e-01, 9.718073e-01, 9.718186e-01, 9.718298e-01, 9.718410e-01, 9.718522e-01, 9.718634e-01, 9.718747e-01, 9.718859e-01, 9.718971e-01, 9.719083e-01, 9.719196e-01, 9.719308e-01, 9.719421e-01, 9.719532e-01, 9.719645e-01, 9.719757e-01, 9.719869e-01, 9.719982e-01, 9.720094e-01, 9.720206e-01, 9.720318e-01, 9.720430e-01, 9.720543e-01, 9.720654e-01, 9.720767e-01, 9.720879e-01, 9.720992e-01, 9.721103e-01, 9.721216e-01, 9.721328e-01, 9.721441e-01, 9.721552e-01, 9.721665e-01, 9.721777e-01, 9.721889e-01, 9.722001e-01, 9.722114e-01, 9.722226e-01, 9.722338e-01, 9.722450e-01, 9.722563e-01, 9.722674e-01, 9.722787e-01, 9.722899e-01, 9.723011e-01, 9.723123e-01, 9.723235e-01, 9.723348e-01, 9.723459e-01, 9.723572e-01, 9.723684e-01, 9.723797e-01, 9.723908e-01, 9.724021e-01, 9.724133e-01, 9.724246e-01, 9.724357e-01, 9.724470e-01, 9.724582e-01, 9.724694e-01, 9.724807e-01, 9.724919e-01, 9.725031e-01, 9.725143e-01, 9.725255e-01, 9.725367e-01, 9.725479e-01, 9.725592e-01, 9.725704e-01, 9.725816e-01, 9.725928e-01, 9.726040e-01, 9.726153e-01, 9.726264e-01, 9.726377e-01, 9.726489e-01, 9.726601e-01, 9.726713e-01, 9.726825e-01, 9.726938e-01, 9.727050e-01, 9.727163e-01, 9.727274e-01, 9.727386e-01, 9.727499e-01, 9.727610e-01, 9.727723e-01, 9.727835e-01, 9.727948e-01, 9.728059e-01, 9.728172e-01, 9.728284e-01, 9.728395e-01, 9.728508e-01, 9.728620e-01, 9.728733e-01, 9.728844e-01, 9.728957e-01, 9.729069e-01, 9.729181e-01, 9.729294e-01, 9.729405e-01, 9.729518e-01, 9.729630e-01, 9.729742e-01, 9.729854e-01, 9.729966e-01, 9.730079e-01, 9.730190e-01, 9.730303e-01, 9.730415e-01, 9.730526e-01, 9.730639e-01, 9.730751e-01, 9.730864e-01, 9.730975e-01, 9.731088e-01, 9.731200e-01, 9.731312e-01, 9.731424e-01, 9.731536e-01, 9.731649e-01, 9.731761e-01, 9.731872e-01, 9.731985e-01, 9.732097e-01, 9.732209e-01, 9.732321e-01, 9.732433e-01, 9.732546e-01, 9.732657e-01, 9.732770e-01, 9.732882e-01, 9.732993e-01, 9.733106e-01, 9.733218e-01, 9.733330e-01, 9.733443e-01, 9.733554e-01, 9.733667e-01, 9.733779e-01, 9.733890e-01, 9.734003e-01, 9.734115e-01, 9.734228e-01, 9.734339e-01, 9.734451e-01, 9.734564e-01, 9.734675e-01, 9.734787e-01, 9.734900e-01, 9.735011e-01, 9.735124e-01, 9.735236e-01, 9.735348e-01, 9.735461e-01, 9.735572e-01, 9.735684e-01, 9.735797e-01, 9.735909e-01, 9.736021e-01, 9.736133e-01, 9.736245e-01, 9.736357e-01, 9.736469e-01, 9.736581e-01, 9.736694e-01, 9.736806e-01, 9.736917e-01, 9.737030e-01, 9.737142e-01, 9.737254e-01, 9.737366e-01, 9.737478e-01, 9.737590e-01, 9.737703e-01, 9.737814e-01, 9.737927e-01, 9.738039e-01, 9.738150e-01, 9.738263e-01, 9.738375e-01, 9.738486e-01, 9.738599e-01, 9.738711e-01, 9.738823e-01, 9.738935e-01, 9.739047e-01, 9.739159e-01, 9.739272e-01, 9.739383e-01, 9.739496e-01, 9.739608e-01, 9.739720e-01, 9.739832e-01, 9.739944e-01, 9.740056e-01, 9.740168e-01, 9.740281e-01, 9.740392e-01, 9.740504e-01, 9.740617e-01, 9.740728e-01, 9.740840e-01, 9.740953e-01, 9.741065e-01, 9.741176e-01, 9.741288e-01, 9.741401e-01, 9.741513e-01, 9.741625e-01, 9.741737e-01, 9.741849e-01, 9.741961e-01, 9.742073e-01, 9.742185e-01, 9.742297e-01, 9.742410e-01, 9.742521e-01, 9.742633e-01, 9.742745e-01, 9.742858e-01, 9.742969e-01, 9.743081e-01, 9.743194e-01, 9.743305e-01, 9.743418e-01, 9.743530e-01, 9.743642e-01, 9.743754e-01, 9.743865e-01, 9.743978e-01, 9.744090e-01, 9.744202e-01, 9.744315e-01, 9.744426e-01, 9.744538e-01, 9.744650e-01, 9.744762e-01, 9.744874e-01, 9.744986e-01, 9.745098e-01, 9.745210e-01, 9.745322e-01, 9.745434e-01, 9.745547e-01, 9.745658e-01, 9.745770e-01, 9.745883e-01, 9.745995e-01, 9.746106e-01, 9.746218e-01, 9.746331e-01, 9.746442e-01, 9.746554e-01, 9.746666e-01, 9.746779e-01, 9.746891e-01, 9.747002e-01, 9.747115e-01, 9.747227e-01, 9.747338e-01, 9.747450e-01, 9.747563e-01, 9.747675e-01, 9.747787e-01, 9.747899e-01, 9.748011e-01, 9.748123e-01, 9.748235e-01, 9.748346e-01, 9.748459e-01, 9.748571e-01, 9.748682e-01, 9.748794e-01, 9.748907e-01, 9.749019e-01, 9.749131e-01, 9.749243e-01, 9.749355e-01, 9.749467e-01, 9.749579e-01, 9.749690e-01, 9.749803e-01, 9.749915e-01, 9.750026e-01, 9.750139e-01, 9.750251e-01, 9.750363e-01, 9.750475e-01, 9.750587e-01, 9.750698e-01, 9.750811e-01, 9.750923e-01, 9.751034e-01, 9.751146e-01, 9.751259e-01, 9.751371e-01, 9.751483e-01, 9.751594e-01, 9.751706e-01, 9.751819e-01, 9.751930e-01, 9.752042e-01, 9.752154e-01, 9.752267e-01, 9.752378e-01, 9.752491e-01, 9.752602e-01, 9.752714e-01, 9.752827e-01, 9.752938e-01, 9.753050e-01, 9.753162e-01, 9.753274e-01, 9.753386e-01, 9.753498e-01, 9.753610e-01, 9.753722e-01, 9.753835e-01, 9.753946e-01, 9.754058e-01, 9.754170e-01, 9.754282e-01, 9.754394e-01, 9.754506e-01, 9.754618e-01, 9.754729e-01, 9.754841e-01, 9.754953e-01, 9.755066e-01, 9.755177e-01, 9.755290e-01, 9.755401e-01, 9.755513e-01, 9.755626e-01, 9.755737e-01, 9.755849e-01, 9.755961e-01, 9.756073e-01, 9.756185e-01, 9.756297e-01, 9.756409e-01, 9.756521e-01, 9.756632e-01, 9.756745e-01, 9.756857e-01, 9.756969e-01, 9.757081e-01, 9.757192e-01, 9.757304e-01, 9.757416e-01, 9.757528e-01, 9.757640e-01, 9.757752e-01, 9.757864e-01, 9.757976e-01, 9.758087e-01, 9.758200e-01, 9.758312e-01, 9.758424e-01, 9.758536e-01, 9.758647e-01, 9.758759e-01, 9.758872e-01, 9.758983e-01, 9.759095e-01, 9.759207e-01, 9.759319e-01, 9.759431e-01, 9.759544e-01, 9.759655e-01, 9.759767e-01, 9.759879e-01, 9.759991e-01, 9.760102e-01, 9.760214e-01, 9.760327e-01, 9.760438e-01, 9.760550e-01, 9.760662e-01, 9.760774e-01, 9.760886e-01, 9.760997e-01, 9.761110e-01, 9.761222e-01, 9.761333e-01, 9.761446e-01, 9.761557e-01, 9.761669e-01, 9.761781e-01, 9.761893e-01, 9.762005e-01, 9.762117e-01, 9.762229e-01, 9.762341e-01, 9.762452e-01, 9.762564e-01, 9.762676e-01, 9.762788e-01, 9.762900e-01, 9.763012e-01, 9.763124e-01, 9.763236e-01, 9.763348e-01, 9.763460e-01, 9.763571e-01, 9.763683e-01, 9.763796e-01, 9.763907e-01, 9.764019e-01, 9.764131e-01, 9.764243e-01, 9.764355e-01, 9.764466e-01, 9.764578e-01, 9.764690e-01, 9.764802e-01, 9.764915e-01, 9.765026e-01, 9.765138e-01, 9.765249e-01, 9.765362e-01, 9.765473e-01, 9.765585e-01, 9.765697e-01, 9.765809e-01, 9.765921e-01, 9.766033e-01, 9.766145e-01, 9.766257e-01, 9.766368e-01, 9.766480e-01, 9.766592e-01, 9.766704e-01, 9.766816e-01, 9.766927e-01, 9.767039e-01, 9.767151e-01, 9.767264e-01, 9.767376e-01, 9.767487e-01, 9.767599e-01, 9.767711e-01, 9.767823e-01, 9.767934e-01, 9.768046e-01, 9.768158e-01, 9.768270e-01, 9.768382e-01, 9.768493e-01, 9.768605e-01, 9.768718e-01, 9.768829e-01, 9.768941e-01, 9.769053e-01, 9.769165e-01, 9.769276e-01, 9.769388e-01, 9.769500e-01, 9.769612e-01, 9.769724e-01, 9.769835e-01, 9.769948e-01, 9.770059e-01, 9.770171e-01, 9.770283e-01, 9.770395e-01, 9.770507e-01, 9.770619e-01, 9.770731e-01, 9.770843e-01, 9.770954e-01, 9.771066e-01, 9.771178e-01, 9.771290e-01, 9.771401e-01, 9.771513e-01, 9.771625e-01, 9.771737e-01, 9.771849e-01, 9.771960e-01, 9.772072e-01, 9.772184e-01, 9.772296e-01, 9.772407e-01, 9.772519e-01, 9.772631e-01, 9.772743e-01, 9.772855e-01, 9.772967e-01, 9.773079e-01, 9.773190e-01, 9.773303e-01, 9.773415e-01, 9.773526e-01, 9.773638e-01, 9.773750e-01, 9.773862e-01, 9.773973e-01, 9.774085e-01, 9.774197e-01, 9.774309e-01, 9.774421e-01, 9.774532e-01, 9.774644e-01, 9.774756e-01, 9.774868e-01, 9.774979e-01, 9.775091e-01, 9.775203e-01, 9.775315e-01, 9.775427e-01, 9.775538e-01, 9.775651e-01, 9.775762e-01, 9.775874e-01, 9.775985e-01, 9.776098e-01, 9.776210e-01, 9.776321e-01, 9.776433e-01, 9.776545e-01, 9.776657e-01, 9.776768e-01, 9.776880e-01, 9.776992e-01, 9.777104e-01, 9.777215e-01, 9.777327e-01, 9.777439e-01, 9.777551e-01, 9.777663e-01, 9.777774e-01, 9.777886e-01, 9.777998e-01, 9.778110e-01, 9.778221e-01, 9.778333e-01, 9.778445e-01, 9.778557e-01, 9.778669e-01, 9.778780e-01, 9.778892e-01, 9.779004e-01, 9.779116e-01, 9.779227e-01, 9.779339e-01, 9.779450e-01, 9.779562e-01, 9.779674e-01, 9.779786e-01, 9.779897e-01, 9.780009e-01, 9.780121e-01, 9.780233e-01, 9.780344e-01, 9.780456e-01, 9.780568e-01, 9.780680e-01, 9.780792e-01, 9.780903e-01, 9.781016e-01, 9.781127e-01, 9.781239e-01, 9.781350e-01, 9.781463e-01, 9.781574e-01, 9.781686e-01, 9.781798e-01, 9.781910e-01, 9.782022e-01, 9.782133e-01, 9.782244e-01, 9.782356e-01, 9.782467e-01, 9.782580e-01, 9.782692e-01, 9.782803e-01, 9.782915e-01, 9.783027e-01, 9.783139e-01, 9.783250e-01, 9.783362e-01, 9.783474e-01, 9.783586e-01, 9.783697e-01, 9.783809e-01, 9.783921e-01, 9.784032e-01, 9.784144e-01, 9.784256e-01, 9.784367e-01, 9.784479e-01, 9.784591e-01, 9.784703e-01, 9.784815e-01, 9.784926e-01, 9.785038e-01, 9.785150e-01, 9.785262e-01, 9.785373e-01, 9.785484e-01, 9.785596e-01, 9.785708e-01, 9.785820e-01, 9.785932e-01, 9.786043e-01, 9.786155e-01, 9.786267e-01, 9.786379e-01, 9.786490e-01, 9.786602e-01, 9.786714e-01, 9.786825e-01, 9.786937e-01, 9.787049e-01, 9.787160e-01, 9.787272e-01, 9.787384e-01, 9.787496e-01, 9.787607e-01, 9.787719e-01, 9.787831e-01, 9.787942e-01, 9.788054e-01, 9.788166e-01, 9.788277e-01, 9.788389e-01, 9.788501e-01, 9.788613e-01, 9.788724e-01, 9.788836e-01, 9.788947e-01, 9.789059e-01, 9.789171e-01, 9.789283e-01, 9.789394e-01, 9.789506e-01, 9.789618e-01, 9.789730e-01, 9.789842e-01, 9.789953e-01, 9.790064e-01, 9.790176e-01, 9.790288e-01, 9.790400e-01, 9.790511e-01, 9.790623e-01, 9.790735e-01, 9.790846e-01, 9.790958e-01, 9.791070e-01, 9.791181e-01, 9.791293e-01, 9.791405e-01, 9.791517e-01, 9.791628e-01, 9.791740e-01, 9.791851e-01, 9.791963e-01, 9.792075e-01, 9.792187e-01, 9.792298e-01, 9.792409e-01, 9.792521e-01, 9.792633e-01, 9.792745e-01, 9.792857e-01, 9.792968e-01, 9.793080e-01, 9.793191e-01, 9.793302e-01, 9.793414e-01, 9.793526e-01, 9.793638e-01, 9.793750e-01, 9.793861e-01, 9.793972e-01, 9.794084e-01, 9.794196e-01, 9.794308e-01, 9.794419e-01, 9.794531e-01, 9.794642e-01, 9.794754e-01, 9.794866e-01, 9.794978e-01, 9.795089e-01, 9.795201e-01, 9.795312e-01, 9.795424e-01, 9.795536e-01, 9.795648e-01, 9.795759e-01, 9.795870e-01, 9.795982e-01, 9.796094e-01, 9.796206e-01, 9.796317e-01, 9.796429e-01, 9.796540e-01, 9.796652e-01, 9.796764e-01, 9.796876e-01, 9.796987e-01, 9.797098e-01, 9.797210e-01, 9.797322e-01, 9.797434e-01, 9.797546e-01, 9.797657e-01, 9.797768e-01, 9.797880e-01, 9.797992e-01, 9.798104e-01, 9.798216e-01, 9.798326e-01, 9.798438e-01, 9.798550e-01, 9.798661e-01, 9.798774e-01, 9.798884e-01, 9.798996e-01, 9.799108e-01, 9.799220e-01, 9.799331e-01, 9.799442e-01, 9.799554e-01, 9.799666e-01, 9.799778e-01, 9.799889e-01, 9.800001e-01, 9.800112e-01, 9.800224e-01, 9.800336e-01, 9.800447e-01, 9.800559e-01, 9.800670e-01, 9.800782e-01, 9.800894e-01, 9.801005e-01, 9.801117e-01, 9.801229e-01, 9.801340e-01, 9.801451e-01, 9.801563e-01, 9.801674e-01, 9.801787e-01, 9.801899e-01, 9.802009e-01, 9.802121e-01, 9.802233e-01, 9.802344e-01, 9.802455e-01, 9.802567e-01, 9.802679e-01, 9.802791e-01, 9.802902e-01, 9.803014e-01, 9.803125e-01, 9.803237e-01, 9.803348e-01, 9.803460e-01, 9.803572e-01, 9.803684e-01, 9.803795e-01, 9.803906e-01, 9.804018e-01, 9.804130e-01, 9.804240e-01, 9.804353e-01, 9.804465e-01, 9.804576e-01, 9.804687e-01, 9.804799e-01, 9.804910e-01, 9.805022e-01, 9.805133e-01, 9.805245e-01, 9.805357e-01, 9.805469e-01, 9.805580e-01, 9.805691e-01, 9.805803e-01, 9.805915e-01, 9.806026e-01, 9.806138e-01, 9.806250e-01, 9.806361e-01, 9.806472e-01, 9.806584e-01, 9.806696e-01, 9.806806e-01, 9.806919e-01, 9.807031e-01, 9.807142e-01, 9.807253e-01, 9.807365e-01, 9.807476e-01, 9.807587e-01, 9.807699e-01, 9.807811e-01, 9.807923e-01, 9.808034e-01, 9.808146e-01, 9.808257e-01, 9.808368e-01, 9.808480e-01, 9.808592e-01, 9.808704e-01, 9.808815e-01, 9.808927e-01, 9.809038e-01, 9.809149e-01, 9.809261e-01, 9.809372e-01, 9.809484e-01, 9.809595e-01, 9.809707e-01, 9.809819e-01, 9.809930e-01, 9.810042e-01, 9.810153e-01, 9.810265e-01, 9.810376e-01, 9.810488e-01, 9.810599e-01, 9.810711e-01, 9.810823e-01, 9.810934e-01, 9.811046e-01, 9.811157e-01, 9.811269e-01, 9.811380e-01, 9.811491e-01, 9.811603e-01, 9.811714e-01, 9.811826e-01, 9.811938e-01, 9.812049e-01, 9.812161e-01, 9.812272e-01, 9.812383e-01, 9.812495e-01, 9.812607e-01, 9.812718e-01, 9.812829e-01, 9.812942e-01, 9.813052e-01, 9.813164e-01, 9.813276e-01, 9.813387e-01, 9.813499e-01, 9.813610e-01, 9.813721e-01, 9.813833e-01, 9.813945e-01, 9.814056e-01, 9.814168e-01, 9.814279e-01, 9.814391e-01, 9.814502e-01, 9.814614e-01, 9.814725e-01, 9.814836e-01, 9.814948e-01, 9.815059e-01, 9.815171e-01, 9.815283e-01, 9.815394e-01, 9.815506e-01, 9.815617e-01, 9.815728e-01, 9.815840e-01, 9.815952e-01, 9.816063e-01, 9.816175e-01, 9.816285e-01, 9.816397e-01, 9.816509e-01, 9.816620e-01, 9.816732e-01, 9.816844e-01, 9.816955e-01, 9.817066e-01, 9.817178e-01, 9.817289e-01, 9.817401e-01, 9.817512e-01, 9.817623e-01, 9.817736e-01, 9.817846e-01, 9.817958e-01, 9.818070e-01, 9.818181e-01, 9.818293e-01, 9.818404e-01, 9.818515e-01, 9.818627e-01, 9.818738e-01, 9.818850e-01, 9.818962e-01, 9.819072e-01, 9.819185e-01, 9.819295e-01, 9.819407e-01, 9.819519e-01, 9.819630e-01, 9.819741e-01, 9.819853e-01, 9.819964e-01, 9.820076e-01, 9.820187e-01, 9.820299e-01, 9.820409e-01, 9.820521e-01, 9.820634e-01, 9.820744e-01, 9.820856e-01, 9.820967e-01, 9.821079e-01, 9.821190e-01, 9.821302e-01, 9.821413e-01, 9.821524e-01, 9.821636e-01, 9.821748e-01, 9.821858e-01, 9.821970e-01, 9.822081e-01, 9.822193e-01, 9.822305e-01, 9.822416e-01, 9.822528e-01, 9.822639e-01, 9.822750e-01, 9.822862e-01, 9.822973e-01, 9.823085e-01, 9.823196e-01, 9.823307e-01, 9.823418e-01, 9.823530e-01, 9.823642e-01, 9.823753e-01, 9.823865e-01, 9.823976e-01, 9.824088e-01, 9.824198e-01, 9.824311e-01, 9.824422e-01, 9.824533e-01, 9.824645e-01, 9.824756e-01, 9.824867e-01, 9.824979e-01, 9.825090e-01, 9.825201e-01, 9.825313e-01, 9.825425e-01, 9.825535e-01, 9.825647e-01, 9.825758e-01, 9.825870e-01, 9.825981e-01, 9.826093e-01, 9.826204e-01, 9.826316e-01, 9.826427e-01, 9.826539e-01, 9.826650e-01, 9.826761e-01, 9.826873e-01, 9.826984e-01, 9.827095e-01, 9.827207e-01, 9.827318e-01, 9.827429e-01, 9.827541e-01, 9.827653e-01, 9.827763e-01, 9.827875e-01, 9.827986e-01, 9.828098e-01, 9.828209e-01, 9.828321e-01, 9.828432e-01, 9.828544e-01, 9.828655e-01, 9.828767e-01, 9.828877e-01, 9.828989e-01, 9.829100e-01, 9.829212e-01, 9.829323e-01, 9.829435e-01, 9.829546e-01, 9.829657e-01, 9.829769e-01, 9.829880e-01, 9.829991e-01, 9.830103e-01, 9.830214e-01, 9.830325e-01, 9.830437e-01, 9.830548e-01, 9.830660e-01, 9.830771e-01, 9.830883e-01, 9.830993e-01, 9.831105e-01, 9.831216e-01, 9.831328e-01, 9.831439e-01, 9.831551e-01, 9.831662e-01, 9.831774e-01, 9.831885e-01, 9.831996e-01, 9.832107e-01, 9.832219e-01, 9.832330e-01, 9.832442e-01, 9.832553e-01, 9.832664e-01, 9.832775e-01, 9.832887e-01, 9.832998e-01, 9.833110e-01, 9.833221e-01, 9.833332e-01, 9.833443e-01, 9.833555e-01, 9.833666e-01, 9.833778e-01, 9.833889e-01, 9.834000e-01, 9.834111e-01, 9.834223e-01, 9.834334e-01, 9.834446e-01, 9.834557e-01, 9.834668e-01, 9.834780e-01, 9.834890e-01, 9.835002e-01, 9.835113e-01, 9.835225e-01, 9.835336e-01, 9.835448e-01, 9.835559e-01, 9.835671e-01, 9.835781e-01, 9.835894e-01, 9.836004e-01, 9.836116e-01, 9.836227e-01, 9.836339e-01, 9.836450e-01, 9.836560e-01, 9.836673e-01, 9.836783e-01, 9.836895e-01, 9.837006e-01, 9.837118e-01, 9.837229e-01, 9.837341e-01, 9.837452e-01, 9.837563e-01, 9.837674e-01, 9.837785e-01, 9.837897e-01, 9.838008e-01, 9.838120e-01, 9.838231e-01, 9.838342e-01, 9.838454e-01, 9.838565e-01, 9.838676e-01, 9.838787e-01, 9.838899e-01, 9.839010e-01, 9.839122e-01, 9.839233e-01, 9.839344e-01, 9.839455e-01, 9.839566e-01, 9.839678e-01, 9.839789e-01, 9.839901e-01, 9.840012e-01, 9.840123e-01, 9.840234e-01, 9.840345e-01, 9.840457e-01, 9.840568e-01, 9.840680e-01, 9.840791e-01, 9.840902e-01, 9.841013e-01, 9.841124e-01, 9.841236e-01, 9.841347e-01, 9.841459e-01, 9.841570e-01, 9.841681e-01, 9.841793e-01, 9.841903e-01, 9.842015e-01, 9.842126e-01, 9.842238e-01, 9.842349e-01, 9.842460e-01, 9.842572e-01, 9.842682e-01, 9.842794e-01, 9.842905e-01, 9.843016e-01, 9.843128e-01, 9.843239e-01, 9.843351e-01, 9.843462e-01, 9.843572e-01, 9.843684e-01, 9.843795e-01, 9.843907e-01, 9.844018e-01, 9.844128e-01, 9.844241e-01, 9.844351e-01, 9.844462e-01, 9.844574e-01, 9.844685e-01, 9.844797e-01, 9.844908e-01, 9.845019e-01, 9.845130e-01, 9.845241e-01, 9.845353e-01, 9.845464e-01, 9.845575e-01, 9.845687e-01, 9.845798e-01, 9.845909e-01, 9.846020e-01, 9.846131e-01, 9.846243e-01, 9.846354e-01, 9.846465e-01, 9.846577e-01, 9.846688e-01, 9.846799e-01, 9.846910e-01, 9.847022e-01, 9.847133e-01, 9.847244e-01, 9.847355e-01, 9.847467e-01, 9.847578e-01, 9.847689e-01, 9.847801e-01, 9.847912e-01, 9.848022e-01, 9.848134e-01, 9.848245e-01, 9.848356e-01, 9.848468e-01, 9.848579e-01, 9.848689e-01, 9.848801e-01, 9.848912e-01, 9.849023e-01, 9.849135e-01, 9.849246e-01, 9.849358e-01, 9.849468e-01, 9.849580e-01, 9.849691e-01, 9.849802e-01, 9.849913e-01, 9.850025e-01, 9.850136e-01, 9.850247e-01, 9.850359e-01, 9.850470e-01, 9.850581e-01, 9.850692e-01, 9.850804e-01, 9.850914e-01, 9.851026e-01, 9.851137e-01, 9.851248e-01, 9.851360e-01, 9.851471e-01, 9.851581e-01, 9.851694e-01, 9.851804e-01, 9.851915e-01, 9.852026e-01, 9.852138e-01, 9.852249e-01, 9.852360e-01, 9.852471e-01, 9.852582e-01, 9.852694e-01, 9.852805e-01, 9.852916e-01, 9.853027e-01, 9.853139e-01, 9.853250e-01, 9.853361e-01, 9.853473e-01, 9.853584e-01, 9.853694e-01, 9.853805e-01, 9.853917e-01, 9.854028e-01, 9.854139e-01, 9.854251e-01, 9.854361e-01, 9.854473e-01, 9.854584e-01, 9.854695e-01, 9.854806e-01, 9.854917e-01, 9.855029e-01, 9.855140e-01, 9.855251e-01, 9.855363e-01, 9.855474e-01, 9.855585e-01, 9.855695e-01, 9.855807e-01, 9.855918e-01, 9.856029e-01, 9.856141e-01, 9.856251e-01, 9.856363e-01, 9.856474e-01, 9.856585e-01, 9.856696e-01, 9.856807e-01, 9.856919e-01, 9.857030e-01, 9.857141e-01, 9.857252e-01, 9.857364e-01, 9.857475e-01, 9.857585e-01, 9.857696e-01, 9.857808e-01, 9.857919e-01, 9.858030e-01, 9.858142e-01, 9.858253e-01, 9.858364e-01, 9.858475e-01, 9.858586e-01, 9.858697e-01, 9.858809e-01, 9.858919e-01, 9.859031e-01, 9.859142e-01, 9.859253e-01, 9.859364e-01, 9.859475e-01, 9.859586e-01, 9.859697e-01, 9.859808e-01, 9.859920e-01, 9.860031e-01, 9.860142e-01, 9.860253e-01, 9.860365e-01, 9.860476e-01, 9.860587e-01, 9.860697e-01, 9.860809e-01, 9.860920e-01, 9.861031e-01, 9.861142e-01, 9.861254e-01, 9.861365e-01, 9.861476e-01, 9.861587e-01, 9.861698e-01, 9.861810e-01, 9.861920e-01, 9.862031e-01, 9.862142e-01, 9.862254e-01, 9.862365e-01, 9.862476e-01, 9.862587e-01, 9.862698e-01, 9.862809e-01, 9.862921e-01, 9.863032e-01, 9.863142e-01, 9.863254e-01, 9.863365e-01, 9.863476e-01, 9.863587e-01, 9.863698e-01, 9.863809e-01, 9.863920e-01, 9.864032e-01, 9.864143e-01, 9.864254e-01, 9.864365e-01, 9.864476e-01, 9.864587e-01, 9.864698e-01, 9.864810e-01, 9.864920e-01, 9.865031e-01, 9.865142e-01, 9.865254e-01, 9.865365e-01, 9.865476e-01, 9.865587e-01, 9.865698e-01, 9.865809e-01, 9.865921e-01, 9.866031e-01, 9.866142e-01, 9.866253e-01, 9.866365e-01, 9.866476e-01, 9.866587e-01, 9.866698e-01, 9.866809e-01, 9.866920e-01, 9.867032e-01, 9.867142e-01, 9.867253e-01, 9.867364e-01, 9.867475e-01, 9.867586e-01, 9.867698e-01, 9.867809e-01, 9.867920e-01, 9.868031e-01, 9.868142e-01, 9.868253e-01, 9.868364e-01, 9.868475e-01, 9.868586e-01, 9.868698e-01, 9.868808e-01, 9.868920e-01, 9.869031e-01, 9.869142e-01, 9.869253e-01, 9.869364e-01, 9.869475e-01, 9.869586e-01, 9.869697e-01, 9.869809e-01, 9.869919e-01, 9.870030e-01, 9.870141e-01, 9.870253e-01, 9.870364e-01, 9.870475e-01, 9.870586e-01, 9.870697e-01, 9.870808e-01, 9.870918e-01, 9.871030e-01, 9.871141e-01, 9.871252e-01, 9.871363e-01, 9.871474e-01, 9.871585e-01, 9.871696e-01, 9.871808e-01, 9.871919e-01, 9.872029e-01, 9.872140e-01, 9.872251e-01, 9.872362e-01, 9.872473e-01, 9.872585e-01, 9.872696e-01, 9.872807e-01, 9.872918e-01, 9.873028e-01, 9.873140e-01, 9.873251e-01, 9.873362e-01, 9.873473e-01, 9.873584e-01, 9.873695e-01, 9.873806e-01, 9.873917e-01, 9.874028e-01, 9.874139e-01, 9.874250e-01, 9.874362e-01, 9.874473e-01, 9.874583e-01, 9.874694e-01, 9.874805e-01, 9.874916e-01, 9.875027e-01, 9.875138e-01, 9.875250e-01, 9.875361e-01, 9.875472e-01, 9.875582e-01, 9.875693e-01, 9.875804e-01, 9.875916e-01, 9.876027e-01, 9.876137e-01, 9.876249e-01, 9.876360e-01, 9.876471e-01, 9.876582e-01, 9.876693e-01, 9.876804e-01, 9.876915e-01, 9.877025e-01, 9.877136e-01, 9.877247e-01, 9.877358e-01, 9.877470e-01, 9.877581e-01, 9.877692e-01, 9.877803e-01, 9.877914e-01, 9.878024e-01, 9.878136e-01, 9.878247e-01, 9.878358e-01, 9.878469e-01, 9.878579e-01, 9.878691e-01, 9.878802e-01, 9.878913e-01, 9.879024e-01, 9.879135e-01, 9.879246e-01, 9.879357e-01, 9.879467e-01, 9.879578e-01, 9.879690e-01, 9.879801e-01, 9.879912e-01, 9.880022e-01, 9.880133e-01, 9.880245e-01, 9.880356e-01, 9.880467e-01, 9.880578e-01, 9.880689e-01, 9.880800e-01, 9.880911e-01, 9.881021e-01, 9.881132e-01, 9.881243e-01, 9.881355e-01, 9.881465e-01, 9.881576e-01, 9.881687e-01, 9.881798e-01, 9.881909e-01, 9.882021e-01, 9.882132e-01, 9.882243e-01, 9.882354e-01, 9.882464e-01, 9.882575e-01, 9.882686e-01, 9.882797e-01, 9.882908e-01, 9.883019e-01, 9.883130e-01, 9.883241e-01, 9.883352e-01, 9.883463e-01, 9.883574e-01, 9.883685e-01, 9.883795e-01, 9.883907e-01, 9.884018e-01, 9.884129e-01, 9.884239e-01, 9.884350e-01, 9.884461e-01, 9.884572e-01, 9.884683e-01, 9.884794e-01, 9.884905e-01, 9.885017e-01, 9.885128e-01, 9.885238e-01, 9.885349e-01, 9.885460e-01, 9.885572e-01, 9.885682e-01, 9.885793e-01, 9.885904e-01, 9.886015e-01, 9.886126e-01, 9.886237e-01, 9.886348e-01, 9.886459e-01, 9.886570e-01, 9.886681e-01, 9.886792e-01, 9.886903e-01, 9.887013e-01, 9.887124e-01, 9.887235e-01, 9.887346e-01, 9.887457e-01, 9.887568e-01, 9.887679e-01, 9.887790e-01, 9.887901e-01, 9.888012e-01, 9.888123e-01, 9.888234e-01, 9.888344e-01, 9.888455e-01, 9.888566e-01, 9.888678e-01, 9.888788e-01, 9.888899e-01, 9.889010e-01, 9.889121e-01, 9.889232e-01, 9.889343e-01, 9.889454e-01, 9.889565e-01, 9.889676e-01, 9.889787e-01, 9.889898e-01, 9.890009e-01, 9.890119e-01, 9.890230e-01, 9.890341e-01, 9.890452e-01, 9.890562e-01, 9.890673e-01, 9.890784e-01, 9.890895e-01, 9.891006e-01, 9.891117e-01, 9.891228e-01, 9.891339e-01, 9.891450e-01, 9.891561e-01, 9.891672e-01, 9.891782e-01, 9.891893e-01, 9.892004e-01, 9.892115e-01, 9.892226e-01, 9.892337e-01, 9.892448e-01, 9.892559e-01, 9.892670e-01, 9.892781e-01, 9.892892e-01, 9.893003e-01, 9.893113e-01, 9.893225e-01, 9.893336e-01, 9.893445e-01, 9.893556e-01, 9.893668e-01, 9.893779e-01, 9.893889e-01, 9.894000e-01, 9.894111e-01, 9.894222e-01, 9.894333e-01, 9.894444e-01, 9.894555e-01, 9.894666e-01, 9.894777e-01, 9.894888e-01, 9.894999e-01, 9.895110e-01, 9.895220e-01, 9.895331e-01, 9.895442e-01, 9.895552e-01, 9.895663e-01, 9.895774e-01, 9.895885e-01, 9.895996e-01, 9.896107e-01, 9.896218e-01, 9.896329e-01, 9.896440e-01, 9.896551e-01, 9.896662e-01, 9.896773e-01, 9.896883e-01, 9.896994e-01, 9.897105e-01, 9.897215e-01, 9.897326e-01, 9.897437e-01, 9.897548e-01, 9.897659e-01, 9.897770e-01, 9.897881e-01, 9.897992e-01, 9.898102e-01, 9.898213e-01, 9.898324e-01, 9.898435e-01, 9.898546e-01, 9.898657e-01, 9.898767e-01, 9.898878e-01, 9.898989e-01, 9.899100e-01, 9.899212e-01, 9.899321e-01, 9.899432e-01, 9.899543e-01, 9.899654e-01, 9.899765e-01, 9.899876e-01, 9.899987e-01, 9.900098e-01, 9.900209e-01, 9.900319e-01, 9.900430e-01, 9.900541e-01, 9.900652e-01, 9.900762e-01, 9.900873e-01, 9.900984e-01, 9.901096e-01, 9.901205e-01, 9.901316e-01, 9.901427e-01, 9.901538e-01, 9.901649e-01, 9.901760e-01, 9.901871e-01, 9.901982e-01, 9.902092e-01, 9.902203e-01, 9.902314e-01, 9.902425e-01, 9.902536e-01, 9.902647e-01, 9.902757e-01, 9.902868e-01, 9.902979e-01, 9.903089e-01, 9.903200e-01, 9.903311e-01, 9.903422e-01, 9.903533e-01, 9.903644e-01, 9.903754e-01, 9.903865e-01, 9.903976e-01, 9.904087e-01, 9.904198e-01, 9.904309e-01, 9.904420e-01, 9.904530e-01, 9.904641e-01, 9.904752e-01, 9.904863e-01, 9.904974e-01, 9.905084e-01, 9.905195e-01, 9.905306e-01, 9.905416e-01, 9.905527e-01, 9.905638e-01, 9.905749e-01, 9.905860e-01, 9.905970e-01, 9.906081e-01, 9.906192e-01, 9.906303e-01, 9.906414e-01, 9.906525e-01, 9.906635e-01, 9.906746e-01, 9.906857e-01, 9.906968e-01, 9.907079e-01, 9.907190e-01, 9.907300e-01, 9.907411e-01, 9.907522e-01, 9.907632e-01, 9.907743e-01, 9.907854e-01, 9.907964e-01, 9.908075e-01, 9.908186e-01, 9.908297e-01, 9.908408e-01, 9.908518e-01, 9.908629e-01, 9.908740e-01, 9.908851e-01, 9.908962e-01, 9.909072e-01, 9.909183e-01, 9.909294e-01, 9.909405e-01, 9.909515e-01, 9.909626e-01, 9.909737e-01, 9.909847e-01, 9.909958e-01, 9.910070e-01, 9.910179e-01, 9.910290e-01, 9.910401e-01, 9.910512e-01, 9.910623e-01, 9.910733e-01, 9.910844e-01, 9.910955e-01, 9.911066e-01, 9.911177e-01, 9.911287e-01, 9.911398e-01, 9.911509e-01, 9.911620e-01, 9.911731e-01, 9.911841e-01, 9.911952e-01, 9.912063e-01, 9.912174e-01, 9.912283e-01, 9.912395e-01, 9.912506e-01, 9.912617e-01, 9.912727e-01, 9.912838e-01, 9.912949e-01, 9.913059e-01, 9.913170e-01, 9.913281e-01, 9.913391e-01, 9.913502e-01, 9.913613e-01, 9.913724e-01, 9.913834e-01, 9.913945e-01, 9.914056e-01, 9.914167e-01, 9.914277e-01, 9.914388e-01, 9.914499e-01, 9.914610e-01, 9.914720e-01, 9.914831e-01, 9.914942e-01, 9.915053e-01, 9.915163e-01, 9.915274e-01, 9.915385e-01, 9.915496e-01, 9.915606e-01, 9.915717e-01, 9.915828e-01, 9.915938e-01, 9.916049e-01, 9.916160e-01, 9.916270e-01, 9.916381e-01, 9.916492e-01, 9.916602e-01, 9.916713e-01, 9.916824e-01, 9.916934e-01, 9.917045e-01, 9.917156e-01, 9.917267e-01, 9.917377e-01, 9.917488e-01, 9.917599e-01, 9.917710e-01, 9.917820e-01, 9.917931e-01, 9.918042e-01, 9.918151e-01, 9.918263e-01, 9.918374e-01, 9.918485e-01, 9.918594e-01, 9.918705e-01, 9.918817e-01, 9.918928e-01, 9.919037e-01, 9.919148e-01, 9.919260e-01, 9.919369e-01, 9.919480e-01, 9.919591e-01, 9.919702e-01, 9.919812e-01, 9.919923e-01, 9.920034e-01, 9.920144e-01, 9.920255e-01, 9.920366e-01, 9.920477e-01, 9.920587e-01, 9.920698e-01, 9.920809e-01, 9.920919e-01, 9.921030e-01, 9.921141e-01, 9.921251e-01, 9.921362e-01, 9.921473e-01, 9.921584e-01, 9.921694e-01, 9.921805e-01, 9.921916e-01, 9.922026e-01, 9.922137e-01, 9.922248e-01, 9.922358e-01, 9.922469e-01, 9.922580e-01, 9.922690e-01, 9.922801e-01, 9.922912e-01, 9.923022e-01, 9.923132e-01, 9.923244e-01, 9.923354e-01, 9.923464e-01, 9.923575e-01, 9.923686e-01, 9.923796e-01, 9.923907e-01, 9.924018e-01, 9.924128e-01, 9.924239e-01, 9.924350e-01, 9.924460e-01, 9.924571e-01, 9.924682e-01, 9.924792e-01, 9.924903e-01, 9.925014e-01, 9.925124e-01, 9.925235e-01, 9.925346e-01, 9.925456e-01, 9.925567e-01, 9.925678e-01, 9.925788e-01, 9.925899e-01, 9.926010e-01, 9.926119e-01, 9.926231e-01, 9.926342e-01, 9.926451e-01, 9.926562e-01, 9.926674e-01, 9.926783e-01, 9.926894e-01, 9.927005e-01, 9.927115e-01, 9.927226e-01, 9.927337e-01, 9.927447e-01, 9.927558e-01, 9.927669e-01, 9.927779e-01, 9.927890e-01, 9.928001e-01, 9.928111e-01, 9.928222e-01, 9.928332e-01, 9.928443e-01, 9.928554e-01, 9.928664e-01, 9.928775e-01, 9.928885e-01, 9.928996e-01, 9.929107e-01, 9.929217e-01, 9.929328e-01, 9.929439e-01, 9.929549e-01, 9.929660e-01, 9.929771e-01, 9.929881e-01, 9.929992e-01, 9.930102e-01, 9.930213e-01, 9.930324e-01, 9.930434e-01, 9.930545e-01, 9.930655e-01, 9.930766e-01, 9.930876e-01, 9.930987e-01, 9.931098e-01, 9.931208e-01, 9.931319e-01, 9.931430e-01, 9.931540e-01, 9.931651e-01, 9.931762e-01, 9.931872e-01, 9.931983e-01, 9.932092e-01, 9.932203e-01, 9.932315e-01, 9.932424e-01, 9.932535e-01, 9.932646e-01, 9.932756e-01, 9.932867e-01, 9.932978e-01, 9.933088e-01, 9.933199e-01, 9.933310e-01, 9.933420e-01, 9.933531e-01, 9.933642e-01, 9.933751e-01, 9.933862e-01, 9.933974e-01, 9.934083e-01, 9.934194e-01, 9.934304e-01, 9.934415e-01, 9.934525e-01, 9.934636e-01, 9.934747e-01, 9.934857e-01, 9.934968e-01, 9.935078e-01, 9.935189e-01, 9.935300e-01, 9.935410e-01, 9.935521e-01, 9.935631e-01, 9.935742e-01, 9.935852e-01, 9.935963e-01, 9.936074e-01, 9.936184e-01, 9.936295e-01, 9.936405e-01, 9.936516e-01, 9.936626e-01, 9.936737e-01, 9.936847e-01, 9.936958e-01, 9.937069e-01, 9.937179e-01, 9.937290e-01, 9.937400e-01, 9.937511e-01, 9.937621e-01, 9.937732e-01, 9.937842e-01, 9.937953e-01, 9.938064e-01, 9.938174e-01, 9.938285e-01, 9.938395e-01, 9.938506e-01, 9.938616e-01, 9.938727e-01, 9.938837e-01, 9.938948e-01, 9.939058e-01, 9.939169e-01, 9.939280e-01, 9.939390e-01, 9.939501e-01, 9.939611e-01, 9.939722e-01, 9.939832e-01, 9.939943e-01, 9.940053e-01, 9.940164e-01, 9.940274e-01, 9.940385e-01, 9.940495e-01, 9.940606e-01, 9.940717e-01, 9.940827e-01, 9.940938e-01, 9.941048e-01, 9.941159e-01, 9.941269e-01, 9.941379e-01, 9.941490e-01, 9.941601e-01, 9.941711e-01, 9.941822e-01, 9.941932e-01, 9.942043e-01, 9.942153e-01, 9.942264e-01, 9.942374e-01, 9.942484e-01, 9.942595e-01, 9.942706e-01, 9.942816e-01, 9.942927e-01, 9.943037e-01, 9.943148e-01, 9.943258e-01, 9.943368e-01, 9.943479e-01, 9.943590e-01, 9.943700e-01, 9.943811e-01, 9.943921e-01, 9.944032e-01, 9.944142e-01, 9.944253e-01, 9.944363e-01, 9.944474e-01, 9.944584e-01, 9.944695e-01, 9.944805e-01, 9.944916e-01, 9.945026e-01, 9.945137e-01, 9.945247e-01, 9.945357e-01, 9.945468e-01, 9.945579e-01, 9.945689e-01, 9.945800e-01, 9.945910e-01, 9.946021e-01, 9.946131e-01, 9.946241e-01, 9.946352e-01, 9.946463e-01, 9.946573e-01, 9.946684e-01, 9.946794e-01, 9.946904e-01, 9.947014e-01, 9.947125e-01, 9.947236e-01, 9.947346e-01, 9.947457e-01, 9.947567e-01, 9.947678e-01, 9.947788e-01, 9.947899e-01, 9.948009e-01, 9.948120e-01, 9.948230e-01, 9.948341e-01, 9.948451e-01, 9.948561e-01, 9.948672e-01, 9.948782e-01, 9.948893e-01, 9.949003e-01, 9.949114e-01, 9.949224e-01, 9.949335e-01, 9.949445e-01, 9.949556e-01, 9.949666e-01, 9.949776e-01, 9.949887e-01, 9.949997e-01, 9.950108e-01, 9.950218e-01, 9.950329e-01, 9.950439e-01, 9.950550e-01, 9.950660e-01, 9.950770e-01, 9.950881e-01, 9.950991e-01, 9.951102e-01, 9.951212e-01, 9.951323e-01, 9.951433e-01, 9.951543e-01, 9.951654e-01, 9.951764e-01, 9.951875e-01, 9.951985e-01, 9.952096e-01, 9.952206e-01, 9.952316e-01, 9.952427e-01, 9.952537e-01, 9.952648e-01, 9.952758e-01, 9.952869e-01, 9.952979e-01, 9.953089e-01, 9.953200e-01, 9.953310e-01, 9.953421e-01, 9.953531e-01, 9.953641e-01, 9.953752e-01, 9.953862e-01, 9.953973e-01, 9.954083e-01, 9.954193e-01, 9.954304e-01, 9.954414e-01, 9.954525e-01, 9.954636e-01, 9.954746e-01, 9.954856e-01, 9.954966e-01, 9.955077e-01, 9.955187e-01, 9.955298e-01, 9.955409e-01, 9.955518e-01, 9.955629e-01, 9.955739e-01, 9.955850e-01, 9.955961e-01, 9.956070e-01, 9.956182e-01, 9.956291e-01, 9.956402e-01, 9.956512e-01, 9.956623e-01, 9.956734e-01, 9.956843e-01, 9.956954e-01, 9.957064e-01, 9.957175e-01, 9.957286e-01, 9.957396e-01, 9.957505e-01, 9.957616e-01, 9.957727e-01, 9.957837e-01, 9.957948e-01, 9.958058e-01, 9.958169e-01, 9.958279e-01, 9.958389e-01, 9.958500e-01, 9.958610e-01, 9.958720e-01, 9.958831e-01, 9.958941e-01, 9.959051e-01, 9.959162e-01, 9.959272e-01, 9.959383e-01, 9.959493e-01, 9.959603e-01, 9.959714e-01, 9.959824e-01, 9.959934e-01, 9.960045e-01, 9.960155e-01, 9.960265e-01, 9.960376e-01, 9.960486e-01, 9.960596e-01, 9.960707e-01, 9.960817e-01, 9.960927e-01, 9.961038e-01, 9.961149e-01, 9.961259e-01, 9.961369e-01, 9.961479e-01, 9.961590e-01, 9.961700e-01, 9.961810e-01, 9.961922e-01, 9.962031e-01, 9.962142e-01, 9.962252e-01, 9.962363e-01, 9.962472e-01, 9.962583e-01, 9.962693e-01, 9.962804e-01, 9.962915e-01, 9.963025e-01, 9.963135e-01, 9.963245e-01, 9.963356e-01, 9.963466e-01, 9.963577e-01, 9.963686e-01, 9.963797e-01, 9.963908e-01, 9.964018e-01, 9.964128e-01, 9.964238e-01, 9.964349e-01, 9.964459e-01, 9.964569e-01, 9.964680e-01, 9.964790e-01, 9.964900e-01, 9.965011e-01, 9.965121e-01, 9.965231e-01, 9.965342e-01, 9.965452e-01, 9.965562e-01, 9.965673e-01, 9.965783e-01, 9.965893e-01, 9.966003e-01, 9.966114e-01, 9.966224e-01, 9.966334e-01, 9.966446e-01, 9.966555e-01, 9.966666e-01, 9.966776e-01, 9.966887e-01, 9.966996e-01, 9.967107e-01, 9.967217e-01, 9.967328e-01, 9.967437e-01, 9.967549e-01, 9.967659e-01, 9.967769e-01, 9.967879e-01, 9.967990e-01, 9.968100e-01, 9.968210e-01, 9.968321e-01, 9.968431e-01, 9.968541e-01, 9.968651e-01, 9.968762e-01, 9.968872e-01, 9.968982e-01, 9.969092e-01, 9.969203e-01, 9.969313e-01, 9.969423e-01, 9.969534e-01, 9.969644e-01, 9.969754e-01, 9.969864e-01, 9.969975e-01, 9.970086e-01, 9.970195e-01, 9.970306e-01, 9.970416e-01, 9.970527e-01, 9.970636e-01, 9.970747e-01, 9.970858e-01, 9.970968e-01, 9.971077e-01, 9.971189e-01, 9.971299e-01, 9.971409e-01, 9.971519e-01, 9.971630e-01, 9.971740e-01, 9.971850e-01, 9.971960e-01, 9.972071e-01, 9.972181e-01, 9.972291e-01, 9.972401e-01, 9.972512e-01, 9.972622e-01, 9.972732e-01, 9.972842e-01, 9.972953e-01, 9.973063e-01, 9.973173e-01, 9.973283e-01, 9.973394e-01, 9.973505e-01, 9.973614e-01, 9.973724e-01, 9.973835e-01, 9.973946e-01, 9.974055e-01, 9.974166e-01, 9.974276e-01, 9.974387e-01, 9.974497e-01, 9.974607e-01, 9.974717e-01, 9.974827e-01, 9.974938e-01, 9.975048e-01, 9.975158e-01, 9.975268e-01, 9.975379e-01, 9.975489e-01, 9.975599e-01, 9.975709e-01, 9.975819e-01, 9.975930e-01, 9.976040e-01, 9.976150e-01, 9.976261e-01, 9.976370e-01, 9.976481e-01, 9.976591e-01, 9.976702e-01, 9.976811e-01, 9.976922e-01, 9.977033e-01, 9.977143e-01, 9.977252e-01, 9.977363e-01, 9.977474e-01, 9.977584e-01, 9.977694e-01, 9.977804e-01, 9.977914e-01, 9.978025e-01, 9.978135e-01, 9.978245e-01, 9.978355e-01, 9.978465e-01, 9.978575e-01, 9.978686e-01, 9.978796e-01, 9.978907e-01, 9.979016e-01, 9.979126e-01, 9.979237e-01, 9.979348e-01, 9.979457e-01, 9.979568e-01, 9.979678e-01, 9.979789e-01, 9.979899e-01, 9.980009e-01, 9.980119e-01, 9.980229e-01, 9.980339e-01, 9.980450e-01, 9.980560e-01, 9.980670e-01, 9.980780e-01, 9.980890e-01, 9.981000e-01, 9.981111e-01, 9.981221e-01, 9.981331e-01, 9.981441e-01, 9.981551e-01, 9.981661e-01, 9.981772e-01, 9.981883e-01, 9.981993e-01, 9.982103e-01, 9.982213e-01, 9.982323e-01, 9.982434e-01, 9.982544e-01, 9.982654e-01, 9.982764e-01, 9.982874e-01, 9.982984e-01, 9.983094e-01, 9.983205e-01, 9.983315e-01, 9.983425e-01, 9.983535e-01, 9.983645e-01, 9.983755e-01, 9.983866e-01, 9.983976e-01, 9.984086e-01, 9.984196e-01, 9.984307e-01, 9.984416e-01, 9.984527e-01, 9.984637e-01, 9.984748e-01, 9.984858e-01, 9.984968e-01, 9.985078e-01, 9.985188e-01, 9.985298e-01, 9.985408e-01, 9.985519e-01, 9.985629e-01, 9.985739e-01, 9.985849e-01, 9.985960e-01, 9.986069e-01, 9.986179e-01, 9.986290e-01, 9.986401e-01, 9.986510e-01, 9.986621e-01, 9.986731e-01, 9.986840e-01, 9.986951e-01, 9.987061e-01, 9.987171e-01, 9.987281e-01, 9.987392e-01, 9.987502e-01, 9.987612e-01, 9.987722e-01, 9.987832e-01, 9.987943e-01, 9.988052e-01, 9.988163e-01, 9.988273e-01, 9.988384e-01, 9.988493e-01, 9.988604e-01, 9.988714e-01, 9.988824e-01, 9.988934e-01, 9.989044e-01, 9.989154e-01, 9.989264e-01, 9.989374e-01, 9.989485e-01, 9.989595e-01, 9.989705e-01, 9.989815e-01, 9.989925e-01, 9.990035e-01, 9.990146e-01, 9.990255e-01, 9.990366e-01, 9.990476e-01, 9.990585e-01, 9.990696e-01, 9.990807e-01, 9.990917e-01, 9.991027e-01, 9.991137e-01, 9.991247e-01, 9.991357e-01, 9.991467e-01, 9.991577e-01, 9.991687e-01, 9.991797e-01, 9.991907e-01, 9.992017e-01, 9.992127e-01, 9.992238e-01, 9.992349e-01, 9.992459e-01, 9.992568e-01, 9.992679e-01, 9.992789e-01, 9.992899e-01, 9.993009e-01, 9.993119e-01, 9.993229e-01, 9.993339e-01, 9.993449e-01, 9.993559e-01, 9.993669e-01, 9.993780e-01, 9.993889e-01, 9.994000e-01, 9.994110e-01, 9.994221e-01, 9.994330e-01, 9.994441e-01, 9.994551e-01, 9.994661e-01, 9.994771e-01, 9.994881e-01, 9.994991e-01, 9.995101e-01, 9.995211e-01, 9.995321e-01, 9.995431e-01, 9.995542e-01, 9.995651e-01, 9.995762e-01, 9.995872e-01, 9.995981e-01, 9.996092e-01, 9.996202e-01, 9.996312e-01, 9.996422e-01, 9.996532e-01, 9.996643e-01, 9.996753e-01, 9.996863e-01, 9.996973e-01, 9.997083e-01, 9.997193e-01, 9.997303e-01, 9.997413e-01, 9.997523e-01, 9.997634e-01, 9.997743e-01, 9.997854e-01, 9.997964e-01, 9.998074e-01, 9.998184e-01, 9.998294e-01, 9.998404e-01, 9.998514e-01, 9.998624e-01, 9.998734e-01, 9.998844e-01, 9.998955e-01, 9.999064e-01, 9.999174e-01, 9.999285e-01, 9.999394e-01, 9.999505e-01, 9.999615e-01, 9.999725e-01, 9.999835e-01, 9.999945e-01, }; + +/* fast pow lookup table, precision 16, size 65536 */ +const uint32_t fast_pow_precision = 16; +const uint32_t fast_pow_table_size = 65536; +const uint32_t fast_pow_table[65536] = { + 44, 133, 222, 311, 399, 488, 577, 665, 754, 843, 932, 1020, 1109, 1198, 1287, 1375, 1464, 1553, 1642, 1730, 1819, 1908, 1997, 2085, 2174, 2263, 2351, 2440, 2529, 2618, 2706, 2795, 2884, 2973, 3061, 3150, 3239, 3328, 3417, 3505, 3594, 3683, 3772, 3860, 3949, 4038, 4127, 4215, 4304, 4393, 4482, 4570, 4659, 4748, 4837, 4926, 5014, 5103, 5192, 5281, 5369, 5458, 5547, 5636, 5725, 5813, 5902, 5991, 6080, 6169, 6257, 6346, 6435, 6524, 6612, 6701, 6790, 6879, 6968, 7056, 7145, 7234, 7323, 7412, 7500, 7589, 7678, 7767, 7856, 7944, 8033, 8122, 8211, 8300, 8388, 8477, 8566, 8655, 8744, 8833, 8921, 9010, 9099, 9188, 9277, 9365, 9454, 9543, 9632, 9721, 9810, 9898, 9987, 10076, 10165, 10254, 10343, 10431, 10520, 10609, 10698, 10787, 10876, 10964, 11053, 11142, 11231, 11320, 11409, 11497, 11586, 11675, 11764, 11853, 11942, 12031, 12119, 12208, 12297, 12386, 12475, 12564, 12653, 12741, 12830, 12919, 13008, 13097, 13186, 13275, 13363, 13452, 13541, 13630, 13719, 13808, 13897, 13985, 14074, 14163, 14252, 14341, 14430, 14519, 14608, 14696, 14785, 14874, 14963, 15052, 15141, 15230, 15319, 15408, 15496, 15585, 15674, 15763, 15852, 15941, 16030, 16119, 16208, 16296, 16385, 16474, 16563, 16652, 16741, 16830, 16919, 17008, 17097, 17185, 17274, 17363, 17452, 17541, 17630, 17719, 17808, 17897, 17986, 18075, 18163, 18252, 18341, 18430, 18519, 18608, 18697, 18786, 18875, 18964, 19053, 19142, 19231, 19319, 19408, 19497, 19586, 19675, 19764, 19853, 19942, 20031, 20120, 20209, 20298, 20387, 20476, 20565, 20653, 20742, 20831, 20920, 21009, 21098, 21187, 21276, 21365, 21454, 21543, 21632, 21721, 21810, 21899, 21988, 22077, 22166, 22255, 22343, 22432, 22521, 22610, 22699, 22788, 22877, 22966, 23055, 23144, 23233, 23322, 23411, 23500, 23589, 23678, 23767, 23856, 23945, 24034, 24123, 24212, 24301, 24390, 24479, 24568, 24657, 24746, 24835, 24924, 25013, 25102, 25191, 25280, 25369, 25458, 25547, 25636, 25725, 25814, 25903, 25992, 26081, 26170, 26259, 26348, 26437, 26526, 26615, 26704, 26793, 26882, 26971, 27060, 27149, 27238, 27327, 27416, 27505, 27594, 27683, 27772, 27861, 27950, 28039, 28128, 28217, 28306, 28395, 28484, 28573, 28662, 28751, 28840, 28929, 29018, 29107, 29196, 29285, 29374, 29463, 29552, 29641, 29730, 29819, 29908, 29997, 30087, 30176, 30265, 30354, 30443, 30532, 30621, 30710, 30799, 30888, 30977, 31066, 31155, 31244, 31333, 31422, 31511, 31600, 31689, 31778, 31868, 31957, 32046, 32135, 32224, 32313, 32402, 32491, 32580, 32669, 32758, 32847, 32936, 33025, 33114, 33204, 33293, 33382, 33471, 33560, 33649, 33738, 33827, 33916, 34005, 34094, 34183, 34272, 34362, 34451, 34540, 34629, 34718, 34807, 34896, 34985, 35074, 35163, 35252, 35342, 35431, 35520, 35609, 35698, 35787, 35876, 35965, 36054, 36143, 36233, 36322, 36411, 36500, 36589, 36678, 36767, 36856, 36945, 37035, 37124, 37213, 37302, 37391, 37480, 37569, 37658, 37748, 37837, 37926, 38015, 38104, 38193, 38282, 38371, 38461, 38550, 38639, 38728, 38817, 38906, 38995, 39084, 39174, 39263, 39352, 39441, 39530, 39619, 39708, 39798, 39887, 39976, 40065, 40154, 40243, 40332, 40422, 40511, 40600, 40689, 40778, 40867, 40957, 41046, 41135, 41224, 41313, 41402, 41491, 41581, 41670, 41759, 41848, 41937, 42026, 42116, 42205, 42294, 42383, 42472, 42561, 42651, 42740, 42829, 42918, 43007, 43097, 43186, 43275, 43364, 43453, 43542, 43632, 43721, 43810, 43899, 43988, 44078, 44167, 44256, 44345, 44434, 44524, 44613, 44702, 44791, 44880, 44970, 45059, 45148, 45237, 45326, 45416, 45505, 45594, 45683, 45772, 45862, 45951, 46040, 46129, 46218, 46308, 46397, 46486, 46575, 46664, 46754, 46843, 46932, 47021, 47111, 47200, 47289, 47378, 47467, 47557, 47646, 47735, 47824, 47914, 48003, 48092, 48181, 48270, 48360, 48449, 48538, 48627, 48717, 48806, 48895, 48984, 49074, 49163, 49252, 49341, 49431, 49520, 49609, 49698, 49788, 49877, 49966, 50055, 50145, 50234, 50323, 50412, 50502, 50591, 50680, 50769, 50859, 50948, 51037, 51126, 51216, 51305, 51394, 51484, 51573, 51662, 51751, 51841, 51930, 52019, 52108, 52198, 52287, 52376, 52466, 52555, 52644, 52733, 52823, 52912, 53001, 53090, 53180, 53269, 53358, 53448, 53537, 53626, 53715, 53805, 53894, 53983, 54073, 54162, 54251, 54341, 54430, 54519, 54608, 54698, 54787, 54876, 54966, 55055, 55144, 55234, 55323, 55412, 55501, 55591, 55680, 55769, 55859, 55948, 56037, 56127, 56216, 56305, 56395, 56484, 56573, 56663, 56752, 56841, 56931, 57020, 57109, 57199, 57288, 57377, 57467, 57556, 57645, 57735, 57824, 57913, 58003, 58092, 58181, 58271, 58360, 58449, 58539, 58628, 58717, 58807, 58896, 58985, 59075, 59164, 59253, 59343, 59432, 59521, 59611, 59700, 59789, 59879, 59968, 60058, 60147, 60236, 60326, 60415, 60504, 60594, 60683, 60772, 60862, 60951, 61041, 61130, 61219, 61309, 61398, 61487, 61577, 61666, 61755, 61845, 61934, 62024, 62113, 62202, 62292, 62381, 62471, 62560, 62649, 62739, 62828, 62917, 63007, 63096, 63186, 63275, 63364, 63454, 63543, 63633, 63722, 63811, 63901, 63990, 64080, 64169, 64258, 64348, 64437, 64527, 64616, 64705, 64795, 64884, 64974, 65063, 65152, 65242, 65331, 65421, 65510, 65600, 65689, 65778, 65868, 65957, 66047, 66136, 66225, 66315, 66404, 66494, 66583, 66673, 66762, 66851, 66941, 67030, 67120, 67209, 67299, 67388, 67477, 67567, 67656, 67746, 67835, 67925, 68014, 68104, 68193, 68282, 68372, 68461, 68551, 68640, 68730, 68819, 68909, 68998, 69088, 69177, 69266, 69356, 69445, 69535, 69624, 69714, 69803, 69893, 69982, 70072, 70161, 70250, 70340, 70429, 70519, 70608, 70698, 70787, 70877, 70966, 71056, 71145, 71235, 71324, 71414, 71503, 71593, 71682, 71772, 71861, 71951, 72040, 72129, 72219, 72308, 72398, 72487, 72577, 72666, 72756, 72845, 72935, 73024, 73114, 73203, 73293, 73382, 73472, 73561, 73651, 73740, 73830, 73919, 74009, 74098, 74188, 74277, 74367, 74456, 74546, 74635, 74725, 74814, 74904, 74994, 75083, 75173, 75262, 75352, 75441, 75531, 75620, 75710, 75799, 75889, 75978, 76068, 76157, 76247, 76336, 76426, 76515, 76605, 76694, 76784, 76874, 76963, 77053, 77142, 77232, 77321, 77411, 77500, 77590, 77679, 77769, 77858, 77948, 78038, 78127, 78217, 78306, 78396, 78485, 78575, 78664, 78754, 78844, 78933, 79023, 79112, 79202, 79291, 79381, 79470, 79560, 79650, 79739, 79829, 79918, 80008, 80097, 80187, 80277, 80366, 80456, 80545, 80635, 80724, 80814, 80904, 80993, 81083, 81172, 81262, 81352, 81441, 81531, 81620, 81710, 81799, 81889, 81979, 82068, 82158, 82247, 82337, 82427, 82516, 82606, 82695, 82785, 82875, 82964, 83054, 83143, 83233, 83323, 83412, 83502, 83591, 83681, 83771, 83860, 83950, 84039, 84129, 84219, 84308, 84398, 84488, 84577, 84667, 84756, 84846, 84936, 85025, 85115, 85204, 85294, 85384, 85473, 85563, 85653, 85742, 85832, 85922, 86011, 86101, 86190, 86280, 86370, 86459, 86549, 86639, 86728, 86818, 86908, 86997, 87087, 87176, 87266, 87356, 87445, 87535, 87625, 87714, 87804, 87894, 87983, 88073, 88163, 88252, 88342, 88432, 88521, 88611, 88701, 88790, 88880, 88970, 89059, 89149, 89239, 89328, 89418, 89508, 89597, 89687, 89777, 89866, 89956, 90046, 90135, 90225, 90315, 90404, 90494, 90584, 90673, 90763, 90853, 90942, 91032, 91122, 91211, 91301, 91391, 91480, 91570, 91660, 91750, 91839, 91929, 92019, 92108, 92198, 92288, 92377, 92467, 92557, 92647, 92736, 92826, 92916, 93005, 93095, 93185, 93274, 93364, 93454, 93544, 93633, 93723, 93813, 93902, 93992, 94082, 94172, 94261, 94351, 94441, 94531, 94620, 94710, 94800, 94889, 94979, 95069, 95159, 95248, 95338, 95428, 95518, 95607, 95697, 95787, 95876, 95966, 96056, 96146, 96235, 96325, 96415, 96505, 96594, 96684, 96774, 96864, 96953, 97043, 97133, 97223, 97312, 97402, 97492, 97582, 97671, 97761, 97851, 97941, 98030, 98120, 98210, 98300, 98389, 98479, 98569, 98659, 98749, 98838, 98928, 99018, 99108, 99197, 99287, 99377, 99467, 99556, 99646, 99736, 99826, 99916, 100005, 100095, 100185, 100275, 100364, 100454, 100544, 100634, 100724, 100813, 100903, 100993, 101083, 101173, 101262, 101352, 101442, 101532, 101622, 101711, 101801, 101891, 101981, 102071, 102160, 102250, 102340, 102430, 102520, 102609, 102699, 102789, 102879, 102969, 103058, 103148, 103238, 103328, 103418, 103508, 103597, 103687, 103777, 103867, 103957, 104046, 104136, 104226, 104316, 104406, 104496, 104585, 104675, 104765, 104855, 104945, 105035, 105124, 105214, 105304, 105394, 105484, 105574, 105663, 105753, 105843, 105933, 106023, 106113, 106202, 106292, 106382, 106472, 106562, 106652, 106742, 106831, 106921, 107011, 107101, 107191, 107281, 107371, 107460, 107550, 107640, 107730, 107820, 107910, 108000, 108089, 108179, 108269, 108359, 108449, 108539, 108629, 108719, 108808, 108898, 108988, 109078, 109168, 109258, 109348, 109438, 109527, 109617, 109707, 109797, 109887, 109977, 110067, 110157, 110247, 110336, 110426, 110516, 110606, 110696, 110786, 110876, 110966, 111056, 111145, 111235, 111325, 111415, 111505, 111595, 111685, 111775, 111865, 111955, 112044, 112134, 112224, 112314, 112404, 112494, 112584, 112674, 112764, 112854, 112944, 113034, 113123, 113213, 113303, 113393, 113483, 113573, 113663, 113753, 113843, 113933, 114023, 114113, 114203, 114292, 114382, 114472, 114562, 114652, 114742, 114832, 114922, 115012, 115102, 115192, 115282, 115372, 115462, 115552, 115642, 115732, 115821, 115911, 116001, 116091, 116181, 116271, 116361, 116451, 116541, 116631, 116721, 116811, 116901, 116991, 117081, 117171, 117261, 117351, 117441, 117531, 117621, 117711, 117801, 117891, 117980, 118070, 118160, 118250, 118340, 118430, 118520, 118610, 118700, 118790, 118880, 118970, 119060, 119150, 119240, 119330, 119420, 119510, 119600, 119690, 119780, 119870, 119960, 120050, 120140, 120230, 120320, 120410, 120500, 120590, 120680, 120770, 120860, 120950, 121040, 121130, 121220, 121310, 121400, 121490, 121580, 121670, 121760, 121850, 121940, 122030, 122120, 122210, 122300, 122390, 122480, 122570, 122660, 122750, 122840, 122930, 123020, 123110, 123200, 123290, 123380, 123470, 123560, 123651, 123741, 123831, 123921, 124011, 124101, 124191, 124281, 124371, 124461, 124551, 124641, 124731, 124821, 124911, 125001, 125091, 125181, 125271, 125361, 125451, 125541, 125631, 125721, 125812, 125902, 125992, 126082, 126172, 126262, 126352, 126442, 126532, 126622, 126712, 126802, 126892, 126982, 127072, 127162, 127252, 127343, 127433, 127523, 127613, 127703, 127793, 127883, 127973, 128063, 128153, 128243, 128333, 128423, 128514, 128604, 128694, 128784, 128874, 128964, 129054, 129144, 129234, 129324, 129414, 129505, 129595, 129685, 129775, 129865, 129955, 130045, 130135, 130225, 130315, 130405, 130496, 130586, 130676, 130766, 130856, 130946, 131036, 131126, 131216, 131307, 131397, 131487, 131577, 131667, 131757, 131847, 131937, 132027, 132118, 132208, 132298, 132388, 132478, 132568, 132658, 132748, 132839, 132929, 133019, 133109, 133199, 133289, 133379, 133470, 133560, 133650, 133740, 133830, 133920, 134010, 134100, 134191, 134281, 134371, 134461, 134551, 134641, 134731, 134822, 134912, 135002, 135092, 135182, 135272, 135363, 135453, 135543, 135633, 135723, 135813, 135903, 135994, 136084, 136174, 136264, 136354, 136444, 136535, 136625, 136715, 136805, 136895, 136985, 137076, 137166, 137256, 137346, 137436, 137527, 137617, 137707, 137797, 137887, 137977, 138068, 138158, 138248, 138338, 138428, 138519, 138609, 138699, 138789, 138879, 138969, 139060, 139150, 139240, 139330, 139420, 139511, 139601, 139691, 139781, 139871, 139962, 140052, 140142, 140232, 140322, 140413, 140503, 140593, 140683, 140774, 140864, 140954, 141044, 141134, 141225, 141315, 141405, 141495, 141585, 141676, 141766, 141856, 141946, 142037, 142127, 142217, 142307, 142397, 142488, 142578, 142668, 142758, 142849, 142939, 143029, 143119, 143210, 143300, 143390, 143480, 143571, 143661, 143751, 143841, 143932, 144022, 144112, 144202, 144293, 144383, 144473, 144563, 144654, 144744, 144834, 144924, 145015, 145105, 145195, 145285, 145376, 145466, 145556, 145646, 145737, 145827, 145917, 146007, 146098, 146188, 146278, 146368, 146459, 146549, 146639, 146730, 146820, 146910, 147000, 147091, 147181, 147271, 147362, 147452, 147542, 147632, 147723, 147813, 147903, 147994, 148084, 148174, 148264, 148355, 148445, 148535, 148626, 148716, 148806, 148896, 148987, 149077, 149167, 149258, 149348, 149438, 149529, 149619, 149709, 149799, 149890, 149980, 150070, 150161, 150251, 150341, 150432, 150522, 150612, 150703, 150793, 150883, 150974, 151064, 151154, 151245, 151335, 151425, 151515, 151606, 151696, 151786, 151877, 151967, 152057, 152148, 152238, 152328, 152419, 152509, 152599, 152690, 152780, 152870, 152961, 153051, 153142, 153232, 153322, 153413, 153503, 153593, 153684, 153774, 153864, 153955, 154045, 154135, 154226, 154316, 154406, 154497, 154587, 154677, 154768, 154858, 154949, 155039, 155129, 155220, 155310, 155400, 155491, 155581, 155671, 155762, 155852, 155943, 156033, 156123, 156214, 156304, 156394, 156485, 156575, 156666, 156756, 156846, 156937, 157027, 157117, 157208, 157298, 157389, 157479, 157569, 157660, 157750, 157841, 157931, 158021, 158112, 158202, 158293, 158383, 158473, 158564, 158654, 158745, 158835, 158925, 159016, 159106, 159197, 159287, 159377, 159468, 159558, 159649, 159739, 159829, 159920, 160010, 160101, 160191, 160282, 160372, 160462, 160553, 160643, 160734, 160824, 160914, 161005, 161095, 161186, 161276, 161367, 161457, 161547, 161638, 161728, 161819, 161909, 162000, 162090, 162181, 162271, 162361, 162452, 162542, 162633, 162723, 162814, 162904, 162995, 163085, 163175, 163266, 163356, 163447, 163537, 163628, 163718, 163809, 163899, 163989, 164080, 164170, 164261, 164351, 164442, 164532, 164623, 164713, 164804, 164894, 164985, 165075, 165166, 165256, 165346, 165437, 165527, 165618, 165708, 165799, 165889, 165980, 166070, 166161, 166251, 166342, 166432, 166523, 166613, 166704, 166794, 166885, 166975, 167066, 167156, 167247, 167337, 167428, 167518, 167609, 167699, 167790, 167880, 167971, 168061, 168152, 168242, 168333, 168423, 168514, 168604, 168695, 168785, 168876, 168966, 169057, 169147, 169238, 169328, 169419, 169509, 169600, 169690, 169781, 169871, 169962, 170052, 170143, 170233, 170324, 170414, 170505, 170595, 170686, 170776, 170867, 170958, 171048, 171139, 171229, 171320, 171410, 171501, 171591, 171682, 171772, 171863, 171953, 172044, 172135, 172225, 172316, 172406, 172497, 172587, 172678, 172768, 172859, 172949, 173040, 173131, 173221, 173312, 173402, 173493, 173583, 173674, 173764, 173855, 173946, 174036, 174127, 174217, 174308, 174398, 174489, 174580, 174670, 174761, 174851, 174942, 175032, 175123, 175214, 175304, 175395, 175485, 175576, 175666, 175757, 175848, 175938, 176029, 176119, 176210, 176301, 176391, 176482, 176572, 176663, 176753, 176844, 176935, 177025, 177116, 177206, 177297, 177388, 177478, 177569, 177659, 177750, 177841, 177931, 178022, 178112, 178203, 178294, 178384, 178475, 178566, 178656, 178747, 178837, 178928, 179019, 179109, 179200, 179290, 179381, 179472, 179562, 179653, 179744, 179834, 179925, 180015, 180106, 180197, 180287, 180378, 180469, 180559, 180650, 180740, 180831, 180922, 181012, 181103, 181194, 181284, 181375, 181466, 181556, 181647, 181738, 181828, 181919, 182009, 182100, 182191, 182281, 182372, 182463, 182553, 182644, 182735, 182825, 182916, 183007, 183097, 183188, 183279, 183369, 183460, 183551, 183641, 183732, 183823, 183913, 184004, 184095, 184185, 184276, 184367, 184457, 184548, 184639, 184729, 184820, 184911, 185001, 185092, 185183, 185273, 185364, 185455, 185545, 185636, 185727, 185818, 185908, 185999, 186090, 186180, 186271, 186362, 186452, 186543, 186634, 186724, 186815, 186906, 186997, 187087, 187178, 187269, 187359, 187450, 187541, 187631, 187722, 187813, 187904, 187994, 188085, 188176, 188266, 188357, 188448, 188539, 188629, 188720, 188811, 188901, 188992, 189083, 189174, 189264, 189355, 189446, 189537, 189627, 189718, 189809, 189899, 189990, 190081, 190172, 190262, 190353, 190444, 190535, 190625, 190716, 190807, 190898, 190988, 191079, 191170, 191261, 191351, 191442, 191533, 191624, 191714, 191805, 191896, 191987, 192077, 192168, 192259, 192350, 192440, 192531, 192622, 192713, 192803, 192894, 192985, 193076, 193166, 193257, 193348, 193439, 193529, 193620, 193711, 193802, 193893, 193983, 194074, 194165, 194256, 194346, 194437, 194528, 194619, 194710, 194800, 194891, 194982, 195073, 195163, 195254, 195345, 195436, 195527, 195617, 195708, 195799, 195890, 195981, 196071, 196162, 196253, 196344, 196435, 196525, 196616, 196707, 196798, 196889, 196979, 197070, 197161, 197252, 197343, 197433, 197524, 197615, 197706, 197797, 197888, 197978, 198069, 198160, 198251, 198342, 198432, 198523, 198614, 198705, 198796, 198887, 198977, 199068, 199159, 199250, 199341, 199432, 199522, 199613, 199704, 199795, 199886, 199977, 200067, 200158, 200249, 200340, 200431, 200522, 200612, 200703, 200794, 200885, 200976, 201067, 201158, 201248, 201339, 201430, 201521, 201612, 201703, 201793, 201884, 201975, 202066, 202157, 202248, 202339, 202430, 202520, 202611, 202702, 202793, 202884, 202975, 203066, 203156, 203247, 203338, 203429, 203520, 203611, 203702, 203793, 203883, 203974, 204065, 204156, 204247, 204338, 204429, 204520, 204611, 204701, 204792, 204883, 204974, 205065, 205156, 205247, 205338, 205429, 205519, 205610, 205701, 205792, 205883, 205974, 206065, 206156, 206247, 206338, 206428, 206519, 206610, 206701, 206792, 206883, 206974, 207065, 207156, 207247, 207338, 207428, 207519, 207610, 207701, 207792, 207883, 207974, 208065, 208156, 208247, 208338, 208429, 208520, 208610, 208701, 208792, 208883, 208974, 209065, 209156, 209247, 209338, 209429, 209520, 209611, 209702, 209793, 209884, 209975, 210065, 210156, 210247, 210338, 210429, 210520, 210611, 210702, 210793, 210884, 210975, 211066, 211157, 211248, 211339, 211430, 211521, 211612, 211703, 211794, 211885, 211976, 212066, 212157, 212248, 212339, 212430, 212521, 212612, 212703, 212794, 212885, 212976, 213067, 213158, 213249, 213340, 213431, 213522, 213613, 213704, 213795, 213886, 213977, 214068, 214159, 214250, 214341, 214432, 214523, 214614, 214705, 214796, 214887, 214978, 215069, 215160, 215251, 215342, 215433, 215524, 215615, 215706, 215797, 215888, 215979, 216070, 216161, 216252, 216343, 216434, 216525, 216616, 216707, 216798, 216889, 216980, 217071, 217162, 217253, 217344, 217435, 217526, 217617, 217708, 217799, 217890, 217981, 218072, 218163, 218254, 218345, 218436, 218527, 218619, 218710, 218801, 218892, 218983, 219074, 219165, 219256, 219347, 219438, 219529, 219620, 219711, 219802, 219893, 219984, 220075, 220166, 220257, 220348, 220439, 220530, 220622, 220713, 220804, 220895, 220986, 221077, 221168, 221259, 221350, 221441, 221532, 221623, 221714, 221805, 221896, 221987, 222079, 222170, 222261, 222352, 222443, 222534, 222625, 222716, 222807, 222898, 222989, 223080, 223171, 223263, 223354, 223445, 223536, 223627, 223718, 223809, 223900, 223991, 224082, 224173, 224265, 224356, 224447, 224538, 224629, 224720, 224811, 224902, 224993, 225084, 225176, 225267, 225358, 225449, 225540, 225631, 225722, 225813, 225904, 225996, 226087, 226178, 226269, 226360, 226451, 226542, 226633, 226724, 226816, 226907, 226998, 227089, 227180, 227271, 227362, 227453, 227545, 227636, 227727, 227818, 227909, 228000, 228091, 228182, 228274, 228365, 228456, 228547, 228638, 228729, 228820, 228912, 229003, 229094, 229185, 229276, 229367, 229459, 229550, 229641, 229732, 229823, 229914, 230005, 230097, 230188, 230279, 230370, 230461, 230552, 230644, 230735, 230826, 230917, 231008, 231099, 231191, 231282, 231373, 231464, 231555, 231646, 231738, 231829, 231920, 232011, 232102, 232193, 232285, 232376, 232467, 232558, 232649, 232741, 232832, 232923, 233014, 233105, 233196, 233288, 233379, 233470, 233561, 233652, 233744, 233835, 233926, 234017, 234108, 234200, 234291, 234382, 234473, 234564, 234656, 234747, 234838, 234929, 235020, 235112, 235203, 235294, 235385, 235476, 235568, 235659, 235750, 235841, 235933, 236024, 236115, 236206, 236297, 236389, 236480, 236571, 236662, 236754, 236845, 236936, 237027, 237118, 237210, 237301, 237392, 237483, 237575, 237666, 237757, 237848, 237940, 238031, 238122, 238213, 238305, 238396, 238487, 238578, 238670, 238761, 238852, 238943, 239035, 239126, 239217, 239308, 239400, 239491, 239582, 239673, 239765, 239856, 239947, 240038, 240130, 240221, 240312, 240403, 240495, 240586, 240677, 240768, 240860, 240951, 241042, 241134, 241225, 241316, 241407, 241499, 241590, 241681, 241773, 241864, 241955, 242046, 242138, 242229, 242320, 242411, 242503, 242594, 242685, 242777, 242868, 242959, 243051, 243142, 243233, 243324, 243416, 243507, 243598, 243690, 243781, 243872, 243964, 244055, 244146, 244237, 244329, 244420, 244511, 244603, 244694, 244785, 244877, 244968, 245059, 245151, 245242, 245333, 245424, 245516, 245607, 245698, 245790, 245881, 245972, 246064, 246155, 246246, 246338, 246429, 246520, 246612, 246703, 246794, 246886, 246977, 247068, 247160, 247251, 247342, 247434, 247525, 247616, 247708, 247799, 247890, 247982, 248073, 248164, 248256, 248347, 248439, 248530, 248621, 248713, 248804, 248895, 248987, 249078, 249169, 249261, 249352, 249443, 249535, 249626, 249718, 249809, 249900, 249992, 250083, 250174, 250266, 250357, 250448, 250540, 250631, 250723, 250814, 250905, 250997, 251088, 251179, 251271, 251362, 251454, 251545, 251636, 251728, 251819, 251911, 252002, 252093, 252185, 252276, 252367, 252459, 252550, 252642, 252733, 252824, 252916, 253007, 253099, 253190, 253281, 253373, 253464, 253556, 253647, 253738, 253830, 253921, 254013, 254104, 254196, 254287, 254378, 254470, 254561, 254653, 254744, 254835, 254927, 255018, 255110, 255201, 255293, 255384, 255475, 255567, 255658, 255750, 255841, 255933, 256024, 256115, 256207, 256298, 256390, 256481, 256573, 256664, 256755, 256847, 256938, 257030, 257121, 257213, 257304, 257396, 257487, 257578, 257670, 257761, 257853, 257944, 258036, 258127, 258219, 258310, 258401, 258493, 258584, 258676, 258767, 258859, 258950, 259042, 259133, 259225, 259316, 259408, 259499, 259590, 259682, 259773, 259865, 259956, 260048, 260139, 260231, 260322, 260414, 260505, 260597, 260688, 260780, 260871, 260963, 261054, 261146, 261237, 261329, 261420, 261512, 261603, 261694, 261786, 261877, 261969, 262060, 262152, 262243, 262335, 262426, 262518, 262609, 262701, 262792, 262884, 262975, 263067, 263158, 263250, 263341, 263433, 263525, 263616, 263708, 263799, 263891, 263982, 264074, 264165, 264257, 264348, 264440, 264531, 264623, 264714, 264806, 264897, 264989, 265080, 265172, 265263, 265355, 265446, 265538, 265629, 265721, 265813, 265904, 265996, 266087, 266179, 266270, 266362, 266453, 266545, 266636, 266728, 266819, 266911, 267003, 267094, 267186, 267277, 267369, 267460, 267552, 267643, 267735, 267827, 267918, 268010, 268101, 268193, 268284, 268376, 268467, 268559, 268651, 268742, 268834, 268925, 269017, 269108, 269200, 269292, 269383, 269475, 269566, 269658, 269749, 269841, 269933, 270024, 270116, 270207, 270299, 270390, 270482, 270574, 270665, 270757, 270848, 270940, 271032, 271123, 271215, 271306, 271398, 271490, 271581, 271673, 271764, 271856, 271948, 272039, 272131, 272222, 272314, 272406, 272497, 272589, 272680, 272772, 272864, 272955, 273047, 273138, 273230, 273322, 273413, 273505, 273596, 273688, 273780, 273871, 273963, 274055, 274146, 274238, 274329, 274421, 274513, 274604, 274696, 274788, 274879, 274971, 275062, 275154, 275246, 275337, 275429, 275521, 275612, 275704, 275796, 275887, 275979, 276070, 276162, 276254, 276345, 276437, 276529, 276620, 276712, 276804, 276895, 276987, 277079, 277170, 277262, 277354, 277445, 277537, 277629, 277720, 277812, 277904, 277995, 278087, 278179, 278270, 278362, 278454, 278545, 278637, 278729, 278820, 278912, 279004, 279095, 279187, 279279, 279370, 279462, 279554, 279645, 279737, 279829, 279920, 280012, 280104, 280195, 280287, 280379, 280470, 280562, 280654, 280746, 280837, 280929, 281021, 281112, 281204, 281296, 281387, 281479, 281571, 281662, 281754, 281846, 281938, 282029, 282121, 282213, 282304, 282396, 282488, 282580, 282671, 282763, 282855, 282946, 283038, 283130, 283222, 283313, 283405, 283497, 283588, 283680, 283772, 283864, 283955, 284047, 284139, 284231, 284322, 284414, 284506, 284597, 284689, 284781, 284873, 284964, 285056, 285148, 285240, 285331, 285423, 285515, 285607, 285698, 285790, 285882, 285974, 286065, 286157, 286249, 286341, 286432, 286524, 286616, 286708, 286799, 286891, 286983, 287075, 287166, 287258, 287350, 287442, 287533, 287625, 287717, 287809, 287900, 287992, 288084, 288176, 288268, 288359, 288451, 288543, 288635, 288726, 288818, 288910, 289002, 289094, 289185, 289277, 289369, 289461, 289552, 289644, 289736, 289828, 289920, 290011, 290103, 290195, 290287, 290379, 290470, 290562, 290654, 290746, 290838, 290929, 291021, 291113, 291205, 291297, 291388, 291480, 291572, 291664, 291756, 291847, 291939, 292031, 292123, 292215, 292306, 292398, 292490, 292582, 292674, 292766, 292857, 292949, 293041, 293133, 293225, 293316, 293408, 293500, 293592, 293684, 293776, 293867, 293959, 294051, 294143, 294235, 294327, 294418, 294510, 294602, 294694, 294786, 294878, 294969, 295061, 295153, 295245, 295337, 295429, 295521, 295612, 295704, 295796, 295888, 295980, 296072, 296163, 296255, 296347, 296439, 296531, 296623, 296715, 296806, 296898, 296990, 297082, 297174, 297266, 297358, 297450, 297541, 297633, 297725, 297817, 297909, 298001, 298093, 298185, 298276, 298368, 298460, 298552, 298644, 298736, 298828, 298920, 299011, 299103, 299195, 299287, 299379, 299471, 299563, 299655, 299747, 299838, 299930, 300022, 300114, 300206, 300298, 300390, 300482, 300574, 300666, 300757, 300849, 300941, 301033, 301125, 301217, 301309, 301401, 301493, 301585, 301677, 301768, 301860, 301952, 302044, 302136, 302228, 302320, 302412, 302504, 302596, 302688, 302780, 302872, 302963, 303055, 303147, 303239, 303331, 303423, 303515, 303607, 303699, 303791, 303883, 303975, 304067, 304159, 304251, 304342, 304434, 304526, 304618, 304710, 304802, 304894, 304986, 305078, 305170, 305262, 305354, 305446, 305538, 305630, 305722, 305814, 305906, 305998, 306090, 306181, 306273, 306365, 306457, 306549, 306641, 306733, 306825, 306917, 307009, 307101, 307193, 307285, 307377, 307469, 307561, 307653, 307745, 307837, 307929, 308021, 308113, 308205, 308297, 308389, 308481, 308573, 308665, 308757, 308849, 308941, 309033, 309125, 309217, 309309, 309401, 309493, 309585, 309677, 309769, 309861, 309953, 310045, 310137, 310229, 310321, 310413, 310505, 310597, 310689, 310781, 310873, 310965, 311057, 311149, 311241, 311333, 311425, 311517, 311609, 311701, 311793, 311885, 311977, 312069, 312161, 312253, 312345, 312437, 312529, 312621, 312713, 312805, 312897, 312989, 313081, 313173, 313265, 313357, 313449, 313541, 313634, 313726, 313818, 313910, 314002, 314094, 314186, 314278, 314370, 314462, 314554, 314646, 314738, 314830, 314922, 315014, 315106, 315198, 315290, 315382, 315475, 315567, 315659, 315751, 315843, 315935, 316027, 316119, 316211, 316303, 316395, 316487, 316579, 316671, 316763, 316856, 316948, 317040, 317132, 317224, 317316, 317408, 317500, 317592, 317684, 317776, 317868, 317960, 318053, 318145, 318237, 318329, 318421, 318513, 318605, 318697, 318789, 318881, 318973, 319066, 319158, 319250, 319342, 319434, 319526, 319618, 319710, 319802, 319894, 319987, 320079, 320171, 320263, 320355, 320447, 320539, 320631, 320723, 320816, 320908, 321000, 321092, 321184, 321276, 321368, 321460, 321553, 321645, 321737, 321829, 321921, 322013, 322105, 322197, 322290, 322382, 322474, 322566, 322658, 322750, 322842, 322935, 323027, 323119, 323211, 323303, 323395, 323487, 323580, 323672, 323764, 323856, 323948, 324040, 324132, 324225, 324317, 324409, 324501, 324593, 324685, 324777, 324870, 324962, 325054, 325146, 325238, 325330, 325423, 325515, 325607, 325699, 325791, 325883, 325976, 326068, 326160, 326252, 326344, 326436, 326529, 326621, 326713, 326805, 326897, 326990, 327082, 327174, 327266, 327358, 327450, 327543, 327635, 327727, 327819, 327911, 328004, 328096, 328188, 328280, 328372, 328465, 328557, 328649, 328741, 328833, 328926, 329018, 329110, 329202, 329294, 329387, 329479, 329571, 329663, 329755, 329848, 329940, 330032, 330124, 330217, 330309, 330401, 330493, 330585, 330678, 330770, 330862, 330954, 331046, 331139, 331231, 331323, 331415, 331508, 331600, 331692, 331784, 331877, 331969, 332061, 332153, 332245, 332338, 332430, 332522, 332614, 332707, 332799, 332891, 332983, 333076, 333168, 333260, 333352, 333445, 333537, 333629, 333721, 333814, 333906, 333998, 334090, 334183, 334275, 334367, 334459, 334552, 334644, 334736, 334828, 334921, 335013, 335105, 335198, 335290, 335382, 335474, 335567, 335659, 335751, 335843, 335936, 336028, 336120, 336213, 336305, 336397, 336489, 336582, 336674, 336766, 336859, 336951, 337043, 337135, 337228, 337320, 337412, 337505, 337597, 337689, 337781, 337874, 337966, 338058, 338151, 338243, 338335, 338428, 338520, 338612, 338704, 338797, 338889, 338981, 339074, 339166, 339258, 339351, 339443, 339535, 339628, 339720, 339812, 339905, 339997, 340089, 340181, 340274, 340366, 340458, 340551, 340643, 340735, 340828, 340920, 341012, 341105, 341197, 341289, 341382, 341474, 341566, 341659, 341751, 341843, 341936, 342028, 342120, 342213, 342305, 342397, 342490, 342582, 342674, 342767, 342859, 342952, 343044, 343136, 343229, 343321, 343413, 343506, 343598, 343690, 343783, 343875, 343967, 344060, 344152, 344245, 344337, 344429, 344522, 344614, 344706, 344799, 344891, 344983, 345076, 345168, 345261, 345353, 345445, 345538, 345630, 345722, 345815, 345907, 346000, 346092, 346184, 346277, 346369, 346462, 346554, 346646, 346739, 346831, 346923, 347016, 347108, 347201, 347293, 347385, 347478, 347570, 347663, 347755, 347847, 347940, 348032, 348125, 348217, 348309, 348402, 348494, 348587, 348679, 348772, 348864, 348956, 349049, 349141, 349234, 349326, 349418, 349511, 349603, 349696, 349788, 349881, 349973, 350065, 350158, 350250, 350343, 350435, 350528, 350620, 350712, 350805, 350897, 350990, 351082, 351175, 351267, 351359, 351452, 351544, 351637, 351729, 351822, 351914, 352007, 352099, 352191, 352284, 352376, 352469, 352561, 352654, 352746, 352839, 352931, 353023, 353116, 353208, 353301, 353393, 353486, 353578, 353671, 353763, 353856, 353948, 354041, 354133, 354226, 354318, 354410, 354503, 354595, 354688, 354780, 354873, 354965, 355058, 355150, 355243, 355335, 355428, 355520, 355613, 355705, 355798, 355890, 355983, 356075, 356168, 356260, 356353, 356445, 356538, 356630, 356723, 356815, 356908, 357000, 357093, 357185, 357278, 357370, 357463, 357555, 357648, 357740, 357833, 357925, 358018, 358110, 358203, 358295, 358388, 358480, 358573, 358665, 358758, 358850, 358943, 359035, 359128, 359220, 359313, 359405, 359498, 359590, 359683, 359775, 359868, 359960, 360053, 360146, 360238, 360331, 360423, 360516, 360608, 360701, 360793, 360886, 360978, 361071, 361163, 361256, 361349, 361441, 361534, 361626, 361719, 361811, 361904, 361996, 362089, 362181, 362274, 362367, 362459, 362552, 362644, 362737, 362829, 362922, 363015, 363107, 363200, 363292, 363385, 363477, 363570, 363662, 363755, 363848, 363940, 364033, 364125, 364218, 364310, 364403, 364496, 364588, 364681, 364773, 364866, 364959, 365051, 365144, 365236, 365329, 365421, 365514, 365607, 365699, 365792, 365884, 365977, 366070, 366162, 366255, 366347, 366440, 366533, 366625, 366718, 366810, 366903, 366996, 367088, 367181, 367273, 367366, 367459, 367551, 367644, 367736, 367829, 367922, 368014, 368107, 368200, 368292, 368385, 368477, 368570, 368663, 368755, 368848, 368940, 369033, 369126, 369218, 369311, 369404, 369496, 369589, 369682, 369774, 369867, 369959, 370052, 370145, 370237, 370330, 370423, 370515, 370608, 370701, 370793, 370886, 370978, 371071, 371164, 371256, 371349, 371442, 371534, 371627, 371720, 371812, 371905, 371998, 372090, 372183, 372276, 372368, 372461, 372554, 372646, 372739, 372832, 372924, 373017, 373110, 373202, 373295, 373388, 373480, 373573, 373666, 373758, 373851, 373944, 374036, 374129, 374222, 374314, 374407, 374500, 374592, 374685, 374778, 374871, 374963, 375056, 375149, 375241, 375334, 375427, 375519, 375612, 375705, 375797, 375890, 375983, 376076, 376168, 376261, 376354, 376446, 376539, 376632, 376724, 376817, 376910, 377003, 377095, 377188, 377281, 377373, 377466, 377559, 377652, 377744, 377837, 377930, 378022, 378115, 378208, 378301, 378393, 378486, 378579, 378672, 378764, 378857, 378950, 379042, 379135, 379228, 379321, 379413, 379506, 379599, 379692, 379784, 379877, 379970, 380063, 380155, 380248, 380341, 380434, 380526, 380619, 380712, 380805, 380897, 380990, 381083, 381176, 381268, 381361, 381454, 381547, 381639, 381732, 381825, 381918, 382010, 382103, 382196, 382289, 382381, 382474, 382567, 382660, 382753, 382845, 382938, 383031, 383124, 383216, 383309, 383402, 383495, 383587, 383680, 383773, 383866, 383959, 384051, 384144, 384237, 384330, 384423, 384515, 384608, 384701, 384794, 384886, 384979, 385072, 385165, 385258, 385350, 385443, 385536, 385629, 385722, 385814, 385907, 386000, 386093, 386186, 386279, 386371, 386464, 386557, 386650, 386743, 386835, 386928, 387021, 387114, 387207, 387299, 387392, 387485, 387578, 387671, 387764, 387856, 387949, 388042, 388135, 388228, 388321, 388413, 388506, 388599, 388692, 388785, 388878, 388970, 389063, 389156, 389249, 389342, 389435, 389527, 389620, 389713, 389806, 389899, 389992, 390084, 390177, 390270, 390363, 390456, 390549, 390642, 390734, 390827, 390920, 391013, 391106, 391199, 391292, 391384, 391477, 391570, 391663, 391756, 391849, 391942, 392035, 392127, 392220, 392313, 392406, 392499, 392592, 392685, 392777, 392870, 392963, 393056, 393149, 393242, 393335, 393428, 393521, 393613, 393706, 393799, 393892, 393985, 394078, 394171, 394264, 394357, 394449, 394542, 394635, 394728, 394821, 394914, 395007, 395100, 395193, 395286, 395378, 395471, 395564, 395657, 395750, 395843, 395936, 396029, 396122, 396215, 396308, 396400, 396493, 396586, 396679, 396772, 396865, 396958, 397051, 397144, 397237, 397330, 397423, 397516, 397608, 397701, 397794, 397887, 397980, 398073, 398166, 398259, 398352, 398445, 398538, 398631, 398724, 398817, 398910, 399002, 399095, 399188, 399281, 399374, 399467, 399560, 399653, 399746, 399839, 399932, 400025, 400118, 400211, 400304, 400397, 400490, 400583, 400676, 400769, 400862, 400954, 401047, 401140, 401233, 401326, 401419, 401512, 401605, 401698, 401791, 401884, 401977, 402070, 402163, 402256, 402349, 402442, 402535, 402628, 402721, 402814, 402907, 403000, 403093, 403186, 403279, 403372, 403465, 403558, 403651, 403744, 403837, 403930, 404023, 404116, 404209, 404302, 404395, 404488, 404581, 404674, 404767, 404860, 404953, 405046, 405139, 405232, 405325, 405418, 405511, 405604, 405697, 405790, 405883, 405976, 406069, 406162, 406255, 406348, 406441, 406534, 406627, 406720, 406813, 406906, 406999, 407092, 407185, 407278, 407371, 407464, 407557, 407650, 407743, 407836, 407930, 408023, 408116, 408209, 408302, 408395, 408488, 408581, 408674, 408767, 408860, 408953, 409046, 409139, 409232, 409325, 409418, 409511, 409604, 409697, 409790, 409884, 409977, 410070, 410163, 410256, 410349, 410442, 410535, 410628, 410721, 410814, 410907, 411000, 411093, 411186, 411280, 411373, 411466, 411559, 411652, 411745, 411838, 411931, 412024, 412117, 412210, 412303, 412396, 412490, 412583, 412676, 412769, 412862, 412955, 413048, 413141, 413234, 413327, 413420, 413514, 413607, 413700, 413793, 413886, 413979, 414072, 414165, 414258, 414351, 414445, 414538, 414631, 414724, 414817, 414910, 415003, 415096, 415189, 415283, 415376, 415469, 415562, 415655, 415748, 415841, 415934, 416027, 416121, 416214, 416307, 416400, 416493, 416586, 416679, 416773, 416866, 416959, 417052, 417145, 417238, 417331, 417424, 417518, 417611, 417704, 417797, 417890, 417983, 418076, 418170, 418263, 418356, 418449, 418542, 418635, 418728, 418822, 418915, 419008, 419101, 419194, 419287, 419381, 419474, 419567, 419660, 419753, 419846, 419940, 420033, 420126, 420219, 420312, 420405, 420499, 420592, 420685, 420778, 420871, 420964, 421058, 421151, 421244, 421337, 421430, 421523, 421617, 421710, 421803, 421896, 421989, 422083, 422176, 422269, 422362, 422455, 422549, 422642, 422735, 422828, 422921, 423014, 423108, 423201, 423294, 423387, 423480, 423574, 423667, 423760, 423853, 423947, 424040, 424133, 424226, 424319, 424413, 424506, 424599, 424692, 424785, 424879, 424972, 425065, 425158, 425251, 425345, 425438, 425531, 425624, 425718, 425811, 425904, 425997, 426091, 426184, 426277, 426370, 426463, 426557, 426650, 426743, 426836, 426930, 427023, 427116, 427209, 427303, 427396, 427489, 427582, 427676, 427769, 427862, 427955, 428049, 428142, 428235, 428328, 428422, 428515, 428608, 428701, 428795, 428888, 428981, 429074, 429168, 429261, 429354, 429447, 429541, 429634, 429727, 429820, 429914, 430007, 430100, 430194, 430287, 430380, 430473, 430567, 430660, 430753, 430847, 430940, 431033, 431126, 431220, 431313, 431406, 431499, 431593, 431686, 431779, 431873, 431966, 432059, 432153, 432246, 432339, 432432, 432526, 432619, 432712, 432806, 432899, 432992, 433086, 433179, 433272, 433365, 433459, 433552, 433645, 433739, 433832, 433925, 434019, 434112, 434205, 434299, 434392, 434485, 434578, 434672, 434765, 434858, 434952, 435045, 435138, 435232, 435325, 435418, 435512, 435605, 435698, 435792, 435885, 435978, 436072, 436165, 436258, 436352, 436445, 436538, 436632, 436725, 436818, 436912, 437005, 437098, 437192, 437285, 437379, 437472, 437565, 437659, 437752, 437845, 437939, 438032, 438125, 438219, 438312, 438405, 438499, 438592, 438685, 438779, 438872, 438966, 439059, 439152, 439246, 439339, 439432, 439526, 439619, 439713, 439806, 439899, 439993, 440086, 440179, 440273, 440366, 440460, 440553, 440646, 440740, 440833, 440926, 441020, 441113, 441207, 441300, 441393, 441487, 441580, 441674, 441767, 441860, 441954, 442047, 442141, 442234, 442327, 442421, 442514, 442608, 442701, 442794, 442888, 442981, 443075, 443168, 443261, 443355, 443448, 443542, 443635, 443729, 443822, 443915, 444009, 444102, 444196, 444289, 444382, 444476, 444569, 444663, 444756, 444850, 444943, 445036, 445130, 445223, 445317, 445410, 445504, 445597, 445690, 445784, 445877, 445971, 446064, 446158, 446251, 446345, 446438, 446531, 446625, 446718, 446812, 446905, 446999, 447092, 447186, 447279, 447372, 447466, 447559, 447653, 447746, 447840, 447933, 448027, 448120, 448214, 448307, 448401, 448494, 448587, 448681, 448774, 448868, 448961, 449055, 449148, 449242, 449335, 449429, 449522, 449616, 449709, 449803, 449896, 449990, 450083, 450177, 450270, 450364, 450457, 450551, 450644, 450737, 450831, 450924, 451018, 451111, 451205, 451298, 451392, 451485, 451579, 451672, 451766, 451859, 451953, 452046, 452140, 452233, 452327, 452420, 452514, 452607, 452701, 452795, 452888, 452982, 453075, 453169, 453262, 453356, 453449, 453543, 453636, 453730, 453823, 453917, 454010, 454104, 454197, 454291, 454384, 454478, 454571, 454665, 454758, 454852, 454946, 455039, 455133, 455226, 455320, 455413, 455507, 455600, 455694, 455787, 455881, 455974, 456068, 456162, 456255, 456349, 456442, 456536, 456629, 456723, 456816, 456910, 457004, 457097, 457191, 457284, 457378, 457471, 457565, 457658, 457752, 457846, 457939, 458033, 458126, 458220, 458313, 458407, 458501, 458594, 458688, 458781, 458875, 458968, 459062, 459156, 459249, 459343, 459436, 459530, 459624, 459717, 459811, 459904, 459998, 460091, 460185, 460279, 460372, 460466, 460559, 460653, 460747, 460840, 460934, 461027, 461121, 461215, 461308, 461402, 461495, 461589, 461683, 461776, 461870, 461963, 462057, 462151, 462244, 462338, 462431, 462525, 462619, 462712, 462806, 462900, 462993, 463087, 463180, 463274, 463368, 463461, 463555, 463649, 463742, 463836, 463929, 464023, 464117, 464210, 464304, 464398, 464491, 464585, 464678, 464772, 464866, 464959, 465053, 465147, 465240, 465334, 465428, 465521, 465615, 465709, 465802, 465896, 465990, 466083, 466177, 466270, 466364, 466458, 466551, 466645, 466739, 466832, 466926, 467020, 467113, 467207, 467301, 467394, 467488, 467582, 467675, 467769, 467863, 467956, 468050, 468144, 468237, 468331, 468425, 468518, 468612, 468706, 468800, 468893, 468987, 469081, 469174, 469268, 469362, 469455, 469549, 469643, 469736, 469830, 469924, 470017, 470111, 470205, 470299, 470392, 470486, 470580, 470673, 470767, 470861, 470954, 471048, 471142, 471236, 471329, 471423, 471517, 471610, 471704, 471798, 471892, 471985, 472079, 472173, 472266, 472360, 472454, 472548, 472641, 472735, 472829, 472922, 473016, 473110, 473204, 473297, 473391, 473485, 473579, 473672, 473766, 473860, 473953, 474047, 474141, 474235, 474328, 474422, 474516, 474610, 474703, 474797, 474891, 474985, 475078, 475172, 475266, 475360, 475453, 475547, 475641, 475735, 475828, 475922, 476016, 476110, 476203, 476297, 476391, 476485, 476578, 476672, 476766, 476860, 476954, 477047, 477141, 477235, 477329, 477422, 477516, 477610, 477704, 477797, 477891, 477985, 478079, 478173, 478266, 478360, 478454, 478548, 478641, 478735, 478829, 478923, 479017, 479110, 479204, 479298, 479392, 479486, 479579, 479673, 479767, 479861, 479955, 480048, 480142, 480236, 480330, 480424, 480517, 480611, 480705, 480799, 480893, 480986, 481080, 481174, 481268, 481362, 481455, 481549, 481643, 481737, 481831, 481925, 482018, 482112, 482206, 482300, 482394, 482488, 482581, 482675, 482769, 482863, 482957, 483050, 483144, 483238, 483332, 483426, 483520, 483613, 483707, 483801, 483895, 483989, 484083, 484177, 484270, 484364, 484458, 484552, 484646, 484740, 484833, 484927, 485021, 485115, 485209, 485303, 485397, 485490, 485584, 485678, 485772, 485866, 485960, 486054, 486147, 486241, 486335, 486429, 486523, 486617, 486711, 486805, 486898, 486992, 487086, 487180, 487274, 487368, 487462, 487556, 487649, 487743, 487837, 487931, 488025, 488119, 488213, 488307, 488401, 488494, 488588, 488682, 488776, 488870, 488964, 489058, 489152, 489246, 489339, 489433, 489527, 489621, 489715, 489809, 489903, 489997, 490091, 490185, 490278, 490372, 490466, 490560, 490654, 490748, 490842, 490936, 491030, 491124, 491218, 491312, 491405, 491499, 491593, 491687, 491781, 491875, 491969, 492063, 492157, 492251, 492345, 492439, 492533, 492627, 492720, 492814, 492908, 493002, 493096, 493190, 493284, 493378, 493472, 493566, 493660, 493754, 493848, 493942, 494036, 494130, 494224, 494317, 494411, 494505, 494599, 494693, 494787, 494881, 494975, 495069, 495163, 495257, 495351, 495445, 495539, 495633, 495727, 495821, 495915, 496009, 496103, 496197, 496291, 496385, 496479, 496573, 496667, 496761, 496855, 496948, 497042, 497136, 497230, 497324, 497418, 497512, 497606, 497700, 497794, 497888, 497982, 498076, 498170, 498264, 498358, 498452, 498546, 498640, 498734, 498828, 498922, 499016, 499110, 499204, 499298, 499392, 499486, 499580, 499674, 499768, 499862, 499956, 500050, 500144, 500238, 500332, 500426, 500520, 500614, 500708, 500802, 500896, 500990, 501085, 501179, 501273, 501367, 501461, 501555, 501649, 501743, 501837, 501931, 502025, 502119, 502213, 502307, 502401, 502495, 502589, 502683, 502777, 502871, 502965, 503059, 503153, 503247, 503341, 503435, 503529, 503623, 503718, 503812, 503906, 504000, 504094, 504188, 504282, 504376, 504470, 504564, 504658, 504752, 504846, 504940, 505034, 505128, 505222, 505317, 505411, 505505, 505599, 505693, 505787, 505881, 505975, 506069, 506163, 506257, 506351, 506445, 506539, 506634, 506728, 506822, 506916, 507010, 507104, 507198, 507292, 507386, 507480, 507574, 507669, 507763, 507857, 507951, 508045, 508139, 508233, 508327, 508421, 508515, 508610, 508704, 508798, 508892, 508986, 509080, 509174, 509268, 509362, 509456, 509551, 509645, 509739, 509833, 509927, 510021, 510115, 510209, 510304, 510398, 510492, 510586, 510680, 510774, 510868, 510962, 511056, 511151, 511245, 511339, 511433, 511527, 511621, 511715, 511810, 511904, 511998, 512092, 512186, 512280, 512374, 512469, 512563, 512657, 512751, 512845, 512939, 513033, 513128, 513222, 513316, 513410, 513504, 513598, 513692, 513787, 513881, 513975, 514069, 514163, 514257, 514352, 514446, 514540, 514634, 514728, 514822, 514917, 515011, 515105, 515199, 515293, 515387, 515482, 515576, 515670, 515764, 515858, 515953, 516047, 516141, 516235, 516329, 516423, 516518, 516612, 516706, 516800, 516894, 516989, 517083, 517177, 517271, 517365, 517460, 517554, 517648, 517742, 517836, 517930, 518025, 518119, 518213, 518307, 518402, 518496, 518590, 518684, 518778, 518873, 518967, 519061, 519155, 519249, 519344, 519438, 519532, 519626, 519720, 519815, 519909, 520003, 520097, 520192, 520286, 520380, 520474, 520569, 520663, 520757, 520851, 520945, 521040, 521134, 521228, 521322, 521417, 521511, 521605, 521699, 521794, 521888, 521982, 522076, 522171, 522265, 522359, 522453, 522548, 522642, 522736, 522830, 522925, 523019, 523113, 523207, 523302, 523396, 523490, 523584, 523679, 523773, 523867, 523961, 524056, 524150, 524244, 524338, 524433, 524527, 524621, 524716, 524810, 524904, 524998, 525093, 525187, 525281, 525375, 525470, 525564, 525658, 525753, 525847, 525941, 526035, 526130, 526224, 526318, 526413, 526507, 526601, 526695, 526790, 526884, 526978, 527073, 527167, 527261, 527356, 527450, 527544, 527638, 527733, 527827, 527921, 528016, 528110, 528204, 528299, 528393, 528487, 528582, 528676, 528770, 528864, 528959, 529053, 529147, 529242, 529336, 529430, 529525, 529619, 529713, 529808, 529902, 529996, 530091, 530185, 530279, 530374, 530468, 530562, 530657, 530751, 530845, 530940, 531034, 531128, 531223, 531317, 531411, 531506, 531600, 531694, 531789, 531883, 531977, 532072, 532166, 532261, 532355, 532449, 532544, 532638, 532732, 532827, 532921, 533015, 533110, 533204, 533298, 533393, 533487, 533582, 533676, 533770, 533865, 533959, 534053, 534148, 534242, 534337, 534431, 534525, 534620, 534714, 534808, 534903, 534997, 535092, 535186, 535280, 535375, 535469, 535563, 535658, 535752, 535847, 535941, 536035, 536130, 536224, 536319, 536413, 536507, 536602, 536696, 536791, 536885, 536979, 537074, 537168, 537263, 537357, 537451, 537546, 537640, 537735, 537829, 537923, 538018, 538112, 538207, 538301, 538396, 538490, 538584, 538679, 538773, 538868, 538962, 539056, 539151, 539245, 539340, 539434, 539529, 539623, 539717, 539812, 539906, 540001, 540095, 540190, 540284, 540379, 540473, 540567, 540662, 540756, 540851, 540945, 541040, 541134, 541229, 541323, 541417, 541512, 541606, 541701, 541795, 541890, 541984, 542079, 542173, 542267, 542362, 542456, 542551, 542645, 542740, 542834, 542929, 543023, 543118, 543212, 543307, 543401, 543496, 543590, 543684, 543779, 543873, 543968, 544062, 544157, 544251, 544346, 544440, 544535, 544629, 544724, 544818, 544913, 545007, 545102, 545196, 545291, 545385, 545480, 545574, 545669, 545763, 545858, 545952, 546047, 546141, 546236, 546330, 546425, 546519, 546614, 546708, 546803, 546897, 546992, 547086, 547181, 547275, 547370, 547464, 547559, 547653, 547748, 547842, 547937, 548031, 548126, 548220, 548315, 548409, 548504, 548598, 548693, 548787, 548882, 548977, 549071, 549166, 549260, 549355, 549449, 549544, 549638, 549733, 549827, 549922, 550016, 550111, 550206, 550300, 550395, 550489, 550584, 550678, 550773, 550867, 550962, 551056, 551151, 551246, 551340, 551435, 551529, 551624, 551718, 551813, 551907, 552002, 552097, 552191, 552286, 552380, 552475, 552569, 552664, 552759, 552853, 552948, 553042, 553137, 553231, 553326, 553421, 553515, 553610, 553704, 553799, 553893, 553988, 554083, 554177, 554272, 554366, 554461, 554555, 554650, 554745, 554839, 554934, 555028, 555123, 555218, 555312, 555407, 555501, 555596, 555691, 555785, 555880, 555974, 556069, 556164, 556258, 556353, 556447, 556542, 556637, 556731, 556826, 556921, 557015, 557110, 557204, 557299, 557394, 557488, 557583, 557677, 557772, 557867, 557961, 558056, 558151, 558245, 558340, 558434, 558529, 558624, 558718, 558813, 558908, 559002, 559097, 559192, 559286, 559381, 559475, 559570, 559665, 559759, 559854, 559949, 560043, 560138, 560233, 560327, 560422, 560517, 560611, 560706, 560800, 560895, 560990, 561084, 561179, 561274, 561368, 561463, 561558, 561652, 561747, 561842, 561936, 562031, 562126, 562220, 562315, 562410, 562504, 562599, 562694, 562788, 562883, 562978, 563072, 563167, 563262, 563357, 563451, 563546, 563641, 563735, 563830, 563925, 564019, 564114, 564209, 564303, 564398, 564493, 564587, 564682, 564777, 564872, 564966, 565061, 565156, 565250, 565345, 565440, 565534, 565629, 565724, 565819, 565913, 566008, 566103, 566197, 566292, 566387, 566482, 566576, 566671, 566766, 566860, 566955, 567050, 567145, 567239, 567334, 567429, 567523, 567618, 567713, 567808, 567902, 567997, 568092, 568187, 568281, 568376, 568471, 568566, 568660, 568755, 568850, 568944, 569039, 569134, 569229, 569323, 569418, 569513, 569608, 569702, 569797, 569892, 569987, 570081, 570176, 570271, 570366, 570460, 570555, 570650, 570745, 570839, 570934, 571029, 571124, 571219, 571313, 571408, 571503, 571598, 571692, 571787, 571882, 571977, 572071, 572166, 572261, 572356, 572451, 572545, 572640, 572735, 572830, 572924, 573019, 573114, 573209, 573304, 573398, 573493, 573588, 573683, 573778, 573872, 573967, 574062, 574157, 574251, 574346, 574441, 574536, 574631, 574725, 574820, 574915, 575010, 575105, 575200, 575294, 575389, 575484, 575579, 575674, 575768, 575863, 575958, 576053, 576148, 576242, 576337, 576432, 576527, 576622, 576717, 576811, 576906, 577001, 577096, 577191, 577285, 577380, 577475, 577570, 577665, 577760, 577854, 577949, 578044, 578139, 578234, 578329, 578424, 578518, 578613, 578708, 578803, 578898, 578993, 579087, 579182, 579277, 579372, 579467, 579562, 579657, 579751, 579846, 579941, 580036, 580131, 580226, 580321, 580415, 580510, 580605, 580700, 580795, 580890, 580985, 581079, 581174, 581269, 581364, 581459, 581554, 581649, 581744, 581838, 581933, 582028, 582123, 582218, 582313, 582408, 582503, 582597, 582692, 582787, 582882, 582977, 583072, 583167, 583262, 583357, 583451, 583546, 583641, 583736, 583831, 583926, 584021, 584116, 584211, 584306, 584400, 584495, 584590, 584685, 584780, 584875, 584970, 585065, 585160, 585255, 585350, 585444, 585539, 585634, 585729, 585824, 585919, 586014, 586109, 586204, 586299, 586394, 586489, 586584, 586678, 586773, 586868, 586963, 587058, 587153, 587248, 587343, 587438, 587533, 587628, 587723, 587818, 587913, 588008, 588102, 588197, 588292, 588387, 588482, 588577, 588672, 588767, 588862, 588957, 589052, 589147, 589242, 589337, 589432, 589527, 589622, 589717, 589812, 589907, 590002, 590096, 590191, 590286, 590381, 590476, 590571, 590666, 590761, 590856, 590951, 591046, 591141, 591236, 591331, 591426, 591521, 591616, 591711, 591806, 591901, 591996, 592091, 592186, 592281, 592376, 592471, 592566, 592661, 592756, 592851, 592946, 593041, 593136, 593231, 593326, 593421, 593516, 593611, 593706, 593801, 593896, 593991, 594086, 594181, 594276, 594371, 594466, 594561, 594656, 594751, 594846, 594941, 595036, 595131, 595226, 595321, 595416, 595511, 595606, 595701, 595796, 595891, 595986, 596081, 596176, 596271, 596366, 596461, 596556, 596651, 596746, 596841, 596937, 597032, 597127, 597222, 597317, 597412, 597507, 597602, 597697, 597792, 597887, 597982, 598077, 598172, 598267, 598362, 598457, 598552, 598647, 598742, 598837, 598932, 599028, 599123, 599218, 599313, 599408, 599503, 599598, 599693, 599788, 599883, 599978, 600073, 600168, 600263, 600358, 600454, 600549, 600644, 600739, 600834, 600929, 601024, 601119, 601214, 601309, 601404, 601499, 601594, 601690, 601785, 601880, 601975, 602070, 602165, 602260, 602355, 602450, 602545, 602640, 602736, 602831, 602926, 603021, 603116, 603211, 603306, 603401, 603496, 603592, 603687, 603782, 603877, 603972, 604067, 604162, 604257, 604352, 604448, 604543, 604638, 604733, 604828, 604923, 605018, 605113, 605208, 605304, 605399, 605494, 605589, 605684, 605779, 605874, 605969, 606065, 606160, 606255, 606350, 606445, 606540, 606635, 606731, 606826, 606921, 607016, 607111, 607206, 607301, 607397, 607492, 607587, 607682, 607777, 607872, 607967, 608063, 608158, 608253, 608348, 608443, 608538, 608634, 608729, 608824, 608919, 609014, 609109, 609205, 609300, 609395, 609490, 609585, 609680, 609776, 609871, 609966, 610061, 610156, 610251, 610347, 610442, 610537, 610632, 610727, 610823, 610918, 611013, 611108, 611203, 611298, 611394, 611489, 611584, 611679, 611774, 611870, 611965, 612060, 612155, 612250, 612346, 612441, 612536, 612631, 612726, 612822, 612917, 613012, 613107, 613202, 613298, 613393, 613488, 613583, 613678, 613774, 613869, 613964, 614059, 614155, 614250, 614345, 614440, 614535, 614631, 614726, 614821, 614916, 615012, 615107, 615202, 615297, 615392, 615488, 615583, 615678, 615773, 615869, 615964, 616059, 616154, 616250, 616345, 616440, 616535, 616631, 616726, 616821, 616916, 617012, 617107, 617202, 617297, 617393, 617488, 617583, 617678, 617774, 617869, 617964, 618059, 618155, 618250, 618345, 618440, 618536, 618631, 618726, 618821, 618917, 619012, 619107, 619203, 619298, 619393, 619488, 619584, 619679, 619774, 619869, 619965, 620060, 620155, 620251, 620346, 620441, 620536, 620632, 620727, 620822, 620918, 621013, 621108, 621203, 621299, 621394, 621489, 621585, 621680, 621775, 621871, 621966, 622061, 622156, 622252, 622347, 622442, 622538, 622633, 622728, 622824, 622919, 623014, 623110, 623205, 623300, 623395, 623491, 623586, 623681, 623777, 623872, 623967, 624063, 624158, 624253, 624349, 624444, 624539, 624635, 624730, 624825, 624921, 625016, 625111, 625207, 625302, 625397, 625493, 625588, 625683, 625779, 625874, 625969, 626065, 626160, 626255, 626351, 626446, 626541, 626637, 626732, 626828, 626923, 627018, 627114, 627209, 627304, 627400, 627495, 627590, 627686, 627781, 627876, 627972, 628067, 628163, 628258, 628353, 628449, 628544, 628639, 628735, 628830, 628926, 629021, 629116, 629212, 629307, 629402, 629498, 629593, 629689, 629784, 629879, 629975, 630070, 630165, 630261, 630356, 630452, 630547, 630642, 630738, 630833, 630929, 631024, 631119, 631215, 631310, 631406, 631501, 631596, 631692, 631787, 631883, 631978, 632073, 632169, 632264, 632360, 632455, 632551, 632646, 632741, 632837, 632932, 633028, 633123, 633218, 633314, 633409, 633505, 633600, 633696, 633791, 633886, 633982, 634077, 634173, 634268, 634364, 634459, 634554, 634650, 634745, 634841, 634936, 635032, 635127, 635222, 635318, 635413, 635509, 635604, 635700, 635795, 635891, 635986, 636081, 636177, 636272, 636368, 636463, 636559, 636654, 636750, 636845, 636941, 637036, 637131, 637227, 637322, 637418, 637513, 637609, 637704, 637800, 637895, 637991, 638086, 638182, 638277, 638373, 638468, 638564, 638659, 638754, 638850, 638945, 639041, 639136, 639232, 639327, 639423, 639518, 639614, 639709, 639805, 639900, 639996, 640091, 640187, 640282, 640378, 640473, 640569, 640664, 640760, 640855, 640951, 641046, 641142, 641237, 641333, 641428, 641524, 641619, 641715, 641810, 641906, 642001, 642097, 642192, 642288, 642383, 642479, 642574, 642670, 642765, 642861, 642957, 643052, 643148, 643243, 643339, 643434, 643530, 643625, 643721, 643816, 643912, 644007, 644103, 644198, 644294, 644389, 644485, 644581, 644676, 644772, 644867, 644963, 645058, 645154, 645249, 645345, 645440, 645536, 645632, 645727, 645823, 645918, 646014, 646109, 646205, 646300, 646396, 646492, 646587, 646683, 646778, 646874, 646969, 647065, 647161, 647256, 647352, 647447, 647543, 647638, 647734, 647830, 647925, 648021, 648116, 648212, 648307, 648403, 648499, 648594, 648690, 648785, 648881, 648976, 649072, 649168, 649263, 649359, 649454, 649550, 649646, 649741, 649837, 649932, 650028, 650124, 650219, 650315, 650410, 650506, 650602, 650697, 650793, 650888, 650984, 651080, 651175, 651271, 651366, 651462, 651558, 651653, 651749, 651845, 651940, 652036, 652131, 652227, 652323, 652418, 652514, 652610, 652705, 652801, 652896, 652992, 653088, 653183, 653279, 653375, 653470, 653566, 653661, 653757, 653853, 653948, 654044, 654140, 654235, 654331, 654427, 654522, 654618, 654714, 654809, 654905, 655000, 655096, 655192, 655287, 655383, 655479, 655574, 655670, 655766, 655861, 655957, 656053, 656148, 656244, 656340, 656435, 656531, 656627, 656722, 656818, 656914, 657009, 657105, 657201, 657296, 657392, 657488, 657583, 657679, 657775, 657870, 657966, 658062, 658157, 658253, 658349, 658445, 658540, 658636, 658732, 658827, 658923, 659019, 659114, 659210, 659306, 659401, 659497, 659593, 659689, 659784, 659880, 659976, 660071, 660167, 660263, 660358, 660454, 660550, 660646, 660741, 660837, 660933, 661028, 661124, 661220, 661316, 661411, 661507, 661603, 661698, 661794, 661890, 661986, 662081, 662177, 662273, 662369, 662464, 662560, 662656, 662751, 662847, 662943, 663039, 663134, 663230, 663326, 663422, 663517, 663613, 663709, 663805, 663900, 663996, 664092, 664188, 664283, 664379, 664475, 664571, 664666, 664762, 664858, 664954, 665049, 665145, 665241, 665337, 665432, 665528, 665624, 665720, 665815, 665911, 666007, 666103, 666198, 666294, 666390, 666486, 666582, 666677, 666773, 666869, 666965, 667060, 667156, 667252, 667348, 667444, 667539, 667635, 667731, 667827, 667923, 668018, 668114, 668210, 668306, 668401, 668497, 668593, 668689, 668785, 668880, 668976, 669072, 669168, 669264, 669359, 669455, 669551, 669647, 669743, 669838, 669934, 670030, 670126, 670222, 670317, 670413, 670509, 670605, 670701, 670797, 670892, 670988, 671084, 671180, 671276, 671371, 671467, 671563, 671659, 671755, 671851, 671946, 672042, 672138, 672234, 672330, 672426, 672521, 672617, 672713, 672809, 672905, 673001, 673096, 673192, 673288, 673384, 673480, 673576, 673672, 673767, 673863, 673959, 674055, 674151, 674247, 674343, 674438, 674534, 674630, 674726, 674822, 674918, 675014, 675109, 675205, 675301, 675397, 675493, 675589, 675685, 675780, 675876, 675972, 676068, 676164, 676260, 676356, 676452, 676547, 676643, 676739, 676835, 676931, 677027, 677123, 677219, 677315, 677410, 677506, 677602, 677698, 677794, 677890, 677986, 678082, 678178, 678273, 678369, 678465, 678561, 678657, 678753, 678849, 678945, 679041, 679137, 679232, 679328, 679424, 679520, 679616, 679712, 679808, 679904, 680000, 680096, 680192, 680287, 680383, 680479, 680575, 680671, 680767, 680863, 680959, 681055, 681151, 681247, 681343, 681439, 681535, 681630, 681726, 681822, 681918, 682014, 682110, 682206, 682302, 682398, 682494, 682590, 682686, 682782, 682878, 682974, 683070, 683165, 683261, 683357, 683453, 683549, 683645, 683741, 683837, 683933, 684029, 684125, 684221, 684317, 684413, 684509, 684605, 684701, 684797, 684893, 684989, 685085, 685181, 685277, 685373, 685469, 685565, 685660, 685756, 685852, 685948, 686044, 686140, 686236, 686332, 686428, 686524, 686620, 686716, 686812, 686908, 687004, 687100, 687196, 687292, 687388, 687484, 687580, 687676, 687772, 687868, 687964, 688060, 688156, 688252, 688348, 688444, 688540, 688636, 688732, 688828, 688924, 689020, 689116, 689212, 689308, 689404, 689500, 689596, 689692, 689788, 689884, 689980, 690076, 690172, 690268, 690364, 690460, 690557, 690653, 690749, 690845, 690941, 691037, 691133, 691229, 691325, 691421, 691517, 691613, 691709, 691805, 691901, 691997, 692093, 692189, 692285, 692381, 692477, 692573, 692669, 692765, 692861, 692957, 693054, 693150, 693246, 693342, 693438, 693534, 693630, 693726, 693822, 693918, 694014, 694110, 694206, 694302, 694398, 694494, 694591, 694687, 694783, 694879, 694975, 695071, 695167, 695263, 695359, 695455, 695551, 695647, 695743, 695840, 695936, 696032, 696128, 696224, 696320, 696416, 696512, 696608, 696704, 696800, 696896, 696993, 697089, 697185, 697281, 697377, 697473, 697569, 697665, 697761, 697857, 697954, 698050, 698146, 698242, 698338, 698434, 698530, 698626, 698722, 698819, 698915, 699011, 699107, 699203, 699299, 699395, 699491, 699588, 699684, 699780, 699876, 699972, 700068, 700164, 700260, 700357, 700453, 700549, 700645, 700741, 700837, 700933, 701029, 701126, 701222, 701318, 701414, 701510, 701606, 701702, 701799, 701895, 701991, 702087, 702183, 702279, 702375, 702472, 702568, 702664, 702760, 702856, 702952, 703049, 703145, 703241, 703337, 703433, 703529, 703626, 703722, 703818, 703914, 704010, 704106, 704203, 704299, 704395, 704491, 704587, 704683, 704780, 704876, 704972, 705068, 705164, 705260, 705357, 705453, 705549, 705645, 705741, 705838, 705934, 706030, 706126, 706222, 706319, 706415, 706511, 706607, 706703, 706800, 706896, 706992, 707088, 707184, 707281, 707377, 707473, 707569, 707665, 707762, 707858, 707954, 708050, 708146, 708243, 708339, 708435, 708531, 708627, 708724, 708820, 708916, 709012, 709109, 709205, 709301, 709397, 709493, 709590, 709686, 709782, 709878, 709975, 710071, 710167, 710263, 710360, 710456, 710552, 710648, 710745, 710841, 710937, 711033, 711129, 711226, 711322, 711418, 711514, 711611, 711707, 711803, 711899, 711996, 712092, 712188, 712284, 712381, 712477, 712573, 712670, 712766, 712862, 712958, 713055, 713151, 713247, 713343, 713440, 713536, 713632, 713728, 713825, 713921, 714017, 714114, 714210, 714306, 714402, 714499, 714595, 714691, 714787, 714884, 714980, 715076, 715173, 715269, 715365, 715461, 715558, 715654, 715750, 715847, 715943, 716039, 716136, 716232, 716328, 716424, 716521, 716617, 716713, 716810, 716906, 717002, 717099, 717195, 717291, 717387, 717484, 717580, 717676, 717773, 717869, 717965, 718062, 718158, 718254, 718351, 718447, 718543, 718640, 718736, 718832, 718929, 719025, 719121, 719218, 719314, 719410, 719507, 719603, 719699, 719796, 719892, 719988, 720085, 720181, 720277, 720374, 720470, 720566, 720663, 720759, 720855, 720952, 721048, 721144, 721241, 721337, 721433, 721530, 721626, 721722, 721819, 721915, 722012, 722108, 722204, 722301, 722397, 722493, 722590, 722686, 722782, 722879, 722975, 723072, 723168, 723264, 723361, 723457, 723553, 723650, 723746, 723843, 723939, 724035, 724132, 724228, 724324, 724421, 724517, 724614, 724710, 724806, 724903, 724999, 725096, 725192, 725288, 725385, 725481, 725578, 725674, 725770, 725867, 725963, 726060, 726156, 726252, 726349, 726445, 726542, 726638, 726734, 726831, 726927, 727024, 727120, 727216, 727313, 727409, 727506, 727602, 727699, 727795, 727891, 727988, 728084, 728181, 728277, 728373, 728470, 728566, 728663, 728759, 728856, 728952, 729049, 729145, 729241, 729338, 729434, 729531, 729627, 729724, 729820, 729916, 730013, 730109, 730206, 730302, 730399, 730495, 730592, 730688, 730784, 730881, 730977, 731074, 731170, 731267, 731363, 731460, 731556, 731653, 731749, 731846, 731942, 732038, 732135, 732231, 732328, 732424, 732521, 732617, 732714, 732810, 732907, 733003, 733100, 733196, 733293, 733389, 733486, 733582, 733678, 733775, 733871, 733968, 734064, 734161, 734257, 734354, 734450, 734547, 734643, 734740, 734836, 734933, 735029, 735126, 735222, 735319, 735415, 735512, 735608, 735705, 735801, 735898, 735994, 736091, 736187, 736284, 736380, 736477, 736573, 736670, 736766, 736863, 736959, 737056, 737153, 737249, 737346, 737442, 737539, 737635, 737732, 737828, 737925, 738021, 738118, 738214, 738311, 738407, 738504, 738600, 738697, 738794, 738890, 738987, 739083, 739180, 739276, 739373, 739469, 739566, 739662, 739759, 739855, 739952, 740049, 740145, 740242, 740338, 740435, 740531, 740628, 740724, 740821, 740918, 741014, 741111, 741207, 741304, 741400, 741497, 741594, 741690, 741787, 741883, 741980, 742076, 742173, 742269, 742366, 742463, 742559, 742656, 742752, 742849, 742946, 743042, 743139, 743235, 743332, 743428, 743525, 743622, 743718, 743815, 743911, 744008, 744105, 744201, 744298, 744394, 744491, 744588, 744684, 744781, 744877, 744974, 745071, 745167, 745264, 745360, 745457, 745554, 745650, 745747, 745843, 745940, 746037, 746133, 746230, 746326, 746423, 746520, 746616, 746713, 746810, 746906, 747003, 747099, 747196, 747293, 747389, 747486, 747583, 747679, 747776, 747872, 747969, 748066, 748162, 748259, 748356, 748452, 748549, 748646, 748742, 748839, 748936, 749032, 749129, 749225, 749322, 749419, 749515, 749612, 749709, 749805, 749902, 749999, 750095, 750192, 750289, 750385, 750482, 750579, 750675, 750772, 750869, 750965, 751062, 751159, 751255, 751352, 751449, 751545, 751642, 751739, 751835, 751932, 752029, 752125, 752222, 752319, 752415, 752512, 752609, 752705, 752802, 752899, 752995, 753092, 753189, 753286, 753382, 753479, 753576, 753672, 753769, 753866, 753962, 754059, 754156, 754252, 754349, 754446, 754543, 754639, 754736, 754833, 754929, 755026, 755123, 755220, 755316, 755413, 755510, 755606, 755703, 755800, 755897, 755993, 756090, 756187, 756283, 756380, 756477, 756574, 756670, 756767, 756864, 756960, 757057, 757154, 757251, 757347, 757444, 757541, 757638, 757734, 757831, 757928, 758025, 758121, 758218, 758315, 758412, 758508, 758605, 758702, 758799, 758895, 758992, 759089, 759186, 759282, 759379, 759476, 759573, 759669, 759766, 759863, 759960, 760056, 760153, 760250, 760347, 760443, 760540, 760637, 760734, 760830, 760927, 761024, 761121, 761218, 761314, 761411, 761508, 761605, 761701, 761798, 761895, 761992, 762089, 762185, 762282, 762379, 762476, 762572, 762669, 762766, 762863, 762960, 763056, 763153, 763250, 763347, 763444, 763540, 763637, 763734, 763831, 763928, 764024, 764121, 764218, 764315, 764412, 764508, 764605, 764702, 764799, 764896, 764993, 765089, 765186, 765283, 765380, 765477, 765573, 765670, 765767, 765864, 765961, 766058, 766154, 766251, 766348, 766445, 766542, 766638, 766735, 766832, 766929, 767026, 767123, 767219, 767316, 767413, 767510, 767607, 767704, 767801, 767897, 767994, 768091, 768188, 768285, 768382, 768478, 768575, 768672, 768769, 768866, 768963, 769060, 769156, 769253, 769350, 769447, 769544, 769641, 769738, 769834, 769931, 770028, 770125, 770222, 770319, 770416, 770513, 770609, 770706, 770803, 770900, 770997, 771094, 771191, 771288, 771384, 771481, 771578, 771675, 771772, 771869, 771966, 772063, 772160, 772256, 772353, 772450, 772547, 772644, 772741, 772838, 772935, 773032, 773128, 773225, 773322, 773419, 773516, 773613, 773710, 773807, 773904, 774001, 774098, 774194, 774291, 774388, 774485, 774582, 774679, 774776, 774873, 774970, 775067, 775164, 775261, 775357, 775454, 775551, 775648, 775745, 775842, 775939, 776036, 776133, 776230, 776327, 776424, 776521, 776618, 776714, 776811, 776908, 777005, 777102, 777199, 777296, 777393, 777490, 777587, 777684, 777781, 777878, 777975, 778072, 778169, 778266, 778363, 778460, 778556, 778653, 778750, 778847, 778944, 779041, 779138, 779235, 779332, 779429, 779526, 779623, 779720, 779817, 779914, 780011, 780108, 780205, 780302, 780399, 780496, 780593, 780690, 780787, 780884, 780981, 781078, 781175, 781272, 781369, 781466, 781563, 781660, 781757, 781854, 781951, 782048, 782145, 782242, 782339, 782436, 782533, 782630, 782727, 782824, 782921, 783018, 783115, 783212, 783309, 783406, 783503, 783600, 783697, 783794, 783891, 783988, 784085, 784182, 784279, 784376, 784473, 784570, 784667, 784764, 784861, 784958, 785055, 785152, 785249, 785346, 785443, 785540, 785637, 785734, 785831, 785928, 786025, 786122, 786219, 786316, 786413, 786510, 786607, 786705, 786802, 786899, 786996, 787093, 787190, 787287, 787384, 787481, 787578, 787675, 787772, 787869, 787966, 788063, 788160, 788257, 788354, 788451, 788549, 788646, 788743, 788840, 788937, 789034, 789131, 789228, 789325, 789422, 789519, 789616, 789713, 789810, 789908, 790005, 790102, 790199, 790296, 790393, 790490, 790587, 790684, 790781, 790878, 790975, 791073, 791170, 791267, 791364, 791461, 791558, 791655, 791752, 791849, 791946, 792043, 792141, 792238, 792335, 792432, 792529, 792626, 792723, 792820, 792917, 793015, 793112, 793209, 793306, 793403, 793500, 793597, 793694, 793791, 793889, 793986, 794083, 794180, 794277, 794374, 794471, 794568, 794666, 794763, 794860, 794957, 795054, 795151, 795248, 795345, 795443, 795540, 795637, 795734, 795831, 795928, 796025, 796123, 796220, 796317, 796414, 796511, 796608, 796705, 796803, 796900, 796997, 797094, 797191, 797288, 797386, 797483, 797580, 797677, 797774, 797871, 797968, 798066, 798163, 798260, 798357, 798454, 798551, 798649, 798746, 798843, 798940, 799037, 799134, 799232, 799329, 799426, 799523, 799620, 799718, 799815, 799912, 800009, 800106, 800203, 800301, 800398, 800495, 800592, 800689, 800787, 800884, 800981, 801078, 801175, 801273, 801370, 801467, 801564, 801661, 801759, 801856, 801953, 802050, 802147, 802245, 802342, 802439, 802536, 802633, 802731, 802828, 802925, 803022, 803120, 803217, 803314, 803411, 803508, 803606, 803703, 803800, 803897, 803995, 804092, 804189, 804286, 804383, 804481, 804578, 804675, 804772, 804870, 804967, 805064, 805161, 805259, 805356, 805453, 805550, 805648, 805745, 805842, 805939, 806037, 806134, 806231, 806328, 806426, 806523, 806620, 806717, 806815, 806912, 807009, 807106, 807204, 807301, 807398, 807495, 807593, 807690, 807787, 807884, 807982, 808079, 808176, 808273, 808371, 808468, 808565, 808663, 808760, 808857, 808954, 809052, 809149, 809246, 809344, 809441, 809538, 809635, 809733, 809830, 809927, 810025, 810122, 810219, 810316, 810414, 810511, 810608, 810706, 810803, 810900, 810997, 811095, 811192, 811289, 811387, 811484, 811581, 811679, 811776, 811873, 811971, 812068, 812165, 812262, 812360, 812457, 812554, 812652, 812749, 812846, 812944, 813041, 813138, 813236, 813333, 813430, 813528, 813625, 813722, 813820, 813917, 814014, 814112, 814209, 814306, 814404, 814501, 814598, 814696, 814793, 814890, 814988, 815085, 815182, 815280, 815377, 815474, 815572, 815669, 815766, 815864, 815961, 816059, 816156, 816253, 816351, 816448, 816545, 816643, 816740, 816837, 816935, 817032, 817129, 817227, 817324, 817422, 817519, 817616, 817714, 817811, 817908, 818006, 818103, 818201, 818298, 818395, 818493, 818590, 818687, 818785, 818882, 818980, 819077, 819174, 819272, 819369, 819467, 819564, 819661, 819759, 819856, 819953, 820051, 820148, 820246, 820343, 820440, 820538, 820635, 820733, 820830, 820927, 821025, 821122, 821220, 821317, 821415, 821512, 821609, 821707, 821804, 821902, 821999, 822096, 822194, 822291, 822389, 822486, 822584, 822681, 822778, 822876, 822973, 823071, 823168, 823266, 823363, 823460, 823558, 823655, 823753, 823850, 823948, 824045, 824142, 824240, 824337, 824435, 824532, 824630, 824727, 824825, 824922, 825019, 825117, 825214, 825312, 825409, 825507, 825604, 825702, 825799, 825897, 825994, 826091, 826189, 826286, 826384, 826481, 826579, 826676, 826774, 826871, 826969, 827066, 827164, 827261, 827358, 827456, 827553, 827651, 827748, 827846, 827943, 828041, 828138, 828236, 828333, 828431, 828528, 828626, 828723, 828821, 828918, 829016, 829113, 829211, 829308, 829406, 829503, 829601, 829698, 829796, 829893, 829991, 830088, 830186, 830283, 830381, 830478, 830576, 830673, 830771, 830868, 830966, 831063, 831161, 831258, 831356, 831453, 831551, 831648, 831746, 831843, 831941, 832038, 832136, 832233, 832331, 832429, 832526, 832624, 832721, 832819, 832916, 833014, 833111, 833209, 833306, 833404, 833501, 833599, 833696, 833794, 833892, 833989, 834087, 834184, 834282, 834379, 834477, 834574, 834672, 834769, 834867, 834965, 835062, 835160, 835257, 835355, 835452, 835550, 835647, 835745, 835843, 835940, 836038, 836135, 836233, 836330, 836428, 836526, 836623, 836721, 836818, 836916, 837013, 837111, 837209, 837306, 837404, 837501, 837599, 837696, 837794, 837892, 837989, 838087, 838184, 838282, 838380, 838477, 838575, 838672, 838770, 838868, 838965, 839063, 839160, 839258, 839356, 839453, 839551, 839648, 839746, 839844, 839941, 840039, 840136, 840234, 840332, 840429, 840527, 840624, 840722, 840820, 840917, 841015, 841113, 841210, 841308, 841405, 841503, 841601, 841698, 841796, 841893, 841991, 842089, 842186, 842284, 842382, 842479, 842577, 842675, 842772, 842870, 842967, 843065, 843163, 843260, 843358, 843456, 843553, 843651, 843749, 843846, 843944, 844042, 844139, 844237, 844334, 844432, 844530, 844627, 844725, 844823, 844920, 845018, 845116, 845213, 845311, 845409, 845506, 845604, 845702, 845799, 845897, 845995, 846092, 846190, 846288, 846385, 846483, 846581, 846678, 846776, 846874, 846971, 847069, 847167, 847265, 847362, 847460, 847558, 847655, 847753, 847851, 847948, 848046, 848144, 848241, 848339, 848437, 848535, 848632, 848730, 848828, 848925, 849023, 849121, 849218, 849316, 849414, 849512, 849609, 849707, 849805, 849902, 850000, 850098, 850196, 850293, 850391, 850489, 850586, 850684, 850782, 850880, 850977, 851075, 851173, 851270, 851368, 851466, 851564, 851661, 851759, 851857, 851955, 852052, 852150, 852248, 852346, 852443, 852541, 852639, 852736, 852834, 852932, 853030, 853127, 853225, 853323, 853421, 853518, 853616, 853714, 853812, 853909, 854007, 854105, 854203, 854300, 854398, 854496, 854594, 854692, 854789, 854887, 854985, 855083, 855180, 855278, 855376, 855474, 855571, 855669, 855767, 855865, 855963, 856060, 856158, 856256, 856354, 856451, 856549, 856647, 856745, 856843, 856940, 857038, 857136, 857234, 857331, 857429, 857527, 857625, 857723, 857820, 857918, 858016, 858114, 858212, 858309, 858407, 858505, 858603, 858701, 858798, 858896, 858994, 859092, 859190, 859287, 859385, 859483, 859581, 859679, 859777, 859874, 859972, 860070, 860168, 860266, 860363, 860461, 860559, 860657, 860755, 860853, 860950, 861048, 861146, 861244, 861342, 861440, 861537, 861635, 861733, 861831, 861929, 862027, 862124, 862222, 862320, 862418, 862516, 862614, 862712, 862809, 862907, 863005, 863103, 863201, 863299, 863396, 863494, 863592, 863690, 863788, 863886, 863984, 864081, 864179, 864277, 864375, 864473, 864571, 864669, 864767, 864864, 864962, 865060, 865158, 865256, 865354, 865452, 865550, 865647, 865745, 865843, 865941, 866039, 866137, 866235, 866333, 866430, 866528, 866626, 866724, 866822, 866920, 867018, 867116, 867214, 867311, 867409, 867507, 867605, 867703, 867801, 867899, 867997, 868095, 868193, 868291, 868388, 868486, 868584, 868682, 868780, 868878, 868976, 869074, 869172, 869270, 869368, 869465, 869563, 869661, 869759, 869857, 869955, 870053, 870151, 870249, 870347, 870445, 870543, 870641, 870738, 870836, 870934, 871032, 871130, 871228, 871326, 871424, 871522, 871620, 871718, 871816, 871914, 872012, 872110, 872208, 872306, 872403, 872501, 872599, 872697, 872795, 872893, 872991, 873089, 873187, 873285, 873383, 873481, 873579, 873677, 873775, 873873, 873971, 874069, 874167, 874265, 874363, 874461, 874559, 874657, 874755, 874853, 874951, 875049, 875146, 875244, 875342, 875440, 875538, 875636, 875734, 875832, 875930, 876028, 876126, 876224, 876322, 876420, 876518, 876616, 876714, 876812, 876910, 877008, 877106, 877204, 877302, 877400, 877498, 877596, 877694, 877792, 877890, 877988, 878086, 878184, 878282, 878380, 878478, 878576, 878674, 878772, 878870, 878968, 879066, 879164, 879263, 879361, 879459, 879557, 879655, 879753, 879851, 879949, 880047, 880145, 880243, 880341, 880439, 880537, 880635, 880733, 880831, 880929, 881027, 881125, 881223, 881321, 881419, 881517, 881615, 881713, 881811, 881910, 882008, 882106, 882204, 882302, 882400, 882498, 882596, 882694, 882792, 882890, 882988, 883086, 883184, 883282, 883380, 883478, 883577, 883675, 883773, 883871, 883969, 884067, 884165, 884263, 884361, 884459, 884557, 884655, 884753, 884851, 884950, 885048, 885146, 885244, 885342, 885440, 885538, 885636, 885734, 885832, 885930, 886029, 886127, 886225, 886323, 886421, 886519, 886617, 886715, 886813, 886911, 887010, 887108, 887206, 887304, 887402, 887500, 887598, 887696, 887794, 887893, 887991, 888089, 888187, 888285, 888383, 888481, 888579, 888677, 888776, 888874, 888972, 889070, 889168, 889266, 889364, 889462, 889561, 889659, 889757, 889855, 889953, 890051, 890149, 890248, 890346, 890444, 890542, 890640, 890738, 890836, 890935, 891033, 891131, 891229, 891327, 891425, 891523, 891622, 891720, 891818, 891916, 892014, 892112, 892211, 892309, 892407, 892505, 892603, 892701, 892799, 892898, 892996, 893094, 893192, 893290, 893389, 893487, 893585, 893683, 893781, 893879, 893978, 894076, 894174, 894272, 894370, 894468, 894567, 894665, 894763, 894861, 894959, 895058, 895156, 895254, 895352, 895450, 895549, 895647, 895745, 895843, 895941, 896040, 896138, 896236, 896334, 896432, 896531, 896629, 896727, 896825, 896923, 897022, 897120, 897218, 897316, 897414, 897513, 897611, 897709, 897807, 897906, 898004, 898102, 898200, 898298, 898397, 898495, 898593, 898691, 898790, 898888, 898986, 899084, 899182, 899281, 899379, 899477, 899575, 899674, 899772, 899870, 899968, 900067, 900165, 900263, 900361, 900460, 900558, 900656, 900754, 900853, 900951, 901049, 901147, 901246, 901344, 901442, 901540, 901639, 901737, 901835, 901933, 902032, 902130, 902228, 902326, 902425, 902523, 902621, 902720, 902818, 902916, 903014, 903113, 903211, 903309, 903407, 903506, 903604, 903702, 903801, 903899, 903997, 904095, 904194, 904292, 904390, 904489, 904587, 904685, 904783, 904882, 904980, 905078, 905177, 905275, 905373, 905471, 905570, 905668, 905766, 905865, 905963, 906061, 906160, 906258, 906356, 906455, 906553, 906651, 906749, 906848, 906946, 907044, 907143, 907241, 907339, 907438, 907536, 907634, 907733, 907831, 907929, 908028, 908126, 908224, 908323, 908421, 908519, 908618, 908716, 908814, 908913, 909011, 909109, 909208, 909306, 909404, 909503, 909601, 909699, 909798, 909896, 909994, 910093, 910191, 910289, 910388, 910486, 910584, 910683, 910781, 910880, 910978, 911076, 911175, 911273, 911371, 911470, 911568, 911666, 911765, 911863, 911962, 912060, 912158, 912257, 912355, 912453, 912552, 912650, 912749, 912847, 912945, 913044, 913142, 913240, 913339, 913437, 913536, 913634, 913732, 913831, 913929, 914028, 914126, 914224, 914323, 914421, 914519, 914618, 914716, 914815, 914913, 915011, 915110, 915208, 915307, 915405, 915503, 915602, 915700, 915799, 915897, 915996, 916094, 916192, 916291, 916389, 916488, 916586, 916684, 916783, 916881, 916980, 917078, 917177, 917275, 917373, 917472, 917570, 917669, 917767, 917866, 917964, 918062, 918161, 918259, 918358, 918456, 918555, 918653, 918751, 918850, 918948, 919047, 919145, 919244, 919342, 919441, 919539, 919637, 919736, 919834, 919933, 920031, 920130, 920228, 920327, 920425, 920524, 920622, 920720, 920819, 920917, 921016, 921114, 921213, 921311, 921410, 921508, 921607, 921705, 921804, 921902, 922001, 922099, 922197, 922296, 922394, 922493, 922591, 922690, 922788, 922887, 922985, 923084, 923182, 923281, 923379, 923478, 923576, 923675, 923773, 923872, 923970, 924069, 924167, 924266, 924364, 924463, 924561, 924660, 924758, 924857, 924955, 925054, 925152, 925251, 925349, 925448, 925546, 925645, 925743, 925842, 925940, 926039, 926137, 926236, 926334, 926433, 926531, 926630, 926728, 926827, 926926, 927024, 927123, 927221, 927320, 927418, 927517, 927615, 927714, 927812, 927911, 928009, 928108, 928206, 928305, 928404, 928502, 928601, 928699, 928798, 928896, 928995, 929093, 929192, 929290, 929389, 929488, 929586, 929685, 929783, 929882, 929980, 930079, 930177, 930276, 930375, 930473, 930572, 930670, 930769, 930867, 930966, 931065, 931163, 931262, 931360, 931459, 931557, 931656, 931755, 931853, 931952, 932050, 932149, 932247, 932346, 932445, 932543, 932642, 932740, 932839, 932938, 933036, 933135, 933233, 933332, 933431, 933529, 933628, 933726, 933825, 933924, 934022, 934121, 934219, 934318, 934417, 934515, 934614, 934712, 934811, 934910, 935008, 935107, 935205, 935304, 935403, 935501, 935600, 935699, 935797, 935896, 935994, 936093, 936192, 936290, 936389, 936488, 936586, 936685, 936783, 936882, 936981, 937079, 937178, 937277, 937375, 937474, 937572, 937671, 937770, 937868, 937967, 938066, 938164, 938263, 938362, 938460, 938559, 938658, 938756, 938855, 938954, 939052, 939151, 939250, 939348, 939447, 939545, 939644, 939743, 939841, 939940, 940039, 940137, 940236, 940335, 940433, 940532, 940631, 940729, 940828, 940927, 941025, 941124, 941223, 941322, 941420, 941519, 941618, 941716, 941815, 941914, 942012, 942111, 942210, 942308, 942407, 942506, 942604, 942703, 942802, 942901, 942999, 943098, 943197, 943295, 943394, 943493, 943591, 943690, 943789, 943888, 943986, 944085, 944184, 944282, 944381, 944480, 944578, 944677, 944776, 944875, 944973, 945072, 945171, 945270, 945368, 945467, 945566, 945664, 945763, 945862, 945961, 946059, 946158, 946257, 946356, 946454, 946553, 946652, 946750, 946849, 946948, 947047, 947145, 947244, 947343, 947442, 947540, 947639, 947738, 947837, 947935, 948034, 948133, 948232, 948330, 948429, 948528, 948627, 948725, 948824, 948923, 949022, 949120, 949219, 949318, 949417, 949515, 949614, 949713, 949812, 949911, 950009, 950108, 950207, 950306, 950404, 950503, 950602, 950701, 950800, 950898, 950997, 951096, 951195, 951293, 951392, 951491, 951590, 951689, 951787, 951886, 951985, 952084, 952183, 952281, 952380, 952479, 952578, 952676, 952775, 952874, 952973, 953072, 953171, 953269, 953368, 953467, 953566, 953665, 953763, 953862, 953961, 954060, 954159, 954257, 954356, 954455, 954554, 954653, 954752, 954850, 954949, 955048, 955147, 955246, 955344, 955443, 955542, 955641, 955740, 955839, 955937, 956036, 956135, 956234, 956333, 956432, 956530, 956629, 956728, 956827, 956926, 957025, 957124, 957222, 957321, 957420, 957519, 957618, 957717, 957815, 957914, 958013, 958112, 958211, 958310, 958409, 958507, 958606, 958705, 958804, 958903, 959002, 959101, 959199, 959298, 959397, 959496, 959595, 959694, 959793, 959892, 959990, 960089, 960188, 960287, 960386, 960485, 960584, 960683, 960782, 960880, 960979, 961078, 961177, 961276, 961375, 961474, 961573, 961672, 961770, 961869, 961968, 962067, 962166, 962265, 962364, 962463, 962562, 962661, 962759, 962858, 962957, 963056, 963155, 963254, 963353, 963452, 963551, 963650, 963749, 963847, 963946, 964045, 964144, 964243, 964342, 964441, 964540, 964639, 964738, 964837, 964936, 965035, 965133, 965232, 965331, 965430, 965529, 965628, 965727, 965826, 965925, 966024, 966123, 966222, 966321, 966420, 966519, 966618, 966716, 966815, 966914, 967013, 967112, 967211, 967310, 967409, 967508, 967607, 967706, 967805, 967904, 968003, 968102, 968201, 968300, 968399, 968498, 968597, 968696, 968795, 968894, 968993, 969092, 969190, 969289, 969388, 969487, 969586, 969685, 969784, 969883, 969982, 970081, 970180, 970279, 970378, 970477, 970576, 970675, 970774, 970873, 970972, 971071, 971170, 971269, 971368, 971467, 971566, 971665, 971764, 971863, 971962, 972061, 972160, 972259, 972358, 972457, 972556, 972655, 972754, 972853, 972952, 973051, 973150, 973249, 973348, 973447, 973546, 973645, 973744, 973843, 973942, 974041, 974140, 974240, 974339, 974438, 974537, 974636, 974735, 974834, 974933, 975032, 975131, 975230, 975329, 975428, 975527, 975626, 975725, 975824, 975923, 976022, 976121, 976220, 976319, 976418, 976517, 976616, 976716, 976815, 976914, 977013, 977112, 977211, 977310, 977409, 977508, 977607, 977706, 977805, 977904, 978003, 978102, 978201, 978300, 978400, 978499, 978598, 978697, 978796, 978895, 978994, 979093, 979192, 979291, 979390, 979489, 979588, 979688, 979787, 979886, 979985, 980084, 980183, 980282, 980381, 980480, 980579, 980678, 980778, 980877, 980976, 981075, 981174, 981273, 981372, 981471, 981570, 981669, 981769, 981868, 981967, 982066, 982165, 982264, 982363, 982462, 982561, 982661, 982760, 982859, 982958, 983057, 983156, 983255, 983354, 983454, 983553, 983652, 983751, 983850, 983949, 984048, 984147, 984247, 984346, 984445, 984544, 984643, 984742, 984841, 984941, 985040, 985139, 985238, 985337, 985436, 985535, 985635, 985734, 985833, 985932, 986031, 986130, 986229, 986329, 986428, 986527, 986626, 986725, 986824, 986924, 987023, 987122, 987221, 987320, 987419, 987519, 987618, 987717, 987816, 987915, 988014, 988114, 988213, 988312, 988411, 988510, 988609, 988709, 988808, 988907, 989006, 989105, 989205, 989304, 989403, 989502, 989601, 989700, 989800, 989899, 989998, 990097, 990196, 990296, 990395, 990494, 990593, 990692, 990792, 990891, 990990, 991089, 991188, 991288, 991387, 991486, 991585, 991684, 991784, 991883, 991982, 992081, 992181, 992280, 992379, 992478, 992577, 992677, 992776, 992875, 992974, 993074, 993173, 993272, 993371, 993470, 993570, 993669, 993768, 993867, 993967, 994066, 994165, 994264, 994364, 994463, 994562, 994661, 994761, 994860, 994959, 995058, 995158, 995257, 995356, 995455, 995555, 995654, 995753, 995852, 995952, 996051, 996150, 996249, 996349, 996448, 996547, 996646, 996746, 996845, 996944, 997043, 997143, 997242, 997341, 997441, 997540, 997639, 997738, 997838, 997937, 998036, 998135, 998235, 998334, 998433, 998533, 998632, 998731, 998830, 998930, 999029, 999128, 999228, 999327, 999426, 999525, 999625, 999724, 999823, 999923, 1000022, 1000121, 1000221, 1000320, 1000419, 1000518, 1000618, 1000717, 1000816, 1000916, 1001015, 1001114, 1001214, 1001313, 1001412, 1001512, 1001611, 1001710, 1001810, 1001909, 1002008, 1002107, 1002207, 1002306, 1002405, 1002505, 1002604, 1002703, 1002803, 1002902, 1003001, 1003101, 1003200, 1003299, 1003399, 1003498, 1003597, 1003697, 1003796, 1003895, 1003995, 1004094, 1004193, 1004293, 1004392, 1004491, 1004591, 1004690, 1004790, 1004889, 1004988, 1005088, 1005187, 1005286, 1005386, 1005485, 1005584, 1005684, 1005783, 1005882, 1005982, 1006081, 1006181, 1006280, 1006379, 1006479, 1006578, 1006677, 1006777, 1006876, 1006976, 1007075, 1007174, 1007274, 1007373, 1007472, 1007572, 1007671, 1007771, 1007870, 1007969, 1008069, 1008168, 1008267, 1008367, 1008466, 1008566, 1008665, 1008764, 1008864, 1008963, 1009063, 1009162, 1009261, 1009361, 1009460, 1009560, 1009659, 1009758, 1009858, 1009957, 1010057, 1010156, 1010255, 1010355, 1010454, 1010554, 1010653, 1010752, 1010852, 1010951, 1011051, 1011150, 1011250, 1011349, 1011448, 1011548, 1011647, 1011747, 1011846, 1011945, 1012045, 1012144, 1012244, 1012343, 1012443, 1012542, 1012641, 1012741, 1012840, 1012940, 1013039, 1013139, 1013238, 1013338, 1013437, 1013536, 1013636, 1013735, 1013835, 1013934, 1014034, 1014133, 1014233, 1014332, 1014431, 1014531, 1014630, 1014730, 1014829, 1014929, 1015028, 1015128, 1015227, 1015327, 1015426, 1015525, 1015625, 1015724, 1015824, 1015923, 1016023, 1016122, 1016222, 1016321, 1016421, 1016520, 1016620, 1016719, 1016819, 1016918, 1017018, 1017117, 1017217, 1017316, 1017415, 1017515, 1017614, 1017714, 1017813, 1017913, 1018012, 1018112, 1018211, 1018311, 1018410, 1018510, 1018609, 1018709, 1018808, 1018908, 1019007, 1019107, 1019206, 1019306, 1019405, 1019505, 1019604, 1019704, 1019803, 1019903, 1020002, 1020102, 1020201, 1020301, 1020400, 1020500, 1020599, 1020699, 1020799, 1020898, 1020998, 1021097, 1021197, 1021296, 1021396, 1021495, 1021595, 1021694, 1021794, 1021893, 1021993, 1022092, 1022192, 1022291, 1022391, 1022491, 1022590, 1022690, 1022789, 1022889, 1022988, 1023088, 1023187, 1023287, 1023386, 1023486, 1023585, 1023685, 1023785, 1023884, 1023984, 1024083, 1024183, 1024282, 1024382, 1024481, 1024581, 1024681, 1024780, 1024880, 1024979, 1025079, 1025178, 1025278, 1025378, 1025477, 1025577, 1025676, 1025776, 1025875, 1025975, 1026075, 1026174, 1026274, 1026373, 1026473, 1026572, 1026672, 1026772, 1026871, 1026971, 1027070, 1027170, 1027270, 1027369, 1027469, 1027568, 1027668, 1027767, 1027867, 1027967, 1028066, 1028166, 1028265, 1028365, 1028465, 1028564, 1028664, 1028763, 1028863, 1028963, 1029062, 1029162, 1029261, 1029361, 1029461, 1029560, 1029660, 1029760, 1029859, 1029959, 1030058, 1030158, 1030258, 1030357, 1030457, 1030556, 1030656, 1030756, 1030855, 1030955, 1031055, 1031154, 1031254, 1031354, 1031453, 1031553, 1031652, 1031752, 1031852, 1031951, 1032051, 1032151, 1032250, 1032350, 1032450, 1032549, 1032649, 1032748, 1032848, 1032948, 1033047, 1033147, 1033247, 1033346, 1033446, 1033546, 1033645, 1033745, 1033845, 1033944, 1034044, 1034144, 1034243, 1034343, 1034443, 1034542, 1034642, 1034742, 1034841, 1034941, 1035041, 1035140, 1035240, 1035340, 1035439, 1035539, 1035639, 1035738, 1035838, 1035938, 1036037, 1036137, 1036237, 1036336, 1036436, 1036536, 1036635, 1036735, 1036835, 1036934, 1037034, 1037134, 1037234, 1037333, 1037433, 1037533, 1037632, 1037732, 1037832, 1037931, 1038031, 1038131, 1038231, 1038330, 1038430, 1038530, 1038629, 1038729, 1038829, 1038929, 1039028, 1039128, 1039228, 1039327, 1039427, 1039527, 1039627, 1039726, 1039826, 1039926, 1040025, 1040125, 1040225, 1040325, 1040424, 1040524, 1040624, 1040723, 1040823, 1040923, 1041023, 1041122, 1041222, 1041322, 1041422, 1041521, 1041621, 1041721, 1041821, 1041920, 1042020, 1042120, 1042220, 1042319, 1042419, 1042519, 1042619, 1042718, 1042818, 1042918, 1043018, 1043117, 1043217, 1043317, 1043417, 1043516, 1043616, 1043716, 1043816, 1043915, 1044015, 1044115, 1044215, 1044314, 1044414, 1044514, 1044614, 1044714, 1044813, 1044913, 1045013, 1045113, 1045212, 1045312, 1045412, 1045512, 1045612, 1045711, 1045811, 1045911, 1046011, 1046110, 1046210, 1046310, 1046410, 1046510, 1046609, 1046709, 1046809, 1046909, 1047009, 1047108, 1047208, 1047308, 1047408, 1047508, 1047607, 1047707, 1047807, 1047907, 1048007, 1048106, 1048206, 1048306, 1048406, 1048506, 1048605, 1048705, 1048805, 1048905, 1049005, 1049105, 1049204, 1049304, 1049404, 1049504, 1049604, 1049703, 1049803, 1049903, 1050003, 1050103, 1050203, 1050302, 1050402, 1050502, 1050602, 1050702, 1050802, 1050901, 1051001, 1051101, 1051201, 1051301, 1051401, 1051500, 1051600, 1051700, 1051800, 1051900, 1052000, 1052100, 1052199, 1052299, 1052399, 1052499, 1052599, 1052699, 1052799, 1052898, 1052998, 1053098, 1053198, 1053298, 1053398, 1053498, 1053597, 1053697, 1053797, 1053897, 1053997, 1054097, 1054197, 1054297, 1054396, 1054496, 1054596, 1054696, 1054796, 1054896, 1054996, 1055096, 1055195, 1055295, 1055395, 1055495, 1055595, 1055695, 1055795, 1055895, 1055995, 1056094, 1056194, 1056294, 1056394, 1056494, 1056594, 1056694, 1056794, 1056894, 1056994, 1057093, 1057193, 1057293, 1057393, 1057493, 1057593, 1057693, 1057793, 1057893, 1057993, 1058093, 1058192, 1058292, 1058392, 1058492, 1058592, 1058692, 1058792, 1058892, 1058992, 1059092, 1059192, 1059292, 1059391, 1059491, 1059591, 1059691, 1059791, 1059891, 1059991, 1060091, 1060191, 1060291, 1060391, 1060491, 1060591, 1060691, 1060791, 1060891, 1060990, 1061090, 1061190, 1061290, 1061390, 1061490, 1061590, 1061690, 1061790, 1061890, 1061990, 1062090, 1062190, 1062290, 1062390, 1062490, 1062590, 1062690, 1062790, 1062890, 1062990, 1063090, 1063189, 1063289, 1063389, 1063489, 1063589, 1063689, 1063789, 1063889, 1063989, 1064089, 1064189, 1064289, 1064389, 1064489, 1064589, 1064689, 1064789, 1064889, 1064989, 1065089, 1065189, 1065289, 1065389, 1065489, 1065589, 1065689, 1065789, 1065889, 1065989, 1066089, 1066189, 1066289, 1066389, 1066489, 1066589, 1066689, 1066789, 1066889, 1066989, 1067089, 1067189, 1067289, 1067389, 1067489, 1067589, 1067689, 1067789, 1067889, 1067989, 1068089, 1068189, 1068289, 1068389, 1068489, 1068589, 1068689, 1068789, 1068889, 1068989, 1069089, 1069189, 1069289, 1069390, 1069490, 1069590, 1069690, 1069790, 1069890, 1069990, 1070090, 1070190, 1070290, 1070390, 1070490, 1070590, 1070690, 1070790, 1070890, 1070990, 1071090, 1071190, 1071290, 1071390, 1071490, 1071591, 1071691, 1071791, 1071891, 1071991, 1072091, 1072191, 1072291, 1072391, 1072491, 1072591, 1072691, 1072791, 1072891, 1072991, 1073091, 1073192, 1073292, 1073392, 1073492, 1073592, 1073692, 1073792, 1073892, 1073992, 1074092, 1074192, 1074292, 1074393, 1074493, 1074593, 1074693, 1074793, 1074893, 1074993, 1075093, 1075193, 1075293, 1075393, 1075494, 1075594, 1075694, 1075794, 1075894, 1075994, 1076094, 1076194, 1076294, 1076394, 1076495, 1076595, 1076695, 1076795, 1076895, 1076995, 1077095, 1077195, 1077295, 1077396, 1077496, 1077596, 1077696, 1077796, 1077896, 1077996, 1078096, 1078197, 1078297, 1078397, 1078497, 1078597, 1078697, 1078797, 1078897, 1078998, 1079098, 1079198, 1079298, 1079398, 1079498, 1079598, 1079699, 1079799, 1079899, 1079999, 1080099, 1080199, 1080299, 1080400, 1080500, 1080600, 1080700, 1080800, 1080900, 1081001, 1081101, 1081201, 1081301, 1081401, 1081501, 1081601, 1081702, 1081802, 1081902, 1082002, 1082102, 1082202, 1082303, 1082403, 1082503, 1082603, 1082703, 1082803, 1082904, 1083004, 1083104, 1083204, 1083304, 1083405, 1083505, 1083605, 1083705, 1083805, 1083905, 1084006, 1084106, 1084206, 1084306, 1084406, 1084507, 1084607, 1084707, 1084807, 1084907, 1085008, 1085108, 1085208, 1085308, 1085408, 1085509, 1085609, 1085709, 1085809, 1085909, 1086010, 1086110, 1086210, 1086310, 1086410, 1086511, 1086611, 1086711, 1086811, 1086912, 1087012, 1087112, 1087212, 1087312, 1087413, 1087513, 1087613, 1087713, 1087814, 1087914, 1088014, 1088114, 1088214, 1088315, 1088415, 1088515, 1088615, 1088716, 1088816, 1088916, 1089016, 1089117, 1089217, 1089317, 1089417, 1089518, 1089618, 1089718, 1089818, 1089919, 1090019, 1090119, 1090219, 1090320, 1090420, 1090520, 1090620, 1090721, 1090821, 1090921, 1091021, 1091122, 1091222, 1091322, 1091422, 1091523, 1091623, 1091723, 1091824, 1091924, 1092024, 1092124, 1092225, 1092325, 1092425, 1092525, 1092626, 1092726, 1092826, 1092927, 1093027, 1093127, 1093227, 1093328, 1093428, 1093528, 1093629, 1093729, 1093829, 1093929, 1094030, 1094130, 1094230, 1094331, 1094431, 1094531, 1094632, 1094732, 1094832, 1094932, 1095033, 1095133, 1095233, 1095334, 1095434, 1095534, 1095635, 1095735, 1095835, 1095936, 1096036, 1096136, 1096236, 1096337, 1096437, 1096537, 1096638, 1096738, 1096838, 1096939, 1097039, 1097139, 1097240, 1097340, 1097440, 1097541, 1097641, 1097741, 1097842, 1097942, 1098042, 1098143, 1098243, 1098343, 1098444, 1098544, 1098644, 1098745, 1098845, 1098945, 1099046, 1099146, 1099246, 1099347, 1099447, 1099548, 1099648, 1099748, 1099849, 1099949, 1100049, 1100150, 1100250, 1100350, 1100451, 1100551, 1100651, 1100752, 1100852, 1100953, 1101053, 1101153, 1101254, 1101354, 1101454, 1101555, 1101655, 1101756, 1101856, 1101956, 1102057, 1102157, 1102257, 1102358, 1102458, 1102559, 1102659, 1102759, 1102860, 1102960, 1103061, 1103161, 1103261, 1103362, 1103462, 1103562, 1103663, 1103763, 1103864, 1103964, 1104064, 1104165, 1104265, 1104366, 1104466, 1104566, 1104667, 1104767, 1104868, 1104968, 1105069, 1105169, 1105269, 1105370, 1105470, 1105571, 1105671, 1105771, 1105872, 1105972, 1106073, 1106173, 1106274, 1106374, 1106474, 1106575, 1106675, 1106776, 1106876, 1106977, 1107077, 1107177, 1107278, 1107378, 1107479, 1107579, 1107680, 1107780, 1107880, 1107981, 1108081, 1108182, 1108282, 1108383, 1108483, 1108584, 1108684, 1108784, 1108885, 1108985, 1109086, 1109186, 1109287, 1109387, 1109488, 1109588, 1109689, 1109789, 1109889, 1109990, 1110090, 1110191, 1110291, 1110392, 1110492, 1110593, 1110693, 1110794, 1110894, 1110995, 1111095, 1111196, 1111296, 1111396, 1111497, 1111597, 1111698, 1111798, 1111899, 1111999, 1112100, 1112200, 1112301, 1112401, 1112502, 1112602, 1112703, 1112803, 1112904, 1113004, 1113105, 1113205, 1113306, 1113406, 1113507, 1113607, 1113708, 1113808, 1113909, 1114009, 1114110, 1114210, 1114311, 1114411, 1114512, 1114612, 1114713, 1114813, 1114914, 1115014, 1115115, 1115215, 1115316, 1115416, 1115517, 1115617, 1115718, 1115819, 1115919, 1116020, 1116120, 1116221, 1116321, 1116422, 1116522, 1116623, 1116723, 1116824, 1116924, 1117025, 1117125, 1117226, 1117327, 1117427, 1117528, 1117628, 1117729, 1117829, 1117930, 1118030, 1118131, 1118231, 1118332, 1118433, 1118533, 1118634, 1118734, 1118835, 1118935, 1119036, 1119136, 1119237, 1119338, 1119438, 1119539, 1119639, 1119740, 1119840, 1119941, 1120041, 1120142, 1120243, 1120343, 1120444, 1120544, 1120645, 1120746, 1120846, 1120947, 1121047, 1121148, 1121248, 1121349, 1121450, 1121550, 1121651, 1121751, 1121852, 1121953, 1122053, 1122154, 1122254, 1122355, 1122455, 1122556, 1122657, 1122757, 1122858, 1122958, 1123059, 1123160, 1123260, 1123361, 1123461, 1123562, 1123663, 1123763, 1123864, 1123965, 1124065, 1124166, 1124266, 1124367, 1124468, 1124568, 1124669, 1124769, 1124870, 1124971, 1125071, 1125172, 1125273, 1125373, 1125474, 1125574, 1125675, 1125776, 1125876, 1125977, 1126078, 1126178, 1126279, 1126379, 1126480, 1126581, 1126681, 1126782, 1126883, 1126983, 1127084, 1127185, 1127285, 1127386, 1127487, 1127587, 1127688, 1127788, 1127889, 1127990, 1128090, 1128191, 1128292, 1128392, 1128493, 1128594, 1128694, 1128795, 1128896, 1128996, 1129097, 1129198, 1129298, 1129399, 1129500, 1129600, 1129701, 1129802, 1129902, 1130003, 1130104, 1130204, 1130305, 1130406, 1130506, 1130607, 1130708, 1130808, 1130909, 1131010, 1131111, 1131211, 1131312, 1131413, 1131513, 1131614, 1131715, 1131815, 1131916, 1132017, 1132117, 1132218, 1132319, 1132420, 1132520, 1132621, 1132722, 1132822, 1132923, 1133024, 1133124, 1133225, 1133326, 1133427, 1133527, 1133628, 1133729, 1133829, 1133930, 1134031, 1134132, 1134232, 1134333, 1134434, 1134534, 1134635, 1134736, 1134837, 1134937, 1135038, 1135139, 1135240, 1135340, 1135441, 1135542, 1135642, 1135743, 1135844, 1135945, 1136045, 1136146, 1136247, 1136348, 1136448, 1136549, 1136650, 1136751, 1136851, 1136952, 1137053, 1137154, 1137254, 1137355, 1137456, 1137557, 1137657, 1137758, 1137859, 1137960, 1138060, 1138161, 1138262, 1138363, 1138463, 1138564, 1138665, 1138766, 1138867, 1138967, 1139068, 1139169, 1139270, 1139370, 1139471, 1139572, 1139673, 1139773, 1139874, 1139975, 1140076, 1140177, 1140277, 1140378, 1140479, 1140580, 1140681, 1140781, 1140882, 1140983, 1141084, 1141184, 1141285, 1141386, 1141487, 1141588, 1141688, 1141789, 1141890, 1141991, 1142092, 1142192, 1142293, 1142394, 1142495, 1142596, 1142696, 1142797, 1142898, 1142999, 1143100, 1143201, 1143301, 1143402, 1143503, 1143604, 1143705, 1143805, 1143906, 1144007, 1144108, 1144209, 1144310, 1144410, 1144511, 1144612, 1144713, 1144814, 1144915, 1145015, 1145116, 1145217, 1145318, 1145419, 1145520, 1145620, 1145721, 1145822, 1145923, 1146024, 1146125, 1146225, 1146326, 1146427, 1146528, 1146629, 1146730, 1146831, 1146931, 1147032, 1147133, 1147234, 1147335, 1147436, 1147537, 1147637, 1147738, 1147839, 1147940, 1148041, 1148142, 1148243, 1148343, 1148444, 1148545, 1148646, 1148747, 1148848, 1148949, 1149050, 1149150, 1149251, 1149352, 1149453, 1149554, 1149655, 1149756, 1149857, 1149957, 1150058, 1150159, 1150260, 1150361, 1150462, 1150563, 1150664, 1150765, 1150865, 1150966, 1151067, 1151168, 1151269, 1151370, 1151471, 1151572, 1151673, 1151774, 1151874, 1151975, 1152076, 1152177, 1152278, 1152379, 1152480, 1152581, 1152682, 1152783, 1152884, 1152985, 1153085, 1153186, 1153287, 1153388, 1153489, 1153590, 1153691, 1153792, 1153893, 1153994, 1154095, 1154196, 1154297, 1154397, 1154498, 1154599, 1154700, 1154801, 1154902, 1155003, 1155104, 1155205, 1155306, 1155407, 1155508, 1155609, 1155710, 1155811, 1155912, 1156013, 1156113, 1156214, 1156315, 1156416, 1156517, 1156618, 1156719, 1156820, 1156921, 1157022, 1157123, 1157224, 1157325, 1157426, 1157527, 1157628, 1157729, 1157830, 1157931, 1158032, 1158133, 1158234, 1158335, 1158436, 1158537, 1158638, 1158739, 1158840, 1158941, 1159041, 1159142, 1159243, 1159344, 1159445, 1159546, 1159647, 1159748, 1159849, 1159950, 1160051, 1160152, 1160253, 1160354, 1160455, 1160556, 1160657, 1160758, 1160859, 1160960, 1161061, 1161162, 1161263, 1161364, 1161465, 1161566, 1161667, 1161768, 1161869, 1161970, 1162071, 1162172, 1162273, 1162374, 1162475, 1162576, 1162678, 1162779, 1162880, 1162981, 1163082, 1163183, 1163284, 1163385, 1163486, 1163587, 1163688, 1163789, 1163890, 1163991, 1164092, 1164193, 1164294, 1164395, 1164496, 1164597, 1164698, 1164799, 1164900, 1165001, 1165102, 1165203, 1165304, 1165405, 1165506, 1165608, 1165709, 1165810, 1165911, 1166012, 1166113, 1166214, 1166315, 1166416, 1166517, 1166618, 1166719, 1166820, 1166921, 1167022, 1167123, 1167224, 1167326, 1167427, 1167528, 1167629, 1167730, 1167831, 1167932, 1168033, 1168134, 1168235, 1168336, 1168437, 1168538, 1168640, 1168741, 1168842, 1168943, 1169044, 1169145, 1169246, 1169347, 1169448, 1169549, 1169650, 1169752, 1169853, 1169954, 1170055, 1170156, 1170257, 1170358, 1170459, 1170560, 1170661, 1170763, 1170864, 1170965, 1171066, 1171167, 1171268, 1171369, 1171470, 1171571, 1171673, 1171774, 1171875, 1171976, 1172077, 1172178, 1172279, 1172380, 1172481, 1172583, 1172684, 1172785, 1172886, 1172987, 1173088, 1173189, 1173291, 1173392, 1173493, 1173594, 1173695, 1173796, 1173897, 1173998, 1174100, 1174201, 1174302, 1174403, 1174504, 1174605, 1174706, 1174808, 1174909, 1175010, 1175111, 1175212, 1175313, 1175415, 1175516, 1175617, 1175718, 1175819, 1175920, 1176021, 1176123, 1176224, 1176325, 1176426, 1176527, 1176628, 1176730, 1176831, 1176932, 1177033, 1177134, 1177235, 1177337, 1177438, 1177539, 1177640, 1177741, 1177843, 1177944, 1178045, 1178146, 1178247, 1178348, 1178450, 1178551, 1178652, 1178753, 1178854, 1178956, 1179057, 1179158, 1179259, 1179360, 1179462, 1179563, 1179664, 1179765, 1179866, 1179968, 1180069, 1180170, 1180271, 1180372, 1180474, 1180575, 1180676, 1180777, 1180878, 1180980, 1181081, 1181182, 1181283, 1181385, 1181486, 1181587, 1181688, 1181789, 1181891, 1181992, 1182093, 1182194, 1182296, 1182397, 1182498, 1182599, 1182700, 1182802, 1182903, 1183004, 1183105, 1183207, 1183308, 1183409, 1183510, 1183612, 1183713, 1183814, 1183915, 1184017, 1184118, 1184219, 1184320, 1184422, 1184523, 1184624, 1184725, 1184827, 1184928, 1185029, 1185130, 1185232, 1185333, 1185434, 1185535, 1185637, 1185738, 1185839, 1185940, 1186042, 1186143, 1186244, 1186345, 1186447, 1186548, 1186649, 1186751, 1186852, 1186953, 1187054, 1187156, 1187257, 1187358, 1187460, 1187561, 1187662, 1187763, 1187865, 1187966, 1188067, 1188169, 1188270, 1188371, 1188472, 1188574, 1188675, 1188776, 1188878, 1188979, 1189080, 1189181, 1189283, 1189384, 1189485, 1189587, 1189688, 1189789, 1189891, 1189992, 1190093, 1190195, 1190296, 1190397, 1190498, 1190600, 1190701, 1190802, 1190904, 1191005, 1191106, 1191208, 1191309, 1191410, 1191512, 1191613, 1191714, 1191816, 1191917, 1192018, 1192120, 1192221, 1192322, 1192424, 1192525, 1192626, 1192728, 1192829, 1192930, 1193032, 1193133, 1193234, 1193336, 1193437, 1193538, 1193640, 1193741, 1193842, 1193944, 1194045, 1194146, 1194248, 1194349, 1194451, 1194552, 1194653, 1194755, 1194856, 1194957, 1195059, 1195160, 1195261, 1195363, 1195464, 1195566, 1195667, 1195768, 1195870, 1195971, 1196072, 1196174, 1196275, 1196376, 1196478, 1196579, 1196681, 1196782, 1196883, 1196985, 1197086, 1197188, 1197289, 1197390, 1197492, 1197593, 1197694, 1197796, 1197897, 1197999, 1198100, 1198201, 1198303, 1198404, 1198506, 1198607, 1198708, 1198810, 1198911, 1199013, 1199114, 1199215, 1199317, 1199418, 1199520, 1199621, 1199722, 1199824, 1199925, 1200027, 1200128, 1200230, 1200331, 1200432, 1200534, 1200635, 1200737, 1200838, 1200940, 1201041, 1201142, 1201244, 1201345, 1201447, 1201548, 1201650, 1201751, 1201852, 1201954, 1202055, 1202157, 1202258, 1202360, 1202461, 1202562, 1202664, 1202765, 1202867, 1202968, 1203070, 1203171, 1203273, 1203374, 1203475, 1203577, 1203678, 1203780, 1203881, 1203983, 1204084, 1204186, 1204287, 1204389, 1204490, 1204591, 1204693, 1204794, 1204896, 1204997, 1205099, 1205200, 1205302, 1205403, 1205505, 1205606, 1205708, 1205809, 1205911, 1206012, 1206114, 1206215, 1206317, 1206418, 1206519, 1206621, 1206722, 1206824, 1206925, 1207027, 1207128, 1207230, 1207331, 1207433, 1207534, 1207636, 1207737, 1207839, 1207940, 1208042, 1208143, 1208245, 1208346, 1208448, 1208549, 1208651, 1208752, 1208854, 1208955, 1209057, 1209158, 1209260, 1209361, 1209463, 1209564, 1209666, 1209768, 1209869, 1209971, 1210072, 1210174, 1210275, 1210377, 1210478, 1210580, 1210681, 1210783, 1210884, 1210986, 1211087, 1211189, 1211290, 1211392, 1211493, 1211595, 1211697, 1211798, 1211900, 1212001, 1212103, 1212204, 1212306, 1212407, 1212509, 1212610, 1212712, 1212814, 1212915, 1213017, 1213118, 1213220, 1213321, 1213423, 1213524, 1213626, 1213728, 1213829, 1213931, 1214032, 1214134, 1214235, 1214337, 1214438, 1214540, 1214642, 1214743, 1214845, 1214946, 1215048, 1215149, 1215251, 1215353, 1215454, 1215556, 1215657, 1215759, 1215861, 1215962, 1216064, 1216165, 1216267, 1216368, 1216470, 1216572, 1216673, 1216775, 1216876, 1216978, 1217080, 1217181, 1217283, 1217384, 1217486, 1217588, 1217689, 1217791, 1217892, 1217994, 1218096, 1218197, 1218299, 1218400, 1218502, 1218604, 1218705, 1218807, 1218908, 1219010, 1219112, 1219213, 1219315, 1219417, 1219518, 1219620, 1219721, 1219823, 1219925, 1220026, 1220128, 1220230, 1220331, 1220433, 1220534, 1220636, 1220738, 1220839, 1220941, 1221043, 1221144, 1221246, 1221348, 1221449, 1221551, 1221652, 1221754, 1221856, 1221957, 1222059, 1222161, 1222262, 1222364, 1222466, 1222567, 1222669, 1222771, 1222872, 1222974, 1223076, 1223177, 1223279, 1223381, 1223482, 1223584, 1223686, 1223787, 1223889, 1223991, 1224092, 1224194, 1224296, 1224397, 1224499, 1224601, 1224702, 1224804, 1224906, 1225007, 1225109, 1225211, 1225312, 1225414, 1225516, 1225617, 1225719, 1225821, 1225922, 1226024, 1226126, 1226228, 1226329, 1226431, 1226533, 1226634, 1226736, 1226838, 1226939, 1227041, 1227143, 1227245, 1227346, 1227448, 1227550, 1227651, 1227753, 1227855, 1227956, 1228058, 1228160, 1228262, 1228363, 1228465, 1228567, 1228668, 1228770, 1228872, 1228974, 1229075, 1229177, 1229279, 1229381, 1229482, 1229584, 1229686, 1229787, 1229889, 1229991, 1230093, 1230194, 1230296, 1230398, 1230500, 1230601, 1230703, 1230805, 1230907, 1231008, 1231110, 1231212, 1231313, 1231415, 1231517, 1231619, 1231720, 1231822, 1231924, 1232026, 1232127, 1232229, 1232331, 1232433, 1232535, 1232636, 1232738, 1232840, 1232942, 1233043, 1233145, 1233247, 1233349, 1233450, 1233552, 1233654, 1233756, 1233857, 1233959, 1234061, 1234163, 1234265, 1234366, 1234468, 1234570, 1234672, 1234773, 1234875, 1234977, 1235079, 1235181, 1235282, 1235384, 1235486, 1235588, 1235690, 1235791, 1235893, 1235995, 1236097, 1236199, 1236300, 1236402, 1236504, 1236606, 1236708, 1236809, 1236911, 1237013, 1237115, 1237217, 1237318, 1237420, 1237522, 1237624, 1237726, 1237827, 1237929, 1238031, 1238133, 1238235, 1238337, 1238438, 1238540, 1238642, 1238744, 1238846, 1238947, 1239049, 1239151, 1239253, 1239355, 1239457, 1239558, 1239660, 1239762, 1239864, 1239966, 1240068, 1240169, 1240271, 1240373, 1240475, 1240577, 1240679, 1240781, 1240882, 1240984, 1241086, 1241188, 1241290, 1241392, 1241493, 1241595, 1241697, 1241799, 1241901, 1242003, 1242105, 1242206, 1242308, 1242410, 1242512, 1242614, 1242716, 1242818, 1242920, 1243021, 1243123, 1243225, 1243327, 1243429, 1243531, 1243633, 1243735, 1243836, 1243938, 1244040, 1244142, 1244244, 1244346, 1244448, 1244550, 1244651, 1244753, 1244855, 1244957, 1245059, 1245161, 1245263, 1245365, 1245467, 1245568, 1245670, 1245772, 1245874, 1245976, 1246078, 1246180, 1246282, 1246384, 1246486, 1246587, 1246689, 1246791, 1246893, 1246995, 1247097, 1247199, 1247301, 1247403, 1247505, 1247607, 1247709, 1247810, 1247912, 1248014, 1248116, 1248218, 1248320, 1248422, 1248524, 1248626, 1248728, 1248830, 1248932, 1249034, 1249136, 1249237, 1249339, 1249441, 1249543, 1249645, 1249747, 1249849, 1249951, 1250053, 1250155, 1250257, 1250359, 1250461, 1250563, 1250665, 1250767, 1250869, 1250971, 1251072, 1251174, 1251276, 1251378, 1251480, 1251582, 1251684, 1251786, 1251888, 1251990, 1252092, 1252194, 1252296, 1252398, 1252500, 1252602, 1252704, 1252806, 1252908, 1253010, 1253112, 1253214, 1253316, 1253418, 1253520, 1253622, 1253724, 1253826, 1253928, 1254030, 1254132, 1254234, 1254336, 1254438, 1254540, 1254642, 1254744, 1254846, 1254948, 1255050, 1255152, 1255254, 1255356, 1255458, 1255560, 1255662, 1255764, 1255866, 1255968, 1256070, 1256172, 1256274, 1256376, 1256478, 1256580, 1256682, 1256784, 1256886, 1256988, 1257090, 1257192, 1257294, 1257396, 1257498, 1257600, 1257702, 1257804, 1257906, 1258008, 1258110, 1258212, 1258314, 1258416, 1258518, 1258620, 1258722, 1258824, 1258926, 1259028, 1259130, 1259232, 1259334, 1259436, 1259538, 1259640, 1259743, 1259845, 1259947, 1260049, 1260151, 1260253, 1260355, 1260457, 1260559, 1260661, 1260763, 1260865, 1260967, 1261069, 1261171, 1261273, 1261375, 1261477, 1261580, 1261682, 1261784, 1261886, 1261988, 1262090, 1262192, 1262294, 1262396, 1262498, 1262600, 1262702, 1262804, 1262906, 1263009, 1263111, 1263213, 1263315, 1263417, 1263519, 1263621, 1263723, 1263825, 1263927, 1264029, 1264132, 1264234, 1264336, 1264438, 1264540, 1264642, 1264744, 1264846, 1264948, 1265050, 1265153, 1265255, 1265357, 1265459, 1265561, 1265663, 1265765, 1265867, 1265969, 1266071, 1266174, 1266276, 1266378, 1266480, 1266582, 1266684, 1266786, 1266888, 1266991, 1267093, 1267195, 1267297, 1267399, 1267501, 1267603, 1267705, 1267808, 1267910, 1268012, 1268114, 1268216, 1268318, 1268420, 1268523, 1268625, 1268727, 1268829, 1268931, 1269033, 1269135, 1269238, 1269340, 1269442, 1269544, 1269646, 1269748, 1269850, 1269953, 1270055, 1270157, 1270259, 1270361, 1270463, 1270566, 1270668, 1270770, 1270872, 1270974, 1271076, 1271179, 1271281, 1271383, 1271485, 1271587, 1271689, 1271792, 1271894, 1271996, 1272098, 1272200, 1272302, 1272405, 1272507, 1272609, 1272711, 1272813, 1272916, 1273018, 1273120, 1273222, 1273324, 1273426, 1273529, 1273631, 1273733, 1273835, 1273937, 1274040, 1274142, 1274244, 1274346, 1274448, 1274551, 1274653, 1274755, 1274857, 1274959, 1275062, 1275164, 1275266, 1275368, 1275471, 1275573, 1275675, 1275777, 1275879, 1275982, 1276084, 1276186, 1276288, 1276390, 1276493, 1276595, 1276697, 1276799, 1276902, 1277004, 1277106, 1277208, 1277311, 1277413, 1277515, 1277617, 1277719, 1277822, 1277924, 1278026, 1278128, 1278231, 1278333, 1278435, 1278537, 1278640, 1278742, 1278844, 1278946, 1279049, 1279151, 1279253, 1279355, 1279458, 1279560, 1279662, 1279764, 1279867, 1279969, 1280071, 1280173, 1280276, 1280378, 1280480, 1280583, 1280685, 1280787, 1280889, 1280992, 1281094, 1281196, 1281298, 1281401, 1281503, 1281605, 1281708, 1281810, 1281912, 1282014, 1282117, 1282219, 1282321, 1282423, 1282526, 1282628, 1282730, 1282833, 1282935, 1283037, 1283140, 1283242, 1283344, 1283446, 1283549, 1283651, 1283753, 1283856, 1283958, 1284060, 1284163, 1284265, 1284367, 1284469, 1284572, 1284674, 1284776, 1284879, 1284981, 1285083, 1285186, 1285288, 1285390, 1285493, 1285595, 1285697, 1285800, 1285902, 1286004, 1286107, 1286209, 1286311, 1286413, 1286516, 1286618, 1286720, 1286823, 1286925, 1287027, 1287130, 1287232, 1287334, 1287437, 1287539, 1287642, 1287744, 1287846, 1287949, 1288051, 1288153, 1288256, 1288358, 1288460, 1288563, 1288665, 1288767, 1288870, 1288972, 1289074, 1289177, 1289279, 1289381, 1289484, 1289586, 1289689, 1289791, 1289893, 1289996, 1290098, 1290200, 1290303, 1290405, 1290508, 1290610, 1290712, 1290815, 1290917, 1291019, 1291122, 1291224, 1291327, 1291429, 1291531, 1291634, 1291736, 1291838, 1291941, 1292043, 1292146, 1292248, 1292350, 1292453, 1292555, 1292658, 1292760, 1292862, 1292965, 1293067, 1293170, 1293272, 1293374, 1293477, 1293579, 1293682, 1293784, 1293886, 1293989, 1294091, 1294194, 1294296, 1294398, 1294501, 1294603, 1294706, 1294808, 1294911, 1295013, 1295115, 1295218, 1295320, 1295423, 1295525, 1295627, 1295730, 1295832, 1295935, 1296037, 1296140, 1296242, 1296344, 1296447, 1296549, 1296652, 1296754, 1296857, 1296959, 1297062, 1297164, 1297266, 1297369, 1297471, 1297574, 1297676, 1297779, 1297881, 1297984, 1298086, 1298188, 1298291, 1298393, 1298496, 1298598, 1298701, 1298803, 1298906, 1299008, 1299111, 1299213, 1299316, 1299418, 1299520, 1299623, 1299725, 1299828, 1299930, 1300033, 1300135, 1300238, 1300340, 1300443, 1300545, 1300648, 1300750, 1300853, 1300955, 1301058, 1301160, 1301263, 1301365, 1301468, 1301570, 1301672, 1301775, 1301877, 1301980, 1302082, 1302185, 1302287, 1302390, 1302492, 1302595, 1302697, 1302800, 1302902, 1303005, 1303107, 1303210, 1303312, 1303415, 1303517, 1303620, 1303723, 1303825, 1303928, 1304030, 1304133, 1304235, 1304338, 1304440, 1304543, 1304645, 1304748, 1304850, 1304953, 1305055, 1305158, 1305260, 1305363, 1305465, 1305568, 1305670, 1305773, 1305875, 1305978, 1306081, 1306183, 1306286, 1306388, 1306491, 1306593, 1306696, 1306798, 1306901, 1307003, 1307106, 1307209, 1307311, 1307414, 1307516, 1307619, 1307721, 1307824, 1307926, 1308029, 1308132, 1308234, 1308337, 1308439, 1308542, 1308644, 1308747, 1308849, 1308952, 1309055, 1309157, 1309260, 1309362, 1309465, 1309567, 1309670, 1309773, 1309875, 1309978, 1310080, 1310183, 1310285, 1310388, 1310491, 1310593, 1310696, 1310798, 1310901, 1311004, 1311106, 1311209, 1311311, 1311414, 1311517, 1311619, 1311722, 1311824, 1311927, 1312030, 1312132, 1312235, 1312337, 1312440, 1312543, 1312645, 1312748, 1312850, 1312953, 1313056, 1313158, 1313261, 1313363, 1313466, 1313569, 1313671, 1313774, 1313876, 1313979, 1314082, 1314184, 1314287, 1314390, 1314492, 1314595, 1314697, 1314800, 1314903, 1315005, 1315108, 1315211, 1315313, 1315416, 1315519, 1315621, 1315724, 1315826, 1315929, 1316032, 1316134, 1316237, 1316340, 1316442, 1316545, 1316648, 1316750, 1316853, 1316956, 1317058, 1317161, 1317264, 1317366, 1317469, 1317571, 1317674, 1317777, 1317879, 1317982, 1318085, 1318187, 1318290, 1318393, 1318495, 1318598, 1318701, 1318803, 1318906, 1319009, 1319111, 1319214, 1319317, 1319420, 1319522, 1319625, 1319728, 1319830, 1319933, 1320036, 1320138, 1320241, 1320344, 1320446, 1320549, 1320652, 1320754, 1320857, 1320960, 1321062, 1321165, 1321268, 1321371, 1321473, 1321576, 1321679, 1321781, 1321884, 1321987, 1322089, 1322192, 1322295, 1322398, 1322500, 1322603, 1322706, 1322808, 1322911, 1323014, 1323117, 1323219, 1323322, 1323425, 1323527, 1323630, 1323733, 1323836, 1323938, 1324041, 1324144, 1324247, 1324349, 1324452, 1324555, 1324657, 1324760, 1324863, 1324966, 1325068, 1325171, 1325274, 1325377, 1325479, 1325582, 1325685, 1325788, 1325890, 1325993, 1326096, 1326199, 1326301, 1326404, 1326507, 1326610, 1326712, 1326815, 1326918, 1327021, 1327123, 1327226, 1327329, 1327432, 1327534, 1327637, 1327740, 1327843, 1327946, 1328048, 1328151, 1328254, 1328357, 1328459, 1328562, 1328665, 1328768, 1328870, 1328973, 1329076, 1329179, 1329282, 1329384, 1329487, 1329590, 1329693, 1329796, 1329898, 1330001, 1330104, 1330207, 1330309, 1330412, 1330515, 1330618, 1330721, 1330823, 1330926, 1331029, 1331132, 1331235, 1331337, 1331440, 1331543, 1331646, 1331749, 1331851, 1331954, 1332057, 1332160, 1332263, 1332366, 1332468, 1332571, 1332674, 1332777, 1332880, 1332982, 1333085, 1333188, 1333291, 1333394, 1333497, 1333599, 1333702, 1333805, 1333908, 1334011, 1334114, 1334216, 1334319, 1334422, 1334525, 1334628, 1334731, 1334833, 1334936, 1335039, 1335142, 1335245, 1335348, 1335450, 1335553, 1335656, 1335759, 1335862, 1335965, 1336068, 1336170, 1336273, 1336376, 1336479, 1336582, 1336685, 1336788, 1336890, 1336993, 1337096, 1337199, 1337302, 1337405, 1337508, 1337610, 1337713, 1337816, 1337919, 1338022, 1338125, 1338228, 1338331, 1338433, 1338536, 1338639, 1338742, 1338845, 1338948, 1339051, 1339154, 1339257, 1339359, 1339462, 1339565, 1339668, 1339771, 1339874, 1339977, 1340080, 1340183, 1340285, 1340388, 1340491, 1340594, 1340697, 1340800, 1340903, 1341006, 1341109, 1341212, 1341315, 1341417, 1341520, 1341623, 1341726, 1341829, 1341932, 1342035, 1342138, 1342241, 1342344, 1342447, 1342550, 1342652, 1342755, 1342858, 1342961, 1343064, 1343167, 1343270, 1343373, 1343476, 1343579, 1343682, 1343785, 1343888, 1343991, 1344093, 1344196, 1344299, 1344402, 1344505, 1344608, 1344711, 1344814, 1344917, 1345020, 1345123, 1345226, 1345329, 1345432, 1345535, 1345638, 1345741, 1345844, 1345947, 1346050, 1346152, 1346255, 1346358, 1346461, 1346564, 1346667, 1346770, 1346873, 1346976, 1347079, 1347182, 1347285, 1347388, 1347491, 1347594, 1347697, 1347800, 1347903, 1348006, 1348109, 1348212, 1348315, 1348418, 1348521, 1348624, 1348727, 1348830, 1348933, 1349036, 1349139, 1349242, 1349345, 1349448, 1349551, 1349654, 1349757, 1349860, 1349963, 1350066, 1350169, 1350272, 1350375, 1350478, 1350581, 1350684, 1350787, 1350890, 1350993, 1351096, 1351199, 1351302, 1351405, 1351508, 1351611, 1351714, 1351817, 1351920, 1352023, 1352126, 1352229, 1352332, 1352435, 1352538, 1352641, 1352744, 1352847, 1352950, 1353053, 1353156, 1353259, 1353362, 1353465, 1353568, 1353671, 1353775, 1353878, 1353981, 1354084, 1354187, 1354290, 1354393, 1354496, 1354599, 1354702, 1354805, 1354908, 1355011, 1355114, 1355217, 1355320, 1355423, 1355526, 1355629, 1355733, 1355836, 1355939, 1356042, 1356145, 1356248, 1356351, 1356454, 1356557, 1356660, 1356763, 1356866, 1356969, 1357072, 1357175, 1357279, 1357382, 1357485, 1357588, 1357691, 1357794, 1357897, 1358000, 1358103, 1358206, 1358309, 1358412, 1358516, 1358619, 1358722, 1358825, 1358928, 1359031, 1359134, 1359237, 1359340, 1359443, 1359547, 1359650, 1359753, 1359856, 1359959, 1360062, 1360165, 1360268, 1360371, 1360475, 1360578, 1360681, 1360784, 1360887, 1360990, 1361093, 1361196, 1361299, 1361403, 1361506, 1361609, 1361712, 1361815, 1361918, 1362021, 1362124, 1362228, 1362331, 1362434, 1362537, 1362640, 1362743, 1362846, 1362950, 1363053, 1363156, 1363259, 1363362, 1363465, 1363568, 1363672, 1363775, 1363878, 1363981, 1364084, 1364187, 1364290, 1364394, 1364497, 1364600, 1364703, 1364806, 1364909, 1365012, 1365116, 1365219, 1365322, 1365425, 1365528, 1365631, 1365735, 1365838, 1365941, 1366044, 1366147, 1366250, 1366354, 1366457, 1366560, 1366663, 1366766, 1366870, 1366973, 1367076, 1367179, 1367282, 1367385, 1367489, 1367592, 1367695, 1367798, 1367901, 1368005, 1368108, 1368211, 1368314, 1368417, 1368521, 1368624, 1368727, 1368830, 1368933, 1369037, 1369140, 1369243, 1369346, 1369449, 1369553, 1369656, 1369759, 1369862, 1369965, 1370069, 1370172, 1370275, 1370378, 1370482, 1370585, 1370688, 1370791, 1370894, 1370998, 1371101, 1371204, 1371307, 1371411, 1371514, 1371617, 1371720, 1371823, 1371927, 1372030, 1372133, 1372236, 1372340, 1372443, 1372546, 1372649, 1372753, 1372856, 1372959, 1373062, 1373166, 1373269, 1373372, 1373475, 1373579, 1373682, 1373785, 1373888, 1373992, 1374095, 1374198, 1374301, 1374405, 1374508, 1374611, 1374714, 1374818, 1374921, 1375024, 1375127, 1375231, 1375334, 1375437, 1375540, 1375644, 1375747, 1375850, 1375954, 1376057, 1376160, 1376263, 1376367, 1376470, 1376573, 1376677, 1376780, 1376883, 1376986, 1377090, 1377193, 1377296, 1377400, 1377503, 1377606, 1377709, 1377813, 1377916, 1378019, 1378123, 1378226, 1378329, 1378433, 1378536, 1378639, 1378742, 1378846, 1378949, 1379052, 1379156, 1379259, 1379362, 1379466, 1379569, 1379672, 1379776, 1379879, 1379982, 1380085, 1380189, 1380292, 1380395, 1380499, 1380602, 1380705, 1380809, 1380912, 1381015, 1381119, 1381222, 1381325, 1381429, 1381532, 1381635, 1381739, 1381842, 1381945, 1382049, 1382152, 1382255, 1382359, 1382462, 1382565, 1382669, 1382772, 1382876, 1382979, 1383082, 1383186, 1383289, 1383392, 1383496, 1383599, 1383702, 1383806, 1383909, 1384012, 1384116, 1384219, 1384323, 1384426, 1384529, 1384633, 1384736, 1384839, 1384943, 1385046, 1385149, 1385253, 1385356, 1385460, 1385563, 1385666, 1385770, 1385873, 1385976, 1386080, 1386183, 1386287, 1386390, 1386493, 1386597, 1386700, 1386804, 1386907, 1387010, 1387114, 1387217, 1387321, 1387424, 1387527, 1387631, 1387734, 1387838, 1387941, 1388044, 1388148, 1388251, 1388355, 1388458, 1388561, 1388665, 1388768, 1388872, 1388975, 1389078, 1389182, 1389285, 1389389, 1389492, 1389596, 1389699, 1389802, 1389906, 1390009, 1390113, 1390216, 1390319, 1390423, 1390526, 1390630, 1390733, 1390837, 1390940, 1391043, 1391147, 1391250, 1391354, 1391457, 1391561, 1391664, 1391768, 1391871, 1391974, 1392078, 1392181, 1392285, 1392388, 1392492, 1392595, 1392699, 1392802, 1392906, 1393009, 1393112, 1393216, 1393319, 1393423, 1393526, 1393630, 1393733, 1393837, 1393940, 1394044, 1394147, 1394251, 1394354, 1394457, 1394561, 1394664, 1394768, 1394871, 1394975, 1395078, 1395182, 1395285, 1395389, 1395492, 1395596, 1395699, 1395803, 1395906, 1396010, 1396113, 1396217, 1396320, 1396424, 1396527, 1396631, 1396734, 1396838, 1396941, 1397045, 1397148, 1397252, 1397355, 1397459, 1397562, 1397666, 1397769, 1397873, 1397976, 1398080, 1398183, 1398287, 1398390, 1398494, 1398597, 1398701, 1398804, 1398908, 1399011, 1399115, 1399218, 1399322, 1399425, 1399529, 1399632, 1399736, 1399839, 1399943, 1400047, 1400150, 1400254, 1400357, 1400461, 1400564, 1400668, 1400771, 1400875, 1400978, 1401082, 1401185, 1401289, 1401392, 1401496, 1401600, 1401703, 1401807, 1401910, 1402014, 1402117, 1402221, 1402324, 1402428, 1402532, 1402635, 1402739, 1402842, 1402946, 1403049, 1403153, 1403256, 1403360, 1403464, 1403567, 1403671, 1403774, 1403878, 1403981, 1404085, 1404189, 1404292, 1404396, 1404499, 1404603, 1404706, 1404810, 1404914, 1405017, 1405121, 1405224, 1405328, 1405432, 1405535, 1405639, 1405742, 1405846, 1405950, 1406053, 1406157, 1406260, 1406364, 1406468, 1406571, 1406675, 1406778, 1406882, 1406986, 1407089, 1407193, 1407296, 1407400, 1407504, 1407607, 1407711, 1407814, 1407918, 1408022, 1408125, 1408229, 1408332, 1408436, 1408540, 1408643, 1408747, 1408851, 1408954, 1409058, 1409161, 1409265, 1409369, 1409472, 1409576, 1409680, 1409783, 1409887, 1409990, 1410094, 1410198, 1410301, 1410405, 1410509, 1410612, 1410716, 1410820, 1410923, 1411027, 1411131, 1411234, 1411338, 1411441, 1411545, 1411649, 1411752, 1411856, 1411960, 1412063, 1412167, 1412271, 1412374, 1412478, 1412582, 1412685, 1412789, 1412893, 1412996, 1413100, 1413204, 1413307, 1413411, 1413515, 1413618, 1413722, 1413826, 1413929, 1414033, 1414137, 1414240, 1414344, 1414448, 1414552, 1414655, 1414759, 1414863, 1414966, 1415070, 1415174, 1415277, 1415381, 1415485, 1415588, 1415692, 1415796, 1415900, 1416003, 1416107, 1416211, 1416314, 1416418, 1416522, 1416625, 1416729, 1416833, 1416937, 1417040, 1417144, 1417248, 1417351, 1417455, 1417559, 1417663, 1417766, 1417870, 1417974, 1418077, 1418181, 1418285, 1418389, 1418492, 1418596, 1418700, 1418803, 1418907, 1419011, 1419115, 1419218, 1419322, 1419426, 1419530, 1419633, 1419737, 1419841, 1419945, 1420048, 1420152, 1420256, 1420360, 1420463, 1420567, 1420671, 1420775, 1420878, 1420982, 1421086, 1421190, 1421293, 1421397, 1421501, 1421605, 1421708, 1421812, 1421916, 1422020, 1422123, 1422227, 1422331, 1422435, 1422538, 1422642, 1422746, 1422850, 1422954, 1423057, 1423161, 1423265, 1423369, 1423472, 1423576, 1423680, 1423784, 1423888, 1423991, 1424095, 1424199, 1424303, 1424406, 1424510, 1424614, 1424718, 1424822, 1424925, 1425029, 1425133, 1425237, 1425341, 1425444, 1425548, 1425652, 1425756, 1425860, 1425963, 1426067, 1426171, 1426275, 1426379, 1426482, 1426586, 1426690, 1426794, 1426898, 1427001, 1427105, 1427209, 1427313, 1427417, 1427521, 1427624, 1427728, 1427832, 1427936, 1428040, 1428144, 1428247, 1428351, 1428455, 1428559, 1428663, 1428767, 1428870, 1428974, 1429078, 1429182, 1429286, 1429390, 1429493, 1429597, 1429701, 1429805, 1429909, 1430013, 1430116, 1430220, 1430324, 1430428, 1430532, 1430636, 1430740, 1430843, 1430947, 1431051, 1431155, 1431259, 1431363, 1431467, 1431570, 1431674, 1431778, 1431882, 1431986, 1432090, 1432194, 1432298, 1432401, 1432505, 1432609, 1432713, 1432817, 1432921, 1433025, 1433129, 1433232, 1433336, 1433440, 1433544, 1433648, 1433752, 1433856, 1433960, 1434063, 1434167, 1434271, 1434375, 1434479, 1434583, 1434687, 1434791, 1434895, 1434999, 1435102, 1435206, 1435310, 1435414, 1435518, 1435622, 1435726, 1435830, 1435934, 1436038, 1436142, 1436245, 1436349, 1436453, 1436557, 1436661, 1436765, 1436869, 1436973, 1437077, 1437181, 1437285, 1437389, 1437492, 1437596, 1437700, 1437804, 1437908, 1438012, 1438116, 1438220, 1438324, 1438428, 1438532, 1438636, 1438740, 1438844, 1438948, 1439052, 1439155, 1439259, 1439363, 1439467, 1439571, 1439675, 1439779, 1439883, 1439987, 1440091, 1440195, 1440299, 1440403, 1440507, 1440611, 1440715, 1440819, 1440923, 1441027, 1441131, 1441235, 1441339, 1441442, 1441546, 1441650, 1441754, 1441858, 1441962, 1442066, 1442170, 1442274, 1442378, 1442482, 1442586, 1442690, 1442794, 1442898, 1443002, 1443106, 1443210, 1443314, 1443418, 1443522, 1443626, 1443730, 1443834, 1443938, 1444042, 1444146, 1444250, 1444354, 1444458, 1444562, 1444666, 1444770, 1444874, 1444978, 1445082, 1445186, 1445290, 1445394, 1445498, 1445602, 1445706, 1445810, 1445914, 1446018, 1446122, 1446226, 1446330, 1446434, 1446538, 1446642, 1446746, 1446850, 1446954, 1447058, 1447162, 1447266, 1447370, 1447474, 1447579, 1447683, 1447787, 1447891, 1447995, 1448099, 1448203, 1448307, 1448411, 1448515, 1448619, 1448723, 1448827, 1448931, 1449035, 1449139, 1449243, 1449347, 1449451, 1449555, 1449659, 1449763, 1449868, 1449972, 1450076, 1450180, 1450284, 1450388, 1450492, 1450596, 1450700, 1450804, 1450908, 1451012, 1451116, 1451220, 1451324, 1451429, 1451533, 1451637, 1451741, 1451845, 1451949, 1452053, 1452157, 1452261, 1452365, 1452469, 1452573, 1452677, 1452782, 1452886, 1452990, 1453094, 1453198, 1453302, 1453406, 1453510, 1453614, 1453718, 1453823, 1453927, 1454031, 1454135, 1454239, 1454343, 1454447, 1454551, 1454655, 1454759, 1454864, 1454968, 1455072, 1455176, 1455280, 1455384, 1455488, 1455592, 1455696, 1455801, 1455905, 1456009, 1456113, 1456217, 1456321, 1456425, 1456529, 1456634, 1456738, 1456842, 1456946, 1457050, 1457154, 1457258, 1457363, 1457467, 1457571, 1457675, 1457779, 1457883, 1457987, 1458092, 1458196, 1458300, 1458404, 1458508, 1458612, 1458716, 1458821, 1458925, 1459029, 1459133, 1459237, 1459341, 1459445, 1459550, 1459654, 1459758, 1459862, 1459966, 1460070, 1460175, 1460279, 1460383, 1460487, 1460591, 1460695, 1460800, 1460904, 1461008, 1461112, 1461216, 1461321, 1461425, 1461529, 1461633, 1461737, 1461841, 1461946, 1462050, 1462154, 1462258, 1462362, 1462467, 1462571, 1462675, 1462779, 1462883, 1462988, 1463092, 1463196, 1463300, 1463404, 1463509, 1463613, 1463717, 1463821, 1463925, 1464030, 1464134, 1464238, 1464342, 1464446, 1464551, 1464655, 1464759, 1464863, 1464967, 1465072, 1465176, 1465280, 1465384, 1465489, 1465593, 1465697, 1465801, 1465905, 1466010, 1466114, 1466218, 1466322, 1466427, 1466531, 1466635, 1466739, 1466844, 1466948, 1467052, 1467156, 1467260, 1467365, 1467469, 1467573, 1467677, 1467782, 1467886, 1467990, 1468094, 1468199, 1468303, 1468407, 1468511, 1468616, 1468720, 1468824, 1468928, 1469033, 1469137, 1469241, 1469346, 1469450, 1469554, 1469658, 1469763, 1469867, 1469971, 1470075, 1470180, 1470284, 1470388, 1470493, 1470597, 1470701, 1470805, 1470910, 1471014, 1471118, 1471222, 1471327, 1471431, 1471535, 1471640, 1471744, 1471848, 1471952, 1472057, 1472161, 1472265, 1472370, 1472474, 1472578, 1472683, 1472787, 1472891, 1472995, 1473100, 1473204, 1473308, 1473413, 1473517, 1473621, 1473726, 1473830, 1473934, 1474039, 1474143, 1474247, 1474351, 1474456, 1474560, 1474664, 1474769, 1474873, 1474977, 1475082, 1475186, 1475290, 1475395, 1475499, 1475603, 1475708, 1475812, 1475916, 1476021, 1476125, 1476229, 1476334, 1476438, 1476542, 1476647, 1476751, 1476855, 1476960, 1477064, 1477168, 1477273, 1477377, 1477481, 1477586, 1477690, 1477794, 1477899, 1478003, 1478108, 1478212, 1478316, 1478421, 1478525, 1478629, 1478734, 1478838, 1478942, 1479047, 1479151, 1479256, 1479360, 1479464, 1479569, 1479673, 1479777, 1479882, 1479986, 1480091, 1480195, 1480299, 1480404, 1480508, 1480612, 1480717, 1480821, 1480926, 1481030, 1481134, 1481239, 1481343, 1481448, 1481552, 1481656, 1481761, 1481865, 1481969, 1482074, 1482178, 1482283, 1482387, 1482491, 1482596, 1482700, 1482805, 1482909, 1483014, 1483118, 1483222, 1483327, 1483431, 1483536, 1483640, 1483744, 1483849, 1483953, 1484058, 1484162, 1484266, 1484371, 1484475, 1484580, 1484684, 1484789, 1484893, 1484997, 1485102, 1485206, 1485311, 1485415, 1485520, 1485624, 1485729, 1485833, 1485937, 1486042, 1486146, 1486251, 1486355, 1486460, 1486564, 1486668, 1486773, 1486877, 1486982, 1487086, 1487191, 1487295, 1487400, 1487504, 1487609, 1487713, 1487817, 1487922, 1488026, 1488131, 1488235, 1488340, 1488444, 1488549, 1488653, 1488758, 1488862, 1488967, 1489071, 1489176, 1489280, 1489384, 1489489, 1489593, 1489698, 1489802, 1489907, 1490011, 1490116, 1490220, 1490325, 1490429, 1490534, 1490638, 1490743, 1490847, 1490952, 1491056, 1491161, 1491265, 1491370, 1491474, 1491579, 1491683, 1491788, 1491892, 1491997, 1492101, 1492206, 1492310, 1492415, 1492519, 1492624, 1492728, 1492833, 1492937, 1493042, 1493146, 1493251, 1493355, 1493460, 1493564, 1493669, 1493773, 1493878, 1493982, 1494087, 1494192, 1494296, 1494401, 1494505, 1494610, 1494714, 1494819, 1494923, 1495028, 1495132, 1495237, 1495341, 1495446, 1495550, 1495655, 1495760, 1495864, 1495969, 1496073, 1496178, 1496282, 1496387, 1496491, 1496596, 1496700, 1496805, 1496910, 1497014, 1497119, 1497223, 1497328, 1497432, 1497537, 1497641, 1497746, 1497851, 1497955, 1498060, 1498164, 1498269, 1498373, 1498478, 1498583, 1498687, 1498792, 1498896, 1499001, 1499105, 1499210, 1499315, 1499419, 1499524, 1499628, 1499733, 1499838, 1499942, 1500047, 1500151, 1500256, 1500360, 1500465, 1500570, 1500674, 1500779, 1500883, 1500988, 1501093, 1501197, 1501302, 1501406, 1501511, 1501616, 1501720, 1501825, 1501929, 1502034, 1502139, 1502243, 1502348, 1502453, 1502557, 1502662, 1502766, 1502871, 1502976, 1503080, 1503185, 1503289, 1503394, 1503499, 1503603, 1503708, 1503813, 1503917, 1504022, 1504126, 1504231, 1504336, 1504440, 1504545, 1504650, 1504754, 1504859, 1504964, 1505068, 1505173, 1505278, 1505382, 1505487, 1505591, 1505696, 1505801, 1505905, 1506010, 1506115, 1506219, 1506324, 1506429, 1506533, 1506638, 1506743, 1506847, 1506952, 1507057, 1507161, 1507266, 1507371, 1507475, 1507580, 1507685, 1507789, 1507894, 1507999, 1508103, 1508208, 1508313, 1508417, 1508522, 1508627, 1508731, 1508836, 1508941, 1509045, 1509150, 1509255, 1509359, 1509464, 1509569, 1509674, 1509778, 1509883, 1509988, 1510092, 1510197, 1510302, 1510406, 1510511, 1510616, 1510720, 1510825, 1510930, 1511035, 1511139, 1511244, 1511349, 1511453, 1511558, 1511663, 1511768, 1511872, 1511977, 1512082, 1512186, 1512291, 1512396, 1512501, 1512605, 1512710, 1512815, 1512919, 1513024, 1513129, 1513234, 1513338, 1513443, 1513548, 1513653, 1513757, 1513862, 1513967, 1514071, 1514176, 1514281, 1514386, 1514490, 1514595, 1514700, 1514805, 1514909, 1515014, 1515119, 1515224, 1515328, 1515433, 1515538, 1515643, 1515747, 1515852, 1515957, 1516062, 1516166, 1516271, 1516376, 1516481, 1516585, 1516690, 1516795, 1516900, 1517005, 1517109, 1517214, 1517319, 1517424, 1517528, 1517633, 1517738, 1517843, 1517947, 1518052, 1518157, 1518262, 1518367, 1518471, 1518576, 1518681, 1518786, 1518891, 1518995, 1519100, 1519205, 1519310, 1519414, 1519519, 1519624, 1519729, 1519834, 1519938, 1520043, 1520148, 1520253, 1520358, 1520462, 1520567, 1520672, 1520777, 1520882, 1520986, 1521091, 1521196, 1521301, 1521406, 1521511, 1521615, 1521720, 1521825, 1521930, 1522035, 1522139, 1522244, 1522349, 1522454, 1522559, 1522664, 1522768, 1522873, 1522978, 1523083, 1523188, 1523293, 1523397, 1523502, 1523607, 1523712, 1523817, 1523922, 1524026, 1524131, 1524236, 1524341, 1524446, 1524551, 1524656, 1524760, 1524865, 1524970, 1525075, 1525180, 1525285, 1525389, 1525494, 1525599, 1525704, 1525809, 1525914, 1526019, 1526124, 1526228, 1526333, 1526438, 1526543, 1526648, 1526753, 1526858, 1526962, 1527067, 1527172, 1527277, 1527382, 1527487, 1527592, 1527697, 1527801, 1527906, 1528011, 1528116, 1528221, 1528326, 1528431, 1528536, 1528641, 1528745, 1528850, 1528955, 1529060, 1529165, 1529270, 1529375, 1529480, 1529585, 1529690, 1529794, 1529899, 1530004, 1530109, 1530214, 1530319, 1530424, 1530529, 1530634, 1530739, 1530844, 1530948, 1531053, 1531158, 1531263, 1531368, 1531473, 1531578, 1531683, 1531788, 1531893, 1531998, 1532103, 1532207, 1532312, 1532417, 1532522, 1532627, 1532732, 1532837, 1532942, 1533047, 1533152, 1533257, 1533362, 1533467, 1533572, 1533677, 1533782, 1533886, 1533991, 1534096, 1534201, 1534306, 1534411, 1534516, 1534621, 1534726, 1534831, 1534936, 1535041, 1535146, 1535251, 1535356, 1535461, 1535566, 1535671, 1535776, 1535881, 1535986, 1536091, 1536196, 1536301, 1536406, 1536510, 1536615, 1536720, 1536825, 1536930, 1537035, 1537140, 1537245, 1537350, 1537455, 1537560, 1537665, 1537770, 1537875, 1537980, 1538085, 1538190, 1538295, 1538400, 1538505, 1538610, 1538715, 1538820, 1538925, 1539030, 1539135, 1539240, 1539345, 1539450, 1539555, 1539660, 1539765, 1539870, 1539975, 1540080, 1540185, 1540290, 1540395, 1540500, 1540605, 1540710, 1540815, 1540920, 1541025, 1541130, 1541235, 1541340, 1541445, 1541551, 1541656, 1541761, 1541866, 1541971, 1542076, 1542181, 1542286, 1542391, 1542496, 1542601, 1542706, 1542811, 1542916, 1543021, 1543126, 1543231, 1543336, 1543441, 1543546, 1543651, 1543756, 1543861, 1543966, 1544071, 1544177, 1544282, 1544387, 1544492, 1544597, 1544702, 1544807, 1544912, 1545017, 1545122, 1545227, 1545332, 1545437, 1545542, 1545647, 1545752, 1545858, 1545963, 1546068, 1546173, 1546278, 1546383, 1546488, 1546593, 1546698, 1546803, 1546908, 1547013, 1547119, 1547224, 1547329, 1547434, 1547539, 1547644, 1547749, 1547854, 1547959, 1548064, 1548169, 1548275, 1548380, 1548485, 1548590, 1548695, 1548800, 1548905, 1549010, 1549115, 1549220, 1549326, 1549431, 1549536, 1549641, 1549746, 1549851, 1549956, 1550061, 1550166, 1550272, 1550377, 1550482, 1550587, 1550692, 1550797, 1550902, 1551007, 1551113, 1551218, 1551323, 1551428, 1551533, 1551638, 1551743, 1551849, 1551954, 1552059, 1552164, 1552269, 1552374, 1552479, 1552584, 1552690, 1552795, 1552900, 1553005, 1553110, 1553215, 1553321, 1553426, 1553531, 1553636, 1553741, 1553846, 1553951, 1554057, 1554162, 1554267, 1554372, 1554477, 1554582, 1554688, 1554793, 1554898, 1555003, 1555108, 1555213, 1555319, 1555424, 1555529, 1555634, 1555739, 1555844, 1555950, 1556055, 1556160, 1556265, 1556370, 1556476, 1556581, 1556686, 1556791, 1556896, 1557002, 1557107, 1557212, 1557317, 1557422, 1557527, 1557633, 1557738, 1557843, 1557948, 1558053, 1558159, 1558264, 1558369, 1558474, 1558579, 1558685, 1558790, 1558895, 1559000, 1559106, 1559211, 1559316, 1559421, 1559526, 1559632, 1559737, 1559842, 1559947, 1560053, 1560158, 1560263, 1560368, 1560473, 1560579, 1560684, 1560789, 1560894, 1561000, 1561105, 1561210, 1561315, 1561420, 1561526, 1561631, 1561736, 1561841, 1561947, 1562052, 1562157, 1562262, 1562368, 1562473, 1562578, 1562683, 1562789, 1562894, 1562999, 1563104, 1563210, 1563315, 1563420, 1563525, 1563631, 1563736, 1563841, 1563947, 1564052, 1564157, 1564262, 1564368, 1564473, 1564578, 1564683, 1564789, 1564894, 1564999, 1565104, 1565210, 1565315, 1565420, 1565526, 1565631, 1565736, 1565841, 1565947, 1566052, 1566157, 1566263, 1566368, 1566473, 1566578, 1566684, 1566789, 1566894, 1567000, 1567105, 1567210, 1567316, 1567421, 1567526, 1567631, 1567737, 1567842, 1567947, 1568053, 1568158, 1568263, 1568369, 1568474, 1568579, 1568685, 1568790, 1568895, 1569000, 1569106, 1569211, 1569316, 1569422, 1569527, 1569632, 1569738, 1569843, 1569948, 1570054, 1570159, 1570264, 1570370, 1570475, 1570580, 1570686, 1570791, 1570896, 1571002, 1571107, 1571212, 1571318, 1571423, 1571528, 1571634, 1571739, 1571844, 1571950, 1572055, 1572160, 1572266, 1572371, 1572477, 1572582, 1572687, 1572793, 1572898, 1573003, 1573109, 1573214, 1573319, 1573425, 1573530, 1573636, 1573741, 1573846, 1573952, 1574057, 1574162, 1574268, 1574373, 1574478, 1574584, 1574689, 1574795, 1574900, 1575005, 1575111, 1575216, 1575322, 1575427, 1575532, 1575638, 1575743, 1575848, 1575954, 1576059, 1576165, 1576270, 1576375, 1576481, 1576586, 1576692, 1576797, 1576902, 1577008, 1577113, 1577219, 1577324, 1577429, 1577535, 1577640, 1577746, 1577851, 1577956, 1578062, 1578167, 1578273, 1578378, 1578484, 1578589, 1578694, 1578800, 1578905, 1579011, 1579116, 1579222, 1579327, 1579432, 1579538, 1579643, 1579749, 1579854, 1579960, 1580065, 1580170, 1580276, 1580381, 1580487, 1580592, 1580698, 1580803, 1580908, 1581014, 1581119, 1581225, 1581330, 1581436, 1581541, 1581647, 1581752, 1581857, 1581963, 1582068, 1582174, 1582279, 1582385, 1582490, 1582596, 1582701, 1582807, 1582912, 1583018, 1583123, 1583228, 1583334, 1583439, 1583545, 1583650, 1583756, 1583861, 1583967, 1584072, 1584178, 1584283, 1584389, 1584494, 1584600, 1584705, 1584811, 1584916, 1585022, 1585127, 1585233, 1585338, 1585444, 1585549, 1585655, 1585760, 1585866, 1585971, 1586077, 1586182, 1586288, 1586393, 1586499, 1586604, 1586710, 1586815, 1586921, 1587026, 1587132, 1587237, 1587343, 1587448, 1587554, 1587659, 1587765, 1587870, 1587976, 1588081, 1588187, 1588292, 1588398, 1588503, 1588609, 1588714, 1588820, 1588925, 1589031, 1589136, 1589242, 1589348, 1589453, 1589559, 1589664, 1589770, 1589875, 1589981, 1590086, 1590192, 1590297, 1590403, 1590508, 1590614, 1590720, 1590825, 1590931, 1591036, 1591142, 1591247, 1591353, 1591458, 1591564, 1591669, 1591775, 1591881, 1591986, 1592092, 1592197, 1592303, 1592408, 1592514, 1592620, 1592725, 1592831, 1592936, 1593042, 1593147, 1593253, 1593359, 1593464, 1593570, 1593675, 1593781, 1593886, 1593992, 1594098, 1594203, 1594309, 1594414, 1594520, 1594626, 1594731, 1594837, 1594942, 1595048, 1595153, 1595259, 1595365, 1595470, 1595576, 1595681, 1595787, 1595893, 1595998, 1596104, 1596209, 1596315, 1596421, 1596526, 1596632, 1596738, 1596843, 1596949, 1597054, 1597160, 1597266, 1597371, 1597477, 1597582, 1597688, 1597794, 1597899, 1598005, 1598111, 1598216, 1598322, 1598427, 1598533, 1598639, 1598744, 1598850, 1598956, 1599061, 1599167, 1599273, 1599378, 1599484, 1599589, 1599695, 1599801, 1599906, 1600012, 1600118, 1600223, 1600329, 1600435, 1600540, 1600646, 1600752, 1600857, 1600963, 1601069, 1601174, 1601280, 1601385, 1601491, 1601597, 1601702, 1601808, 1601914, 1602019, 1602125, 1602231, 1602336, 1602442, 1602548, 1602653, 1602759, 1602865, 1602971, 1603076, 1603182, 1603288, 1603393, 1603499, 1603605, 1603710, 1603816, 1603922, 1604027, 1604133, 1604239, 1604344, 1604450, 1604556, 1604661, 1604767, 1604873, 1604979, 1605084, 1605190, 1605296, 1605401, 1605507, 1605613, 1605718, 1605824, 1605930, 1606036, 1606141, 1606247, 1606353, 1606458, 1606564, 1606670, 1606776, 1606881, 1606987, 1607093, 1607198, 1607304, 1607410, 1607516, 1607621, 1607727, 1607833, 1607939, 1608044, 1608150, 1608256, 1608361, 1608467, 1608573, 1608679, 1608784, 1608890, 1608996, 1609102, 1609207, 1609313, 1609419, 1609525, 1609630, 1609736, 1609842, 1609948, 1610053, 1610159, 1610265, 1610371, 1610476, 1610582, 1610688, 1610794, 1610899, 1611005, 1611111, 1611217, 1611322, 1611428, 1611534, 1611640, 1611746, 1611851, 1611957, 1612063, 1612169, 1612274, 1612380, 1612486, 1612592, 1612698, 1612803, 1612909, 1613015, 1613121, 1613226, 1613332, 1613438, 1613544, 1613650, 1613755, 1613861, 1613967, 1614073, 1614179, 1614284, 1614390, 1614496, 1614602, 1614708, 1614813, 1614919, 1615025, 1615131, 1615237, 1615342, 1615448, 1615554, 1615660, 1615766, 1615871, 1615977, 1616083, 1616189, 1616295, 1616400, 1616506, 1616612, 1616718, 1616824, 1616930, 1617035, 1617141, 1617247, 1617353, 1617459, 1617565, 1617670, 1617776, 1617882, 1617988, 1618094, 1618200, 1618305, 1618411, 1618517, 1618623, 1618729, 1618835, 1618940, 1619046, 1619152, 1619258, 1619364, 1619470, 1619576, 1619681, 1619787, 1619893, 1619999, 1620105, 1620211, 1620317, 1620422, 1620528, 1620634, 1620740, 1620846, 1620952, 1621058, 1621163, 1621269, 1621375, 1621481, 1621587, 1621693, 1621799, 1621905, 1622010, 1622116, 1622222, 1622328, 1622434, 1622540, 1622646, 1622752, 1622858, 1622963, 1623069, 1623175, 1623281, 1623387, 1623493, 1623599, 1623705, 1623811, 1623916, 1624022, 1624128, 1624234, 1624340, 1624446, 1624552, 1624658, 1624764, 1624870, 1624975, 1625081, 1625187, 1625293, 1625399, 1625505, 1625611, 1625717, 1625823, 1625929, 1626035, 1626141, 1626246, 1626352, 1626458, 1626564, 1626670, 1626776, 1626882, 1626988, 1627094, 1627200, 1627306, 1627412, 1627518, 1627624, 1627730, 1627835, 1627941, 1628047, 1628153, 1628259, 1628365, 1628471, 1628577, 1628683, 1628789, 1628895, 1629001, 1629107, 1629213, 1629319, 1629425, 1629531, 1629637, 1629743, 1629849, 1629954, 1630060, 1630166, 1630272, 1630378, 1630484, 1630590, 1630696, 1630802, 1630908, 1631014, 1631120, 1631226, 1631332, 1631438, 1631544, 1631650, 1631756, 1631862, 1631968, 1632074, 1632180, 1632286, 1632392, 1632498, 1632604, 1632710, 1632816, 1632922, 1633028, 1633134, 1633240, 1633346, 1633452, 1633558, 1633664, 1633770, 1633876, 1633982, 1634088, 1634194, 1634300, 1634406, 1634512, 1634618, 1634724, 1634830, 1634936, 1635042, 1635148, 1635254, 1635360, 1635466, 1635572, 1635678, 1635784, 1635890, 1635996, 1636102, 1636208, 1636314, 1636420, 1636526, 1636632, 1636738, 1636844, 1636950, 1637056, 1637162, 1637269, 1637375, 1637481, 1637587, 1637693, 1637799, 1637905, 1638011, 1638117, 1638223, 1638329, 1638435, 1638541, 1638647, 1638753, 1638859, 1638965, 1639071, 1639177, 1639283, 1639390, 1639496, 1639602, 1639708, 1639814, 1639920, 1640026, 1640132, 1640238, 1640344, 1640450, 1640556, 1640662, 1640768, 1640875, 1640981, 1641087, 1641193, 1641299, 1641405, 1641511, 1641617, 1641723, 1641829, 1641935, 1642041, 1642148, 1642254, 1642360, 1642466, 1642572, 1642678, 1642784, 1642890, 1642996, 1643102, 1643209, 1643315, 1643421, 1643527, 1643633, 1643739, 1643845, 1643951, 1644057, 1644163, 1644270, 1644376, 1644482, 1644588, 1644694, 1644800, 1644906, 1645012, 1645119, 1645225, 1645331, 1645437, 1645543, 1645649, 1645755, 1645861, 1645968, 1646074, 1646180, 1646286, 1646392, 1646498, 1646604, 1646710, 1646817, 1646923, 1647029, 1647135, 1647241, 1647347, 1647453, 1647560, 1647666, 1647772, 1647878, 1647984, 1648090, 1648197, 1648303, 1648409, 1648515, 1648621, 1648727, 1648834, 1648940, 1649046, 1649152, 1649258, 1649364, 1649470, 1649577, 1649683, 1649789, 1649895, 1650001, 1650108, 1650214, 1650320, 1650426, 1650532, 1650638, 1650745, 1650851, 1650957, 1651063, 1651169, 1651276, 1651382, 1651488, 1651594, 1651700, 1651806, 1651913, 1652019, 1652125, 1652231, 1652337, 1652444, 1652550, 1652656, 1652762, 1652868, 1652975, 1653081, 1653187, 1653293, 1653400, 1653506, 1653612, 1653718, 1653824, 1653931, 1654037, 1654143, 1654249, 1654355, 1654462, 1654568, 1654674, 1654780, 1654887, 1654993, 1655099, 1655205, 1655311, 1655418, 1655524, 1655630, 1655736, 1655843, 1655949, 1656055, 1656161, 1656268, 1656374, 1656480, 1656586, 1656693, 1656799, 1656905, 1657011, 1657118, 1657224, 1657330, 1657436, 1657543, 1657649, 1657755, 1657861, 1657968, 1658074, 1658180, 1658286, 1658393, 1658499, 1658605, 1658711, 1658818, 1658924, 1659030, 1659136, 1659243, 1659349, 1659455, 1659562, 1659668, 1659774, 1659880, 1659987, 1660093, 1660199, 1660306, 1660412, 1660518, 1660624, 1660731, 1660837, 1660943, 1661050, 1661156, 1661262, 1661368, 1661475, 1661581, 1661687, 1661794, 1661900, 1662006, 1662113, 1662219, 1662325, 1662431, 1662538, 1662644, 1662750, 1662857, 1662963, 1663069, 1663176, 1663282, 1663388, 1663495, 1663601, 1663707, 1663813, 1663920, 1664026, 1664132, 1664239, 1664345, 1664451, 1664558, 1664664, 1664770, 1664877, 1664983, 1665089, 1665196, 1665302, 1665408, 1665515, 1665621, 1665727, 1665834, 1665940, 1666046, 1666153, 1666259, 1666366, 1666472, 1666578, 1666685, 1666791, 1666897, 1667004, 1667110, 1667216, 1667323, 1667429, 1667535, 1667642, 1667748, 1667854, 1667961, 1668067, 1668174, 1668280, 1668386, 1668493, 1668599, 1668705, 1668812, 1668918, 1669025, 1669131, 1669237, 1669344, 1669450, 1669556, 1669663, 1669769, 1669876, 1669982, 1670088, 1670195, 1670301, 1670408, 1670514, 1670620, 1670727, 1670833, 1670939, 1671046, 1671152, 1671259, 1671365, 1671471, 1671578, 1671684, 1671791, 1671897, 1672003, 1672110, 1672216, 1672323, 1672429, 1672536, 1672642, 1672748, 1672855, 1672961, 1673068, 1673174, 1673280, 1673387, 1673493, 1673600, 1673706, 1673813, 1673919, 1674025, 1674132, 1674238, 1674345, 1674451, 1674558, 1674664, 1674770, 1674877, 1674983, 1675090, 1675196, 1675303, 1675409, 1675516, 1675622, 1675728, 1675835, 1675941, 1676048, 1676154, 1676261, 1676367, 1676474, 1676580, 1676686, 1676793, 1676899, 1677006, 1677112, 1677219, 1677325, 1677432, 1677538, 1677645, 1677751, 1677858, 1677964, 1678071, 1678177, 1678283, 1678390, 1678496, 1678603, 1678709, 1678816, 1678922, 1679029, 1679135, 1679242, 1679348, 1679455, 1679561, 1679668, 1679774, 1679881, 1679987, 1680094, 1680200, 1680307, 1680413, 1680520, 1680626, 1680733, 1680839, 1680946, 1681052, 1681159, 1681265, 1681372, 1681478, 1681585, 1681691, 1681798, 1681904, 1682011, 1682117, 1682224, 1682330, 1682437, 1682543, 1682650, 1682756, 1682863, 1682969, 1683076, 1683182, 1683289, 1683395, 1683502, 1683609, 1683715, 1683822, 1683928, 1684035, 1684141, 1684248, 1684354, 1684461, 1684567, 1684674, 1684780, 1684887, 1684994, 1685100, 1685207, 1685313, 1685420, 1685526, 1685633, 1685739, 1685846, 1685952, 1686059, 1686166, 1686272, 1686379, 1686485, 1686592, 1686698, 1686805, 1686911, 1687018, 1687125, 1687231, 1687338, 1687444, 1687551, 1687657, 1687764, 1687871, 1687977, 1688084, 1688190, 1688297, 1688404, 1688510, 1688617, 1688723, 1688830, 1688936, 1689043, 1689150, 1689256, 1689363, 1689469, 1689576, 1689683, 1689789, 1689896, 1690002, 1690109, 1690216, 1690322, 1690429, 1690535, 1690642, 1690749, 1690855, 1690962, 1691068, 1691175, 1691282, 1691388, 1691495, 1691601, 1691708, 1691815, 1691921, 1692028, 1692135, 1692241, 1692348, 1692454, 1692561, 1692668, 1692774, 1692881, 1692988, 1693094, 1693201, 1693307, 1693414, 1693521, 1693627, 1693734, 1693841, 1693947, 1694054, 1694160, 1694267, 1694374, 1694480, 1694587, 1694694, 1694800, 1694907, 1695014, 1695120, 1695227, 1695334, 1695440, 1695547, 1695654, 1695760, 1695867, 1695974, 1696080, 1696187, 1696294, 1696400, 1696507, 1696614, 1696720, 1696827, 1696934, 1697040, 1697147, 1697254, 1697360, 1697467, 1697574, 1697680, 1697787, 1697894, 1698000, 1698107, 1698214, 1698320, 1698427, 1698534, 1698640, 1698747, 1698854, 1698960, 1699067, 1699174, 1699281, 1699387, 1699494, 1699601, 1699707, 1699814, 1699921, 1700027, 1700134, 1700241, 1700348, 1700454, 1700561, 1700668, 1700774, 1700881, 1700988, 1701095, 1701201, 1701308, 1701415, 1701521, 1701628, 1701735, 1701842, 1701948, 1702055, 1702162, 1702268, 1702375, 1702482, 1702589, 1702695, 1702802, 1702909, 1703016, 1703122, 1703229, 1703336, 1703443, 1703549, 1703656, 1703763, 1703870, 1703976, 1704083, 1704190, 1704297, 1704403, 1704510, 1704617, 1704724, 1704830, 1704937, 1705044, 1705151, 1705257, 1705364, 1705471, 1705578, 1705684, 1705791, 1705898, 1706005, 1706111, 1706218, 1706325, 1706432, 1706538, 1706645, 1706752, 1706859, 1706966, 1707072, 1707179, 1707286, 1707393, 1707499, 1707606, 1707713, 1707820, 1707927, 1708033, 1708140, 1708247, 1708354, 1708461, 1708567, 1708674, 1708781, 1708888, 1708995, 1709101, 1709208, 1709315, 1709422, 1709529, 1709635, 1709742, 1709849, 1709956, 1710063, 1710169, 1710276, 1710383, 1710490, 1710597, 1710703, 1710810, 1710917, 1711024, 1711131, 1711238, 1711344, 1711451, 1711558, 1711665, 1711772, 1711879, 1711985, 1712092, 1712199, 1712306, 1712413, 1712519, 1712626, 1712733, 1712840, 1712947, 1713054, 1713161, 1713267, 1713374, 1713481, 1713588, 1713695, 1713802, 1713908, 1714015, 1714122, 1714229, 1714336, 1714443, 1714550, 1714656, 1714763, 1714870, 1714977, 1715084, 1715191, 1715298, 1715404, 1715511, 1715618, 1715725, 1715832, 1715939, 1716046, 1716153, 1716259, 1716366, 1716473, 1716580, 1716687, 1716794, 1716901, 1717008, 1717114, 1717221, 1717328, 1717435, 1717542, 1717649, 1717756, 1717863, 1717970, 1718076, 1718183, 1718290, 1718397, 1718504, 1718611, 1718718, 1718825, 1718932, 1719039, 1719145, 1719252, 1719359, 1719466, 1719573, 1719680, 1719787, 1719894, 1720001, 1720108, 1720215, 1720321, 1720428, 1720535, 1720642, 1720749, 1720856, 1720963, 1721070, 1721177, 1721284, 1721391, 1721498, 1721605, 1721712, 1721818, 1721925, 1722032, 1722139, 1722246, 1722353, 1722460, 1722567, 1722674, 1722781, 1722888, 1722995, 1723102, 1723209, 1723316, 1723423, 1723530, 1723636, 1723743, 1723850, 1723957, 1724064, 1724171, 1724278, 1724385, 1724492, 1724599, 1724706, 1724813, 1724920, 1725027, 1725134, 1725241, 1725348, 1725455, 1725562, 1725669, 1725776, 1725883, 1725990, 1726097, 1726204, 1726311, 1726418, 1726525, 1726632, 1726739, 1726846, 1726953, 1727060, 1727167, 1727274, 1727381, 1727488, 1727595, 1727702, 1727809, 1727916, 1728023, 1728130, 1728237, 1728344, 1728451, 1728558, 1728665, 1728772, 1728879, 1728986, 1729093, 1729200, 1729307, 1729414, 1729521, 1729628, 1729735, 1729842, 1729949, 1730056, 1730163, 1730270, 1730377, 1730484, 1730591, 1730698, 1730805, 1730912, 1731019, 1731126, 1731233, 1731340, 1731447, 1731554, 1731661, 1731768, 1731875, 1731982, 1732089, 1732196, 1732303, 1732410, 1732517, 1732625, 1732732, 1732839, 1732946, 1733053, 1733160, 1733267, 1733374, 1733481, 1733588, 1733695, 1733802, 1733909, 1734016, 1734123, 1734230, 1734337, 1734445, 1734552, 1734659, 1734766, 1734873, 1734980, 1735087, 1735194, 1735301, 1735408, 1735515, 1735622, 1735729, 1735836, 1735944, 1736051, 1736158, 1736265, 1736372, 1736479, 1736586, 1736693, 1736800, 1736907, 1737014, 1737122, 1737229, 1737336, 1737443, 1737550, 1737657, 1737764, 1737871, 1737978, 1738085, 1738193, 1738300, 1738407, 1738514, 1738621, 1738728, 1738835, 1738942, 1739049, 1739157, 1739264, 1739371, 1739478, 1739585, 1739692, 1739799, 1739906, 1740014, 1740121, 1740228, 1740335, 1740442, 1740549, 1740656, 1740763, 1740871, 1740978, 1741085, 1741192, 1741299, 1741406, 1741513, 1741621, 1741728, 1741835, 1741942, 1742049, 1742156, 1742263, 1742371, 1742478, 1742585, 1742692, 1742799, 1742906, 1743014, 1743121, 1743228, 1743335, 1743442, 1743549, 1743657, 1743764, 1743871, 1743978, 1744085, 1744192, 1744300, 1744407, 1744514, 1744621, 1744728, 1744835, 1744943, 1745050, 1745157, 1745264, 1745371, 1745478, 1745586, 1745693, 1745800, 1745907, 1746014, 1746122, 1746229, 1746336, 1746443, 1746550, 1746658, 1746765, 1746872, 1746979, 1747086, 1747194, 1747301, 1747408, 1747515, 1747622, 1747730, 1747837, 1747944, 1748051, 1748158, 1748266, 1748373, 1748480, 1748587, 1748694, 1748802, 1748909, 1749016, 1749123, 1749231, 1749338, 1749445, 1749552, 1749660, 1749767, 1749874, 1749981, 1750088, 1750196, 1750303, 1750410, 1750517, 1750625, 1750732, 1750839, 1750946, 1751054, 1751161, 1751268, 1751375, 1751483, 1751590, 1751697, 1751804, 1751912, 1752019, 1752126, 1752233, 1752341, 1752448, 1752555, 1752662, 1752770, 1752877, 1752984, 1753091, 1753199, 1753306, 1753413, 1753520, 1753628, 1753735, 1753842, 1753950, 1754057, 1754164, 1754271, 1754379, 1754486, 1754593, 1754700, 1754808, 1754915, 1755022, 1755130, 1755237, 1755344, 1755451, 1755559, 1755666, 1755773, 1755881, 1755988, 1756095, 1756203, 1756310, 1756417, 1756524, 1756632, 1756739, 1756846, 1756954, 1757061, 1757168, 1757276, 1757383, 1757490, 1757598, 1757705, 1757812, 1757919, 1758027, 1758134, 1758241, 1758349, 1758456, 1758563, 1758671, 1758778, 1758885, 1758993, 1759100, 1759207, 1759315, 1759422, 1759529, 1759637, 1759744, 1759851, 1759959, 1760066, 1760173, 1760281, 1760388, 1760495, 1760603, 1760710, 1760817, 1760925, 1761032, 1761139, 1761247, 1761354, 1761461, 1761569, 1761676, 1761784, 1761891, 1761998, 1762106, 1762213, 1762320, 1762428, 1762535, 1762642, 1762750, 1762857, 1762965, 1763072, 1763179, 1763287, 1763394, 1763501, 1763609, 1763716, 1763824, 1763931, 1764038, 1764146, 1764253, 1764360, 1764468, 1764575, 1764683, 1764790, 1764897, 1765005, 1765112, 1765220, 1765327, 1765434, 1765542, 1765649, 1765757, 1765864, 1765971, 1766079, 1766186, 1766294, 1766401, 1766508, 1766616, 1766723, 1766831, 1766938, 1767045, 1767153, 1767260, 1767368, 1767475, 1767582, 1767690, 1767797, 1767905, 1768012, 1768120, 1768227, 1768334, 1768442, 1768549, 1768657, 1768764, 1768872, 1768979, 1769086, 1769194, 1769301, 1769409, 1769516, 1769624, 1769731, 1769838, 1769946, 1770053, 1770161, 1770268, 1770376, 1770483, 1770591, 1770698, 1770805, 1770913, 1771020, 1771128, 1771235, 1771343, 1771450, 1771558, 1771665, 1771773, 1771880, 1771988, 1772095, 1772202, 1772310, 1772417, 1772525, 1772632, 1772740, 1772847, 1772955, 1773062, 1773170, 1773277, 1773385, 1773492, 1773600, 1773707, 1773815, 1773922, 1774030, 1774137, 1774245, 1774352, 1774460, 1774567, 1774675, 1774782, 1774889, 1774997, 1775104, 1775212, 1775319, 1775427, 1775534, 1775642, 1775749, 1775857, 1775964, 1776072, 1776180, 1776287, 1776395, 1776502, 1776610, 1776717, 1776825, 1776932, 1777040, 1777147, 1777255, 1777362, 1777470, 1777577, 1777685, 1777792, 1777900, 1778007, 1778115, 1778222, 1778330, 1778437, 1778545, 1778653, 1778760, 1778868, 1778975, 1779083, 1779190, 1779298, 1779405, 1779513, 1779620, 1779728, 1779835, 1779943, 1780051, 1780158, 1780266, 1780373, 1780481, 1780588, 1780696, 1780803, 1780911, 1781019, 1781126, 1781234, 1781341, 1781449, 1781556, 1781664, 1781772, 1781879, 1781987, 1782094, 1782202, 1782309, 1782417, 1782525, 1782632, 1782740, 1782847, 1782955, 1783062, 1783170, 1783278, 1783385, 1783493, 1783600, 1783708, 1783816, 1783923, 1784031, 1784138, 1784246, 1784353, 1784461, 1784569, 1784676, 1784784, 1784891, 1784999, 1785107, 1785214, 1785322, 1785429, 1785537, 1785645, 1785752, 1785860, 1785968, 1786075, 1786183, 1786290, 1786398, 1786506, 1786613, 1786721, 1786828, 1786936, 1787044, 1787151, 1787259, 1787367, 1787474, 1787582, 1787689, 1787797, 1787905, 1788012, 1788120, 1788228, 1788335, 1788443, 1788551, 1788658, 1788766, 1788873, 1788981, 1789089, 1789196, 1789304, 1789412, 1789519, 1789627, 1789735, 1789842, 1789950, 1790058, 1790165, 1790273, 1790381, 1790488, 1790596, 1790704, 1790811, 1790919, 1791027, 1791134, 1791242, 1791350, 1791457, 1791565, 1791673, 1791780, 1791888, 1791996, 1792103, 1792211, 1792319, 1792426, 1792534, 1792642, 1792749, 1792857, 1792965, 1793072, 1793180, 1793288, 1793395, 1793503, 1793611, 1793719, 1793826, 1793934, 1794042, 1794149, 1794257, 1794365, 1794472, 1794580, 1794688, 1794796, 1794903, 1795011, 1795119, 1795226, 1795334, 1795442, 1795550, 1795657, 1795765, 1795873, 1795980, 1796088, 1796196, 1796304, 1796411, 1796519, 1796627, 1796734, 1796842, 1796950, 1797058, 1797165, 1797273, 1797381, 1797489, 1797596, 1797704, 1797812, 1797919, 1798027, 1798135, 1798243, 1798350, 1798458, 1798566, 1798674, 1798781, 1798889, 1798997, 1799105, 1799212, 1799320, 1799428, 1799536, 1799643, 1799751, 1799859, 1799967, 1800074, 1800182, 1800290, 1800398, 1800506, 1800613, 1800721, 1800829, 1800937, 1801044, 1801152, 1801260, 1801368, 1801475, 1801583, 1801691, 1801799, 1801907, 1802014, 1802122, 1802230, 1802338, 1802446, 1802553, 1802661, 1802769, 1802877, 1802984, 1803092, 1803200, 1803308, 1803416, 1803523, 1803631, 1803739, 1803847, 1803955, 1804062, 1804170, 1804278, 1804386, 1804494, 1804601, 1804709, 1804817, 1804925, 1805033, 1805141, 1805248, 1805356, 1805464, 1805572, 1805680, 1805787, 1805895, 1806003, 1806111, 1806219, 1806327, 1806434, 1806542, 1806650, 1806758, 1806866, 1806974, 1807081, 1807189, 1807297, 1807405, 1807513, 1807621, 1807728, 1807836, 1807944, 1808052, 1808160, 1808268, 1808376, 1808483, 1808591, 1808699, 1808807, 1808915, 1809023, 1809130, 1809238, 1809346, 1809454, 1809562, 1809670, 1809778, 1809886, 1809993, 1810101, 1810209, 1810317, 1810425, 1810533, 1810641, 1810748, 1810856, 1810964, 1811072, 1811180, 1811288, 1811396, 1811504, 1811612, 1811719, 1811827, 1811935, 1812043, 1812151, 1812259, 1812367, 1812475, 1812583, 1812690, 1812798, 1812906, 1813014, 1813122, 1813230, 1813338, 1813446, 1813554, 1813661, 1813769, 1813877, 1813985, 1814093, 1814201, 1814309, 1814417, 1814525, 1814633, 1814741, 1814849, 1814956, 1815064, 1815172, 1815280, 1815388, 1815496, 1815604, 1815712, 1815820, 1815928, 1816036, 1816144, 1816252, 1816359, 1816467, 1816575, 1816683, 1816791, 1816899, 1817007, 1817115, 1817223, 1817331, 1817439, 1817547, 1817655, 1817763, 1817871, 1817979, 1818087, 1818195, 1818302, 1818410, 1818518, 1818626, 1818734, 1818842, 1818950, 1819058, 1819166, 1819274, 1819382, 1819490, 1819598, 1819706, 1819814, 1819922, 1820030, 1820138, 1820246, 1820354, 1820462, 1820570, 1820678, 1820786, 1820894, 1821002, 1821110, 1821218, 1821326, 1821434, 1821542, 1821650, 1821758, 1821866, 1821974, 1822082, 1822190, 1822298, 1822406, 1822514, 1822622, 1822730, 1822838, 1822946, 1823054, 1823162, 1823270, 1823378, 1823486, 1823594, 1823702, 1823810, 1823918, 1824026, 1824134, 1824242, 1824350, 1824458, 1824566, 1824674, 1824782, 1824890, 1824998, 1825106, 1825214, 1825322, 1825430, 1825538, 1825646, 1825754, 1825862, 1825970, 1826078, 1826186, 1826294, 1826402, 1826510, 1826618, 1826726, 1826834, 1826942, 1827051, 1827159, 1827267, 1827375, 1827483, 1827591, 1827699, 1827807, 1827915, 1828023, 1828131, 1828239, 1828347, 1828455, 1828563, 1828671, 1828779, 1828887, 1828996, 1829104, 1829212, 1829320, 1829428, 1829536, 1829644, 1829752, 1829860, 1829968, 1830076, 1830184, 1830292, 1830401, 1830509, 1830617, 1830725, 1830833, 1830941, 1831049, 1831157, 1831265, 1831373, 1831481, 1831589, 1831698, 1831806, 1831914, 1832022, 1832130, 1832238, 1832346, 1832454, 1832562, 1832670, 1832779, 1832887, 1832995, 1833103, 1833211, 1833319, 1833427, 1833535, 1833643, 1833752, 1833860, 1833968, 1834076, 1834184, 1834292, 1834400, 1834508, 1834617, 1834725, 1834833, 1834941, 1835049, 1835157, 1835265, 1835374, 1835482, 1835590, 1835698, 1835806, 1835914, 1836022, 1836130, 1836239, 1836347, 1836455, 1836563, 1836671, 1836779, 1836888, 1836996, 1837104, 1837212, 1837320, 1837428, 1837536, 1837645, 1837753, 1837861, 1837969, 1838077, 1838185, 1838294, 1838402, 1838510, 1838618, 1838726, 1838834, 1838943, 1839051, 1839159, 1839267, 1839375, 1839483, 1839592, 1839700, 1839808, 1839916, 1840024, 1840133, 1840241, 1840349, 1840457, 1840565, 1840673, 1840782, 1840890, 1840998, 1841106, 1841214, 1841323, 1841431, 1841539, 1841647, 1841755, 1841864, 1841972, 1842080, 1842188, 1842296, 1842405, 1842513, 1842621, 1842729, 1842838, 1842946, 1843054, 1843162, 1843270, 1843379, 1843487, 1843595, 1843703, 1843812, 1843920, 1844028, 1844136, 1844244, 1844353, 1844461, 1844569, 1844677, 1844786, 1844894, 1845002, 1845110, 1845219, 1845327, 1845435, 1845543, 1845651, 1845760, 1845868, 1845976, 1846084, 1846193, 1846301, 1846409, 1846517, 1846626, 1846734, 1846842, 1846950, 1847059, 1847167, 1847275, 1847384, 1847492, 1847600, 1847708, 1847817, 1847925, 1848033, 1848141, 1848250, 1848358, 1848466, 1848574, 1848683, 1848791, 1848899, 1849008, 1849116, 1849224, 1849332, 1849441, 1849549, 1849657, 1849766, 1849874, 1849982, 1850090, 1850199, 1850307, 1850415, 1850524, 1850632, 1850740, 1850848, 1850957, 1851065, 1851173, 1851282, 1851390, 1851498, 1851607, 1851715, 1851823, 1851932, 1852040, 1852148, 1852256, 1852365, 1852473, 1852581, 1852690, 1852798, 1852906, 1853015, 1853123, 1853231, 1853340, 1853448, 1853556, 1853665, 1853773, 1853881, 1853990, 1854098, 1854206, 1854315, 1854423, 1854531, 1854640, 1854748, 1854856, 1854965, 1855073, 1855181, 1855290, 1855398, 1855506, 1855615, 1855723, 1855831, 1855940, 1856048, 1856156, 1856265, 1856373, 1856482, 1856590, 1856698, 1856807, 1856915, 1857023, 1857132, 1857240, 1857348, 1857457, 1857565, 1857674, 1857782, 1857890, 1857999, 1858107, 1858215, 1858324, 1858432, 1858541, 1858649, 1858757, 1858866, 1858974, 1859082, 1859191, 1859299, 1859408, 1859516, 1859624, 1859733, 1859841, 1859950, 1860058, 1860166, 1860275, 1860383, 1860492, 1860600, 1860708, 1860817, 1860925, 1861034, 1861142, 1861250, 1861359, 1861467, 1861576, 1861684, 1861792, 1861901, 1862009, 1862118, 1862226, 1862335, 1862443, 1862551, 1862660, 1862768, 1862877, 1862985, 1863094, 1863202, 1863310, 1863419, 1863527, 1863636, 1863744, 1863853, 1863961, 1864069, 1864178, 1864286, 1864395, 1864503, 1864612, 1864720, 1864829, 1864937, 1865045, 1865154, 1865262, 1865371, 1865479, 1865588, 1865696, 1865805, 1865913, 1866022, 1866130, 1866238, 1866347, 1866455, 1866564, 1866672, 1866781, 1866889, 1866998, 1867106, 1867215, 1867323, 1867432, 1867540, 1867649, 1867757, 1867865, 1867974, 1868082, 1868191, 1868299, 1868408, 1868516, 1868625, 1868733, 1868842, 1868950, 1869059, 1869167, 1869276, 1869384, 1869493, 1869601, 1869710, 1869818, 1869927, 1870035, 1870144, 1870252, 1870361, 1870469, 1870578, 1870686, 1870795, 1870903, 1871012, 1871120, 1871229, 1871337, 1871446, 1871554, 1871663, 1871771, 1871880, 1871988, 1872097, 1872206, 1872314, 1872423, 1872531, 1872640, 1872748, 1872857, 1872965, 1873074, 1873182, 1873291, 1873399, 1873508, 1873616, 1873725, 1873834, 1873942, 1874051, 1874159, 1874268, 1874376, 1874485, 1874593, 1874702, 1874810, 1874919, 1875028, 1875136, 1875245, 1875353, 1875462, 1875570, 1875679, 1875787, 1875896, 1876005, 1876113, 1876222, 1876330, 1876439, 1876547, 1876656, 1876765, 1876873, 1876982, 1877090, 1877199, 1877307, 1877416, 1877525, 1877633, 1877742, 1877850, 1877959, 1878068, 1878176, 1878285, 1878393, 1878502, 1878610, 1878719, 1878828, 1878936, 1879045, 1879153, 1879262, 1879371, 1879479, 1879588, 1879696, 1879805, 1879914, 1880022, 1880131, 1880239, 1880348, 1880457, 1880565, 1880674, 1880783, 1880891, 1881000, 1881108, 1881217, 1881326, 1881434, 1881543, 1881652, 1881760, 1881869, 1881977, 1882086, 1882195, 1882303, 1882412, 1882521, 1882629, 1882738, 1882846, 1882955, 1883064, 1883172, 1883281, 1883390, 1883498, 1883607, 1883716, 1883824, 1883933, 1884042, 1884150, 1884259, 1884367, 1884476, 1884585, 1884693, 1884802, 1884911, 1885019, 1885128, 1885237, 1885345, 1885454, 1885563, 1885671, 1885780, 1885889, 1885997, 1886106, 1886215, 1886323, 1886432, 1886541, 1886649, 1886758, 1886867, 1886975, 1887084, 1887193, 1887302, 1887410, 1887519, 1887628, 1887736, 1887845, 1887954, 1888062, 1888171, 1888280, 1888388, 1888497, 1888606, 1888715, 1888823, 1888932, 1889041, 1889149, 1889258, 1889367, 1889475, 1889584, 1889693, 1889802, 1889910, 1890019, 1890128, 1890236, 1890345, 1890454, 1890563, 1890671, 1890780, 1890889, 1890997, 1891106, 1891215, 1891324, 1891432, 1891541, 1891650, 1891759, 1891867, 1891976, 1892085, 1892193, 1892302, 1892411, 1892520, 1892628, 1892737, 1892846, 1892955, 1893063, 1893172, 1893281, 1893390, 1893498, 1893607, 1893716, 1893825, 1893933, 1894042, 1894151, 1894260, 1894368, 1894477, 1894586, 1894695, 1894803, 1894912, 1895021, 1895130, 1895239, 1895347, 1895456, 1895565, 1895674, 1895782, 1895891, 1896000, 1896109, 1896217, 1896326, 1896435, 1896544, 1896653, 1896761, 1896870, 1896979, 1897088, 1897197, 1897305, 1897414, 1897523, 1897632, 1897740, 1897849, 1897958, 1898067, 1898176, 1898284, 1898393, 1898502, 1898611, 1898720, 1898828, 1898937, 1899046, 1899155, 1899264, 1899373, 1899481, 1899590, 1899699, 1899808, 1899917, 1900025, 1900134, 1900243, 1900352, 1900461, 1900570, 1900678, 1900787, 1900896, 1901005, 1901114, 1901222, 1901331, 1901440, 1901549, 1901658, 1901767, 1901876, 1901984, 1902093, 1902202, 1902311, 1902420, 1902529, 1902637, 1902746, 1902855, 1902964, 1903073, 1903182, 1903290, 1903399, 1903508, 1903617, 1903726, 1903835, 1903944, 1904052, 1904161, 1904270, 1904379, 1904488, 1904597, 1904706, 1904815, 1904923, 1905032, 1905141, 1905250, 1905359, 1905468, 1905577, 1905686, 1905794, 1905903, 1906012, 1906121, 1906230, 1906339, 1906448, 1906557, 1906666, 1906774, 1906883, 1906992, 1907101, 1907210, 1907319, 1907428, 1907537, 1907646, 1907754, 1907863, 1907972, 1908081, 1908190, 1908299, 1908408, 1908517, 1908626, 1908735, 1908844, 1908952, 1909061, 1909170, 1909279, 1909388, 1909497, 1909606, 1909715, 1909824, 1909933, 1910042, 1910151, 1910259, 1910368, 1910477, 1910586, 1910695, 1910804, 1910913, 1911022, 1911131, 1911240, 1911349, 1911458, 1911567, 1911676, 1911785, 1911893, 1912002, 1912111, 1912220, 1912329, 1912438, 1912547, 1912656, 1912765, 1912874, 1912983, 1913092, 1913201, 1913310, 1913419, 1913528, 1913637, 1913746, 1913855, 1913964, 1914073, 1914182, 1914291, 1914400, 1914508, 1914617, 1914726, 1914835, 1914944, 1915053, 1915162, 1915271, 1915380, 1915489, 1915598, 1915707, 1915816, 1915925, 1916034, 1916143, 1916252, 1916361, 1916470, 1916579, 1916688, 1916797, 1916906, 1917015, 1917124, 1917233, 1917342, 1917451, 1917560, 1917669, 1917778, 1917887, 1917996, 1918105, 1918214, 1918323, 1918432, 1918541, 1918650, 1918759, 1918868, 1918977, 1919086, 1919195, 1919304, 1919413, 1919522, 1919631, 1919740, 1919849, 1919959, 1920068, 1920177, 1920286, 1920395, 1920504, 1920613, 1920722, 1920831, 1920940, 1921049, 1921158, 1921267, 1921376, 1921485, 1921594, 1921703, 1921812, 1921921, 1922030, 1922139, 1922248, 1922357, 1922466, 1922576, 1922685, 1922794, 1922903, 1923012, 1923121, 1923230, 1923339, 1923448, 1923557, 1923666, 1923775, 1923884, 1923993, 1924102, 1924212, 1924321, 1924430, 1924539, 1924648, 1924757, 1924866, 1924975, 1925084, 1925193, 1925302, 1925411, 1925521, 1925630, 1925739, 1925848, 1925957, 1926066, 1926175, 1926284, 1926393, 1926502, 1926611, 1926721, 1926830, 1926939, 1927048, 1927157, 1927266, 1927375, 1927484, 1927593, 1927703, 1927812, 1927921, 1928030, 1928139, 1928248, 1928357, 1928466, 1928575, 1928685, 1928794, 1928903, 1929012, 1929121, 1929230, 1929339, 1929448, 1929558, 1929667, 1929776, 1929885, 1929994, 1930103, 1930212, 1930322, 1930431, 1930540, 1930649, 1930758, 1930867, 1930976, 1931086, 1931195, 1931304, 1931413, 1931522, 1931631, 1931740, 1931850, 1931959, 1932068, 1932177, 1932286, 1932395, 1932505, 1932614, 1932723, 1932832, 1932941, 1933050, 1933160, 1933269, 1933378, 1933487, 1933596, 1933705, 1933815, 1933924, 1934033, 1934142, 1934251, 1934360, 1934470, 1934579, 1934688, 1934797, 1934906, 1935016, 1935125, 1935234, 1935343, 1935452, 1935562, 1935671, 1935780, 1935889, 1935998, 1936108, 1936217, 1936326, 1936435, 1936544, 1936654, 1936763, 1936872, 1936981, 1937090, 1937200, 1937309, 1937418, 1937527, 1937636, 1937746, 1937855, 1937964, 1938073, 1938183, 1938292, 1938401, 1938510, 1938619, 1938729, 1938838, 1938947, 1939056, 1939166, 1939275, 1939384, 1939493, 1939603, 1939712, 1939821, 1939930, 1940039, 1940149, 1940258, 1940367, 1940476, 1940586, 1940695, 1940804, 1940913, 1941023, 1941132, 1941241, 1941350, 1941460, 1941569, 1941678, 1941787, 1941897, 1942006, 1942115, 1942225, 1942334, 1942443, 1942552, 1942662, 1942771, 1942880, 1942989, 1943099, 1943208, 1943317, 1943427, 1943536, 1943645, 1943754, 1943864, 1943973, 1944082, 1944191, 1944301, 1944410, 1944519, 1944629, 1944738, 1944847, 1944957, 1945066, 1945175, 1945284, 1945394, 1945503, 1945612, 1945722, 1945831, 1945940, 1946050, 1946159, 1946268, 1946377, 1946487, 1946596, 1946705, 1946815, 1946924, 1947033, 1947143, 1947252, 1947361, 1947471, 1947580, 1947689, 1947799, 1947908, 1948017, 1948127, 1948236, 1948345, 1948455, 1948564, 1948673, 1948783, 1948892, 1949001, 1949111, 1949220, 1949329, 1949439, 1949548, 1949657, 1949767, 1949876, 1949985, 1950095, 1950204, 1950313, 1950423, 1950532, 1950641, 1950751, 1950860, 1950969, 1951079, 1951188, 1951298, 1951407, 1951516, 1951626, 1951735, 1951844, 1951954, 1952063, 1952172, 1952282, 1952391, 1952501, 1952610, 1952719, 1952829, 1952938, 1953047, 1953157, 1953266, 1953376, 1953485, 1953594, 1953704, 1953813, 1953923, 1954032, 1954141, 1954251, 1954360, 1954469, 1954579, 1954688, 1954798, 1954907, 1955016, 1955126, 1955235, 1955345, 1955454, 1955563, 1955673, 1955782, 1955892, 1956001, 1956111, 1956220, 1956329, 1956439, 1956548, 1956658, 1956767, 1956876, 1956986, 1957095, 1957205, 1957314, 1957424, 1957533, 1957642, 1957752, 1957861, 1957971, 1958080, 1958190, 1958299, 1958408, 1958518, 1958627, 1958737, 1958846, 1958956, 1959065, 1959174, 1959284, 1959393, 1959503, 1959612, 1959722, 1959831, 1959941, 1960050, 1960160, 1960269, 1960378, 1960488, 1960597, 1960707, 1960816, 1960926, 1961035, 1961145, 1961254, 1961364, 1961473, 1961583, 1961692, 1961801, 1961911, 1962020, 1962130, 1962239, 1962349, 1962458, 1962568, 1962677, 1962787, 1962896, 1963006, 1963115, 1963225, 1963334, 1963444, 1963553, 1963663, 1963772, 1963882, 1963991, 1964101, 1964210, 1964320, 1964429, 1964539, 1964648, 1964758, 1964867, 1964977, 1965086, 1965196, 1965305, 1965415, 1965524, 1965634, 1965743, 1965853, 1965962, 1966072, 1966181, 1966291, 1966400, 1966510, 1966619, 1966729, 1966838, 1966948, 1967057, 1967167, 1967277, 1967386, 1967496, 1967605, 1967715, 1967824, 1967934, 1968043, 1968153, 1968262, 1968372, 1968481, 1968591, 1968701, 1968810, 1968920, 1969029, 1969139, 1969248, 1969358, 1969467, 1969577, 1969686, 1969796, 1969906, 1970015, 1970125, 1970234, 1970344, 1970453, 1970563, 1970673, 1970782, 1970892, 1971001, 1971111, 1971220, 1971330, 1971440, 1971549, 1971659, 1971768, 1971878, 1971987, 1972097, 1972207, 1972316, 1972426, 1972535, 1972645, 1972754, 1972864, 1972974, 1973083, 1973193, 1973302, 1973412, 1973522, 1973631, 1973741, 1973850, 1973960, 1974070, 1974179, 1974289, 1974398, 1974508, 1974618, 1974727, 1974837, 1974946, 1975056, 1975166, 1975275, 1975385, 1975495, 1975604, 1975714, 1975823, 1975933, 1976043, 1976152, 1976262, 1976372, 1976481, 1976591, 1976700, 1976810, 1976920, 1977029, 1977139, 1977249, 1977358, 1977468, 1977577, 1977687, 1977797, 1977906, 1978016, 1978126, 1978235, 1978345, 1978455, 1978564, 1978674, 1978784, 1978893, 1979003, 1979113, 1979222, 1979332, 1979441, 1979551, 1979661, 1979770, 1979880, 1979990, 1980099, 1980209, 1980319, 1980428, 1980538, 1980648, 1980757, 1980867, 1980977, 1981087, 1981196, 1981306, 1981416, 1981525, 1981635, 1981745, 1981854, 1981964, 1982074, 1982183, 1982293, 1982403, 1982512, 1982622, 1982732, 1982841, 1982951, 1983061, 1983171, 1983280, 1983390, 1983500, 1983609, 1983719, 1983829, 1983938, 1984048, 1984158, 1984268, 1984377, 1984487, 1984597, 1984706, 1984816, 1984926, 1985036, 1985145, 1985255, 1985365, 1985474, 1985584, 1985694, 1985804, 1985913, 1986023, 1986133, 1986243, 1986352, 1986462, 1986572, 1986681, 1986791, 1986901, 1987011, 1987120, 1987230, 1987340, 1987450, 1987559, 1987669, 1987779, 1987889, 1987998, 1988108, 1988218, 1988328, 1988437, 1988547, 1988657, 1988767, 1988876, 1988986, 1989096, 1989206, 1989315, 1989425, 1989535, 1989645, 1989755, 1989864, 1989974, 1990084, 1990194, 1990303, 1990413, 1990523, 1990633, 1990742, 1990852, 1990962, 1991072, 1991182, 1991291, 1991401, 1991511, 1991621, 1991731, 1991840, 1991950, 1992060, 1992170, 1992279, 1992389, 1992499, 1992609, 1992719, 1992828, 1992938, 1993048, 1993158, 1993268, 1993377, 1993487, 1993597, 1993707, 1993817, 1993927, 1994036, 1994146, 1994256, 1994366, 1994476, 1994585, 1994695, 1994805, 1994915, 1995025, 1995135, 1995244, 1995354, 1995464, 1995574, 1995684, 1995794, 1995903, 1996013, 1996123, 1996233, 1996343, 1996453, 1996562, 1996672, 1996782, 1996892, 1997002, 1997112, 1997221, 1997331, 1997441, 1997551, 1997661, 1997771, 1997881, 1997990, 1998100, 1998210, 1998320, 1998430, 1998540, 1998650, 1998759, 1998869, 1998979, 1999089, 1999199, 1999309, 1999419, 1999528, 1999638, 1999748, 1999858, 1999968, 2000078, 2000188, 2000298, 2000407, 2000517, 2000627, 2000737, 2000847, 2000957, 2001067, 2001177, 2001287, 2001396, 2001506, 2001616, 2001726, 2001836, 2001946, 2002056, 2002166, 2002276, 2002385, 2002495, 2002605, 2002715, 2002825, 2002935, 2003045, 2003155, 2003265, 2003375, 2003485, 2003594, 2003704, 2003814, 2003924, 2004034, 2004144, 2004254, 2004364, 2004474, 2004584, 2004694, 2004804, 2004914, 2005023, 2005133, 2005243, 2005353, 2005463, 2005573, 2005683, 2005793, 2005903, 2006013, 2006123, 2006233, 2006343, 2006453, 2006563, 2006673, 2006782, 2006892, 2007002, 2007112, 2007222, 2007332, 2007442, 2007552, 2007662, 2007772, 2007882, 2007992, 2008102, 2008212, 2008322, 2008432, 2008542, 2008652, 2008762, 2008872, 2008982, 2009092, 2009202, 2009312, 2009422, 2009532, 2009641, 2009751, 2009861, 2009971, 2010081, 2010191, 2010301, 2010411, 2010521, 2010631, 2010741, 2010851, 2010961, 2011071, 2011181, 2011291, 2011401, 2011511, 2011621, 2011731, 2011841, 2011951, 2012061, 2012171, 2012281, 2012391, 2012501, 2012611, 2012721, 2012831, 2012941, 2013051, 2013161, 2013271, 2013381, 2013491, 2013601, 2013711, 2013822, 2013932, 2014042, 2014152, 2014262, 2014372, 2014482, 2014592, 2014702, 2014812, 2014922, 2015032, 2015142, 2015252, 2015362, 2015472, 2015582, 2015692, 2015802, 2015912, 2016022, 2016132, 2016242, 2016352, 2016462, 2016572, 2016682, 2016793, 2016903, 2017013, 2017123, 2017233, 2017343, 2017453, 2017563, 2017673, 2017783, 2017893, 2018003, 2018113, 2018223, 2018333, 2018443, 2018554, 2018664, 2018774, 2018884, 2018994, 2019104, 2019214, 2019324, 2019434, 2019544, 2019654, 2019764, 2019874, 2019985, 2020095, 2020205, 2020315, 2020425, 2020535, 2020645, 2020755, 2020865, 2020975, 2021086, 2021196, 2021306, 2021416, 2021526, 2021636, 2021746, 2021856, 2021966, 2022076, 2022187, 2022297, 2022407, 2022517, 2022627, 2022737, 2022847, 2022957, 2023067, 2023178, 2023288, 2023398, 2023508, 2023618, 2023728, 2023838, 2023948, 2024059, 2024169, 2024279, 2024389, 2024499, 2024609, 2024719, 2024830, 2024940, 2025050, 2025160, 2025270, 2025380, 2025490, 2025601, 2025711, 2025821, 2025931, 2026041, 2026151, 2026261, 2026372, 2026482, 2026592, 2026702, 2026812, 2026922, 2027033, 2027143, 2027253, 2027363, 2027473, 2027583, 2027694, 2027804, 2027914, 2028024, 2028134, 2028244, 2028355, 2028465, 2028575, 2028685, 2028795, 2028905, 2029016, 2029126, 2029236, 2029346, 2029456, 2029567, 2029677, 2029787, 2029897, 2030007, 2030118, 2030228, 2030338, 2030448, 2030558, 2030669, 2030779, 2030889, 2030999, 2031109, 2031220, 2031330, 2031440, 2031550, 2031660, 2031771, 2031881, 2031991, 2032101, 2032211, 2032322, 2032432, 2032542, 2032652, 2032763, 2032873, 2032983, 2033093, 2033203, 2033314, 2033424, 2033534, 2033644, 2033755, 2033865, 2033975, 2034085, 2034196, 2034306, 2034416, 2034526, 2034636, 2034747, 2034857, 2034967, 2035077, 2035188, 2035298, 2035408, 2035518, 2035629, 2035739, 2035849, 2035959, 2036070, 2036180, 2036290, 2036401, 2036511, 2036621, 2036731, 2036842, 2036952, 2037062, 2037172, 2037283, 2037393, 2037503, 2037613, 2037724, 2037834, 2037944, 2038055, 2038165, 2038275, 2038385, 2038496, 2038606, 2038716, 2038827, 2038937, 2039047, 2039157, 2039268, 2039378, 2039488, 2039599, 2039709, 2039819, 2039929, 2040040, 2040150, 2040260, 2040371, 2040481, 2040591, 2040702, 2040812, 2040922, 2041033, 2041143, 2041253, 2041363, 2041474, 2041584, 2041694, 2041805, 2041915, 2042025, 2042136, 2042246, 2042356, 2042467, 2042577, 2042687, 2042798, 2042908, 2043018, 2043129, 2043239, 2043349, 2043460, 2043570, 2043680, 2043791, 2043901, 2044011, 2044122, 2044232, 2044342, 2044453, 2044563, 2044673, 2044784, 2044894, 2045004, 2045115, 2045225, 2045335, 2045446, 2045556, 2045667, 2045777, 2045887, 2045998, 2046108, 2046218, 2046329, 2046439, 2046549, 2046660, 2046770, 2046881, 2046991, 2047101, 2047212, 2047322, 2047432, 2047543, 2047653, 2047764, 2047874, 2047984, 2048095, 2048205, 2048316, 2048426, 2048536, 2048647, 2048757, 2048867, 2048978, 2049088, 2049199, 2049309, 2049419, 2049530, 2049640, 2049751, 2049861, 2049971, 2050082, 2050192, 2050303, 2050413, 2050523, 2050634, 2050744, 2050855, 2050965, 2051076, 2051186, 2051296, 2051407, 2051517, 2051628, 2051738, 2051848, 2051959, 2052069, 2052180, 2052290, 2052401, 2052511, 2052621, 2052732, 2052842, 2052953, 2053063, 2053174, 2053284, 2053395, 2053505, 2053615, 2053726, 2053836, 2053947, 2054057, 2054168, 2054278, 2054389, 2054499, 2054609, 2054720, 2054830, 2054941, 2055051, 2055162, 2055272, 2055383, 2055493, 2055604, 2055714, 2055825, 2055935, 2056045, 2056156, 2056266, 2056377, 2056487, 2056598, 2056708, 2056819, 2056929, 2057040, 2057150, 2057261, 2057371, 2057482, 2057592, 2057703, 2057813, 2057924, 2058034, 2058145, 2058255, 2058366, 2058476, 2058587, 2058697, 2058808, 2058918, 2059029, 2059139, 2059250, 2059360, 2059471, 2059581, 2059692, 2059802, 2059913, 2060023, 2060134, 2060244, 2060355, 2060465, 2060576, 2060686, 2060797, 2060907, 2061018, 2061128, 2061239, 2061349, 2061460, 2061570, 2061681, 2061791, 2061902, 2062012, 2062123, 2062234, 2062344, 2062455, 2062565, 2062676, 2062786, 2062897, 2063007, 2063118, 2063228, 2063339, 2063449, 2063560, 2063671, 2063781, 2063892, 2064002, 2064113, 2064223, 2064334, 2064444, 2064555, 2064666, 2064776, 2064887, 2064997, 2065108, 2065218, 2065329, 2065440, 2065550, 2065661, 2065771, 2065882, 2065992, 2066103, 2066214, 2066324, 2066435, 2066545, 2066656, 2066766, 2066877, 2066988, 2067098, 2067209, 2067319, 2067430, 2067541, 2067651, 2067762, 2067872, 2067983, 2068094, 2068204, 2068315, 2068425, 2068536, 2068647, 2068757, 2068868, 2068978, 2069089, 2069200, 2069310, 2069421, 2069531, 2069642, 2069753, 2069863, 2069974, 2070084, 2070195, 2070306, 2070416, 2070527, 2070638, 2070748, 2070859, 2070969, 2071080, 2071191, 2071301, 2071412, 2071523, 2071633, 2071744, 2071854, 2071965, 2072076, 2072186, 2072297, 2072408, 2072518, 2072629, 2072740, 2072850, 2072961, 2073072, 2073182, 2073293, 2073403, 2073514, 2073625, 2073735, 2073846, 2073957, 2074067, 2074178, 2074289, 2074399, 2074510, 2074621, 2074731, 2074842, 2074953, 2075063, 2075174, 2075285, 2075395, 2075506, 2075617, 2075727, 2075838, 2075949, 2076059, 2076170, 2076281, 2076392, 2076502, 2076613, 2076724, 2076834, 2076945, 2077056, 2077166, 2077277, 2077388, 2077498, 2077609, 2077720, 2077831, 2077941, 2078052, 2078163, 2078273, 2078384, 2078495, 2078605, 2078716, 2078827, 2078938, 2079048, 2079159, 2079270, 2079380, 2079491, 2079602, 2079713, 2079823, 2079934, 2080045, 2080155, 2080266, 2080377, 2080488, 2080598, 2080709, 2080820, 2080931, 2081041, 2081152, 2081263, 2081373, 2081484, 2081595, 2081706, 2081816, 2081927, 2082038, 2082149, 2082259, 2082370, 2082481, 2082592, 2082702, 2082813, 2082924, 2083035, 2083145, 2083256, 2083367, 2083478, 2083588, 2083699, 2083810, 2083921, 2084031, 2084142, 2084253, 2084364, 2084475, 2084585, 2084696, 2084807, 2084918, 2085028, 2085139, 2085250, 2085361, 2085472, 2085582, 2085693, 2085804, 2085915, 2086025, 2086136, 2086247, 2086358, 2086469, 2086579, 2086690, 2086801, 2086912, 2087023, 2087133, 2087244, 2087355, 2087466, 2087577, 2087687, 2087798, 2087909, 2088020, 2088131, 2088241, 2088352, 2088463, 2088574, 2088685, 2088795, 2088906, 2089017, 2089128, 2089239, 2089350, 2089460, 2089571, 2089682, 2089793, 2089904, 2090015, 2090125, 2090236, 2090347, 2090458, 2090569, 2090679, 2090790, 2090901, 2091012, 2091123, 2091234, 2091345, 2091455, 2091566, 2091677, 2091788, 2091899, 2092010, 2092120, 2092231, 2092342, 2092453, 2092564, 2092675, 2092786, 2092896, 2093007, 2093118, 2093229, 2093340, 2093451, 2093562, 2093672, 2093783, 2093894, 2094005, 2094116, 2094227, 2094338, 2094449, 2094559, 2094670, 2094781, 2094892, 2095003, 2095114, 2095225, 2095336, 2095446, 2095557, 2095668, 2095779, 2095890, 2096001, 2096112, 2096223, 2096334, 2096445, 2096555, 2096666, 2096777, 2096888, 2096999, 2097110, 2097221, 2097332, 2097443, 2097554, 2097664, 2097775, 2097886, 2097997, 2098108, 2098219, 2098330, 2098441, 2098552, 2098663, 2098774, 2098884, 2098995, 2099106, 2099217, 2099328, 2099439, 2099550, 2099661, 2099772, 2099883, 2099994, 2100105, 2100216, 2100327, 2100438, 2100548, 2100659, 2100770, 2100881, 2100992, 2101103, 2101214, 2101325, 2101436, 2101547, 2101658, 2101769, 2101880, 2101991, 2102102, 2102213, 2102324, 2102435, 2102546, 2102657, 2102767, 2102878, 2102989, 2103100, 2103211, 2103322, 2103433, 2103544, 2103655, 2103766, 2103877, 2103988, 2104099, 2104210, 2104321, 2104432, 2104543, 2104654, 2104765, 2104876, 2104987, 2105098, 2105209, 2105320, 2105431, 2105542, 2105653, 2105764, 2105875, 2105986, 2106097, 2106208, 2106319, 2106430, 2106541, 2106652, 2106763, 2106874, 2106985, 2107096, 2107207, 2107318, 2107429, 2107540, 2107651, 2107762, 2107873, 2107984, 2108095, 2108206, 2108317, 2108428, 2108539, 2108650, 2108761, 2108872, 2108983, 2109094, 2109205, 2109316, 2109427, 2109538, 2109649, 2109760, 2109872, 2109983, 2110094, 2110205, 2110316, 2110427, 2110538, 2110649, 2110760, 2110871, 2110982, 2111093, 2111204, 2111315, 2111426, 2111537, 2111648, 2111759, 2111870, 2111981, 2112093, 2112204, 2112315, 2112426, 2112537, 2112648, 2112759, 2112870, 2112981, 2113092, 2113203, 2113314, 2113425, 2113536, 2113647, 2113759, 2113870, 2113981, 2114092, 2114203, 2114314, 2114425, 2114536, 2114647, 2114758, 2114869, 2114981, 2115092, 2115203, 2115314, 2115425, 2115536, 2115647, 2115758, 2115869, 2115980, 2116091, 2116203, 2116314, 2116425, 2116536, 2116647, 2116758, 2116869, 2116980, 2117091, 2117203, 2117314, 2117425, 2117536, 2117647, 2117758, 2117869, 2117980, 2118092, 2118203, 2118314, 2118425, 2118536, 2118647, 2118758, 2118869, 2118981, 2119092, 2119203, 2119314, 2119425, 2119536, 2119647, 2119759, 2119870, 2119981, 2120092, 2120203, 2120314, 2120425, 2120537, 2120648, 2120759, 2120870, 2120981, 2121092, 2121204, 2121315, 2121426, 2121537, 2121648, 2121759, 2121870, 2121982, 2122093, 2122204, 2122315, 2122426, 2122537, 2122649, 2122760, 2122871, 2122982, 2123093, 2123205, 2123316, 2123427, 2123538, 2123649, 2123760, 2123872, 2123983, 2124094, 2124205, 2124316, 2124428, 2124539, 2124650, 2124761, 2124872, 2124984, 2125095, 2125206, 2125317, 2125428, 2125540, 2125651, 2125762, 2125873, 2125984, 2126096, 2126207, 2126318, 2126429, 2126540, 2126652, 2126763, 2126874, 2126985, 2127097, 2127208, 2127319, 2127430, 2127541, 2127653, 2127764, 2127875, 2127986, 2128098, 2128209, 2128320, 2128431, 2128542, 2128654, 2128765, 2128876, 2128987, 2129099, 2129210, 2129321, 2129432, 2129544, 2129655, 2129766, 2129877, 2129989, 2130100, 2130211, 2130322, 2130434, 2130545, 2130656, 2130767, 2130879, 2130990, 2131101, 2131212, 2131324, 2131435, 2131546, 2131658, 2131769, 2131880, 2131991, 2132103, 2132214, 2132325, 2132436, 2132548, 2132659, 2132770, 2132882, 2132993, 2133104, 2133215, 2133327, 2133438, 2133549, 2133661, 2133772, 2133883, 2133994, 2134106, 2134217, 2134328, 2134440, 2134551, 2134662, 2134774, 2134885, 2134996, 2135107, 2135219, 2135330, 2135441, 2135553, 2135664, 2135775, 2135887, 2135998, 2136109, 2136221, 2136332, 2136443, 2136555, 2136666, 2136777, 2136888, 2137000, 2137111, 2137222, 2137334, 2137445, 2137556, 2137668, 2137779, 2137890, 2138002, 2138113, 2138224, 2138336, 2138447, 2138558, 2138670, 2138781, 2138892, 2139004, 2139115, 2139227, 2139338, 2139449, 2139561, 2139672, 2139783, 2139895, 2140006, 2140117, 2140229, 2140340, 2140451, 2140563, 2140674, 2140786, 2140897, 2141008, 2141120, 2141231, 2141342, 2141454, 2141565, 2141676, 2141788, 2141899, 2142011, 2142122, 2142233, 2142345, 2142456, 2142568, 2142679, 2142790, 2142902, 2143013, 2143124, 2143236, 2143347, 2143459, 2143570, 2143681, 2143793, 2143904, 2144016, 2144127, 2144238, 2144350, 2144461, 2144573, 2144684, 2144795, 2144907, 2145018, 2145130, 2145241, 2145352, 2145464, 2145575, 2145687, 2145798, 2145910, 2146021, 2146132, 2146244, 2146355, 2146467, 2146578, 2146690, 2146801, 2146912, 2147024, 2147135, 2147247, 2147358, 2147470, 2147581, 2147692, 2147804, 2147915, 2148027, 2148138, 2148250, 2148361, 2148473, 2148584, 2148695, 2148807, 2148918, 2149030, 2149141, 2149253, 2149364, 2149476, 2149587, 2149698, 2149810, 2149921, 2150033, 2150144, 2150256, 2150367, 2150479, 2150590, 2150702, 2150813, 2150925, 2151036, 2151148, 2151259, 2151371, 2151482, 2151593, 2151705, 2151816, 2151928, 2152039, 2152151, 2152262, 2152374, 2152485, 2152597, 2152708, 2152820, 2152931, 2153043, 2153154, 2153266, 2153377, 2153489, 2153600, 2153712, 2153823, 2153935, 2154046, 2154158, 2154269, 2154381, 2154492, 2154604, 2154715, 2154827, 2154938, 2155050, 2155161, 2155273, 2155384, 2155496, 2155607, 2155719, 2155831, 2155942, 2156054, 2156165, 2156277, 2156388, 2156500, 2156611, 2156723, 2156834, 2156946, 2157057, 2157169, 2157280, 2157392, 2157504, 2157615, 2157727, 2157838, 2157950, 2158061, 2158173, 2158284, 2158396, 2158507, 2158619, 2158731, 2158842, 2158954, 2159065, 2159177, 2159288, 2159400, 2159511, 2159623, 2159735, 2159846, 2159958, 2160069, 2160181, 2160292, 2160404, 2160516, 2160627, 2160739, 2160850, 2160962, 2161073, 2161185, 2161297, 2161408, 2161520, 2161631, 2161743, 2161855, 2161966, 2162078, 2162189, 2162301, 2162413, 2162524, 2162636, 2162747, 2162859, 2162971, 2163082, 2163194, 2163305, 2163417, 2163529, 2163640, 2163752, 2163863, 2163975, 2164087, 2164198, 2164310, 2164421, 2164533, 2164645, 2164756, 2164868, 2164979, 2165091, 2165203, 2165314, 2165426, 2165538, 2165649, 2165761, 2165872, 2165984, 2166096, 2166207, 2166319, 2166431, 2166542, 2166654, 2166766, 2166877, 2166989, 2167101, 2167212, 2167324, 2167435, 2167547, 2167659, 2167770, 2167882, 2167994, 2168105, 2168217, 2168329, 2168440, 2168552, 2168664, 2168775, 2168887, 2168999, 2169110, 2169222, 2169334, 2169445, 2169557, 2169669, 2169780, 2169892, 2170004, 2170115, 2170227, 2170339, 2170450, 2170562, 2170674, 2170785, 2170897, 2171009, 2171120, 2171232, 2171344, 2171455, 2171567, 2171679, 2171791, 2171902, 2172014, 2172126, 2172237, 2172349, 2172461, 2172572, 2172684, 2172796, 2172908, 2173019, 2173131, 2173243, 2173354, 2173466, 2173578, 2173690, 2173801, 2173913, 2174025, 2174136, 2174248, 2174360, 2174472, 2174583, 2174695, 2174807, 2174918, 2175030, 2175142, 2175254, 2175365, 2175477, 2175589, 2175701, 2175812, 2175924, 2176036, 2176147, 2176259, 2176371, 2176483, 2176594, 2176706, 2176818, 2176930, 2177041, 2177153, 2177265, 2177377, 2177488, 2177600, 2177712, 2177824, 2177935, 2178047, 2178159, 2178271, 2178383, 2178494, 2178606, 2178718, 2178830, 2178941, 2179053, 2179165, 2179277, 2179388, 2179500, 2179612, 2179724, 2179836, 2179947, 2180059, 2180171, 2180283, 2180394, 2180506, 2180618, 2180730, 2180842, 2180953, 2181065, 2181177, 2181289, 2181401, 2181512, 2181624, 2181736, 2181848, 2181960, 2182071, 2182183, 2182295, 2182407, 2182519, 2182630, 2182742, 2182854, 2182966, 2183078, 2183189, 2183301, 2183413, 2183525, 2183637, 2183748, 2183860, 2183972, 2184084, 2184196, 2184308, 2184419, 2184531, 2184643, 2184755, 2184867, 2184979, 2185090, 2185202, 2185314, 2185426, 2185538, 2185650, 2185761, 2185873, 2185985, 2186097, 2186209, 2186321, 2186432, 2186544, 2186656, 2186768, 2186880, 2186992, 2187104, 2187215, 2187327, 2187439, 2187551, 2187663, 2187775, 2187887, 2187998, 2188110, 2188222, 2188334, 2188446, 2188558, 2188670, 2188782, 2188893, 2189005, 2189117, 2189229, 2189341, 2189453, 2189565, 2189677, 2189788, 2189900, 2190012, 2190124, 2190236, 2190348, 2190460, 2190572, 2190684, 2190795, 2190907, 2191019, 2191131, 2191243, 2191355, 2191467, 2191579, 2191691, 2191803, 2191914, 2192026, 2192138, 2192250, 2192362, 2192474, 2192586, 2192698, 2192810, 2192922, 2193034, 2193145, 2193257, 2193369, 2193481, 2193593, 2193705, 2193817, 2193929, 2194041, 2194153, 2194265, 2194377, 2194489, 2194601, 2194712, 2194824, 2194936, 2195048, 2195160, 2195272, 2195384, 2195496, 2195608, 2195720, 2195832, 2195944, 2196056, 2196168, 2196280, 2196392, 2196504, 2196616, 2196727, 2196839, 2196951, 2197063, 2197175, 2197287, 2197399, 2197511, 2197623, 2197735, 2197847, 2197959, 2198071, 2198183, 2198295, 2198407, 2198519, 2198631, 2198743, 2198855, 2198967, 2199079, 2199191, 2199303, 2199415, 2199527, 2199639, 2199751, 2199863, 2199975, 2200087, 2200199, 2200311, 2200423, 2200535, 2200647, 2200759, 2200871, 2200983, 2201095, 2201207, 2201319, 2201431, 2201543, 2201655, 2201767, 2201879, 2201991, 2202103, 2202215, 2202327, 2202439, 2202551, 2202663, 2202775, 2202887, 2202999, 2203111, 2203223, 2203335, 2203447, 2203559, 2203671, 2203783, 2203895, 2204007, 2204119, 2204231, 2204343, 2204455, 2204567, 2204679, 2204791, 2204903, 2205016, 2205128, 2205240, 2205352, 2205464, 2205576, 2205688, 2205800, 2205912, 2206024, 2206136, 2206248, 2206360, 2206472, 2206584, 2206696, 2206808, 2206920, 2207033, 2207145, 2207257, 2207369, 2207481, 2207593, 2207705, 2207817, 2207929, 2208041, 2208153, 2208265, 2208377, 2208489, 2208602, 2208714, 2208826, 2208938, 2209050, 2209162, 2209274, 2209386, 2209498, 2209610, 2209722, 2209835, 2209947, 2210059, 2210171, 2210283, 2210395, 2210507, 2210619, 2210731, 2210843, 2210956, 2211068, 2211180, 2211292, 2211404, 2211516, 2211628, 2211740, 2211852, 2211965, 2212077, 2212189, 2212301, 2212413, 2212525, 2212637, 2212749, 2212862, 2212974, 2213086, 2213198, 2213310, 2213422, 2213534, 2213646, 2213759, 2213871, 2213983, 2214095, 2214207, 2214319, 2214431, 2214544, 2214656, 2214768, 2214880, 2214992, 2215104, 2215216, 2215329, 2215441, 2215553, 2215665, 2215777, 2215889, 2216002, 2216114, 2216226, 2216338, 2216450, 2216562, 2216675, 2216787, 2216899, 2217011, 2217123, 2217235, 2217348, 2217460, 2217572, 2217684, 2217796, 2217908, 2218021, 2218133, 2218245, 2218357, 2218469, 2218582, 2218694, 2218806, 2218918, 2219030, 2219143, 2219255, 2219367, 2219479, 2219591, 2219704, 2219816, 2219928, 2220040, 2220152, 2220265, 2220377, 2220489, 2220601, 2220713, 2220826, 2220938, 2221050, 2221162, 2221274, 2221387, 2221499, 2221611, 2221723, 2221836, 2221948, 2222060, 2222172, 2222284, 2222397, 2222509, 2222621, 2222733, 2222846, 2222958, 2223070, 2223182, 2223295, 2223407, 2223519, 2223631, 2223743, 2223856, 2223968, 2224080, 2224192, 2224305, 2224417, 2224529, 2224641, 2224754, 2224866, 2224978, 2225090, 2225203, 2225315, 2225427, 2225540, 2225652, 2225764, 2225876, 2225989, 2226101, 2226213, 2226325, 2226438, 2226550, 2226662, 2226774, 2226887, 2226999, 2227111, 2227224, 2227336, 2227448, 2227560, 2227673, 2227785, 2227897, 2228010, 2228122, 2228234, 2228346, 2228459, 2228571, 2228683, 2228796, 2228908, 2229020, 2229132, 2229245, 2229357, 2229469, 2229582, 2229694, 2229806, 2229919, 2230031, 2230143, 2230256, 2230368, 2230480, 2230592, 2230705, 2230817, 2230929, 2231042, 2231154, 2231266, 2231379, 2231491, 2231603, 2231716, 2231828, 2231940, 2232053, 2232165, 2232277, 2232390, 2232502, 2232614, 2232727, 2232839, 2232951, 2233064, 2233176, 2233288, 2233401, 2233513, 2233625, 2233738, 2233850, 2233962, 2234075, 2234187, 2234300, 2234412, 2234524, 2234637, 2234749, 2234861, 2234974, 2235086, 2235198, 2235311, 2235423, 2235535, 2235648, 2235760, 2235873, 2235985, 2236097, 2236210, 2236322, 2236434, 2236547, 2236659, 2236772, 2236884, 2236996, 2237109, 2237221, 2237334, 2237446, 2237558, 2237671, 2237783, 2237895, 2238008, 2238120, 2238233, 2238345, 2238457, 2238570, 2238682, 2238795, 2238907, 2239019, 2239132, 2239244, 2239357, 2239469, 2239581, 2239694, 2239806, 2239919, 2240031, 2240144, 2240256, 2240368, 2240481, 2240593, 2240706, 2240818, 2240930, 2241043, 2241155, 2241268, 2241380, 2241493, 2241605, 2241717, 2241830, 2241942, 2242055, 2242167, 2242280, 2242392, 2242505, 2242617, 2242729, 2242842, 2242954, 2243067, 2243179, 2243292, 2243404, 2243517, 2243629, 2243741, 2243854, 2243966, 2244079, 2244191, 2244304, 2244416, 2244529, 2244641, 2244754, 2244866, 2244979, 2245091, 2245203, 2245316, 2245428, 2245541, 2245653, 2245766, 2245878, 2245991, 2246103, 2246216, 2246328, 2246441, 2246553, 2246666, 2246778, 2246891, 2247003, 2247116, 2247228, 2247341, 2247453, 2247566, 2247678, 2247791, 2247903, 2248016, 2248128, 2248241, 2248353, 2248466, 2248578, 2248691, 2248803, 2248916, 2249028, 2249141, 2249253, 2249366, 2249478, 2249591, 2249703, 2249816, 2249928, 2250041, 2250153, 2250266, 2250378, 2250491, 2250603, 2250716, 2250828, 2250941, 2251053, 2251166, 2251279, 2251391, 2251504, 2251616, 2251729, 2251841, 2251954, 2252066, 2252179, 2252291, 2252404, 2252516, 2252629, 2252742, 2252854, 2252967, 2253079, 2253192, 2253304, 2253417, 2253529, 2253642, 2253755, 2253867, 2253980, 2254092, 2254205, 2254317, 2254430, 2254543, 2254655, 2254768, 2254880, 2254993, 2255105, 2255218, 2255331, 2255443, 2255556, 2255668, 2255781, 2255893, 2256006, 2256119, 2256231, 2256344, 2256456, 2256569, 2256682, 2256794, 2256907, 2257019, 2257132, 2257245, 2257357, 2257470, 2257582, 2257695, 2257807, 2257920, 2258033, 2258145, 2258258, 2258371, 2258483, 2258596, 2258708, 2258821, 2258934, 2259046, 2259159, 2259271, 2259384, 2259497, 2259609, 2259722, 2259835, 2259947, 2260060, 2260172, 2260285, 2260398, 2260510, 2260623, 2260736, 2260848, 2260961, 2261073, 2261186, 2261299, 2261411, 2261524, 2261637, 2261749, 2261862, 2261975, 2262087, 2262200, 2262313, 2262425, 2262538, 2262651, 2262763, 2262876, 2262988, 2263101, 2263214, 2263326, 2263439, 2263552, 2263664, 2263777, 2263890, 2264002, 2264115, 2264228, 2264340, 2264453, 2264566, 2264678, 2264791, 2264904, 2265017, 2265129, 2265242, 2265355, 2265467, 2265580, 2265693, 2265805, 2265918, 2266031, 2266143, 2266256, 2266369, 2266481, 2266594, 2266707, 2266820, 2266932, 2267045, 2267158, 2267270, 2267383, 2267496, 2267608, 2267721, 2267834, 2267947, 2268059, 2268172, 2268285, 2268397, 2268510, 2268623, 2268736, 2268848, 2268961, 2269074, 2269186, 2269299, 2269412, 2269525, 2269637, 2269750, 2269863, 2269976, 2270088, 2270201, 2270314, 2270426, 2270539, 2270652, 2270765, 2270877, 2270990, 2271103, 2271216, 2271328, 2271441, 2271554, 2271667, 2271779, 2271892, 2272005, 2272118, 2272230, 2272343, 2272456, 2272569, 2272681, 2272794, 2272907, 2273020, 2273132, 2273245, 2273358, 2273471, 2273584, 2273696, 2273809, 2273922, 2274035, 2274147, 2274260, 2274373, 2274486, 2274599, 2274711, 2274824, 2274937, 2275050, 2275162, 2275275, 2275388, 2275501, 2275614, 2275726, 2275839, 2275952, 2276065, 2276178, 2276290, 2276403, 2276516, 2276629, 2276742, 2276854, 2276967, 2277080, 2277193, 2277306, 2277418, 2277531, 2277644, 2277757, 2277870, 2277982, 2278095, 2278208, 2278321, 2278434, 2278547, 2278659, 2278772, 2278885, 2278998, 2279111, 2279224, 2279336, 2279449, 2279562, 2279675, 2279788, 2279901, 2280013, 2280126, 2280239, 2280352, 2280465, 2280578, 2280690, 2280803, 2280916, 2281029, 2281142, 2281255, 2281368, 2281480, 2281593, 2281706, 2281819, 2281932, 2282045, 2282157, 2282270, 2282383, 2282496, 2282609, 2282722, 2282835, 2282948, 2283060, 2283173, 2283286, 2283399, 2283512, 2283625, 2283738, 2283851, 2283963, 2284076, 2284189, 2284302, 2284415, 2284528, 2284641, 2284754, 2284866, 2284979, 2285092, 2285205, 2285318, 2285431, 2285544, 2285657, 2285770, 2285883, 2285995, 2286108, 2286221, 2286334, 2286447, 2286560, 2286673, 2286786, 2286899, 2287012, 2287125, 2287237, 2287350, 2287463, 2287576, 2287689, 2287802, 2287915, 2288028, 2288141, 2288254, 2288367, 2288480, 2288592, 2288705, 2288818, 2288931, 2289044, 2289157, 2289270, 2289383, 2289496, 2289609, 2289722, 2289835, 2289948, 2290061, 2290174, 2290287, 2290399, 2290512, 2290625, 2290738, 2290851, 2290964, 2291077, 2291190, 2291303, 2291416, 2291529, 2291642, 2291755, 2291868, 2291981, 2292094, 2292207, 2292320, 2292433, 2292546, 2292659, 2292772, 2292885, 2292998, 2293111, 2293224, 2293337, 2293449, 2293562, 2293675, 2293788, 2293901, 2294014, 2294127, 2294240, 2294353, 2294466, 2294579, 2294692, 2294805, 2294918, 2295031, 2295144, 2295257, 2295370, 2295483, 2295596, 2295709, 2295822, 2295935, 2296048, 2296161, 2296274, 2296387, 2296500, 2296613, 2296726, 2296839, 2296952, 2297065, 2297178, 2297291, 2297405, 2297518, 2297631, 2297744, 2297857, 2297970, 2298083, 2298196, 2298309, 2298422, 2298535, 2298648, 2298761, 2298874, 2298987, 2299100, 2299213, 2299326, 2299439, 2299552, 2299665, 2299778, 2299891, 2300004, 2300117, 2300230, 2300343, 2300457, 2300570, 2300683, 2300796, 2300909, 2301022, 2301135, 2301248, 2301361, 2301474, 2301587, 2301700, 2301813, 2301926, 2302039, 2302152, 2302266, 2302379, 2302492, 2302605, 2302718, 2302831, 2302944, 2303057, 2303170, 2303283, 2303396, 2303509, 2303623, 2303736, 2303849, 2303962, 2304075, 2304188, 2304301, 2304414, 2304527, 2304640, 2304753, 2304867, 2304980, 2305093, 2305206, 2305319, 2305432, 2305545, 2305658, 2305771, 2305884, 2305998, 2306111, 2306224, 2306337, 2306450, 2306563, 2306676, 2306789, 2306903, 2307016, 2307129, 2307242, 2307355, 2307468, 2307581, 2307694, 2307808, 2307921, 2308034, 2308147, 2308260, 2308373, 2308486, 2308600, 2308713, 2308826, 2308939, 2309052, 2309165, 2309278, 2309392, 2309505, 2309618, 2309731, 2309844, 2309957, 2310070, 2310184, 2310297, 2310410, 2310523, 2310636, 2310749, 2310863, 2310976, 2311089, 2311202, 2311315, 2311428, 2311542, 2311655, 2311768, 2311881, 2311994, 2312107, 2312221, 2312334, 2312447, 2312560, 2312673, 2312787, 2312900, 2313013, 2313126, 2313239, 2313352, 2313466, 2313579, 2313692, 2313805, 2313918, 2314032, 2314145, 2314258, 2314371, 2314484, 2314598, 2314711, 2314824, 2314937, 2315050, 2315164, 2315277, 2315390, 2315503, 2315616, 2315730, 2315843, 2315956, 2316069, 2316183, 2316296, 2316409, 2316522, 2316635, 2316749, 2316862, 2316975, 2317088, 2317202, 2317315, 2317428, 2317541, 2317655, 2317768, 2317881, 2317994, 2318107, 2318221, 2318334, 2318447, 2318560, 2318674, 2318787, 2318900, 2319013, 2319127, 2319240, 2319353, 2319466, 2319580, 2319693, 2319806, 2319919, 2320033, 2320146, 2320259, 2320373, 2320486, 2320599, 2320712, 2320826, 2320939, 2321052, 2321165, 2321279, 2321392, 2321505, 2321619, 2321732, 2321845, 2321958, 2322072, 2322185, 2322298, 2322411, 2322525, 2322638, 2322751, 2322865, 2322978, 2323091, 2323205, 2323318, 2323431, 2323544, 2323658, 2323771, 2323884, 2323998, 2324111, 2324224, 2324338, 2324451, 2324564, 2324677, 2324791, 2324904, 2325017, 2325131, 2325244, 2325357, 2325471, 2325584, 2325697, 2325811, 2325924, 2326037, 2326151, 2326264, 2326377, 2326491, 2326604, 2326717, 2326831, 2326944, 2327057, 2327171, 2327284, 2327397, 2327511, 2327624, 2327737, 2327851, 2327964, 2328077, 2328191, 2328304, 2328417, 2328531, 2328644, 2328757, 2328871, 2328984, 2329097, 2329211, 2329324, 2329438, 2329551, 2329664, 2329778, 2329891, 2330004, 2330118, 2330231, 2330344, 2330458, 2330571, 2330685, 2330798, 2330911, 2331025, 2331138, 2331251, 2331365, 2331478, 2331592, 2331705, 2331818, 2331932, 2332045, 2332159, 2332272, 2332385, 2332499, 2332612, 2332725, 2332839, 2332952, 2333066, 2333179, 2333292, 2333406, 2333519, 2333633, 2333746, 2333859, 2333973, 2334086, 2334200, 2334313, 2334427, 2334540, 2334653, 2334767, 2334880, 2334994, 2335107, 2335220, 2335334, 2335447, 2335561, 2335674, 2335788, 2335901, 2336014, 2336128, 2336241, 2336355, 2336468, 2336582, 2336695, 2336808, 2336922, 2337035, 2337149, 2337262, 2337376, 2337489, 2337603, 2337716, 2337829, 2337943, 2338056, 2338170, 2338283, 2338397, 2338510, 2338624, 2338737, 2338851, 2338964, 2339077, 2339191, 2339304, 2339418, 2339531, 2339645, 2339758, 2339872, 2339985, 2340099, 2340212, 2340326, 2340439, 2340553, 2340666, 2340780, 2340893, 2341007, 2341120, 2341233, 2341347, 2341460, 2341574, 2341687, 2341801, 2341914, 2342028, 2342141, 2342255, 2342368, 2342482, 2342595, 2342709, 2342822, 2342936, 2343049, 2343163, 2343276, 2343390, 2343503, 2343617, 2343730, 2343844, 2343957, 2344071, 2344185, 2344298, 2344412, 2344525, 2344639, 2344752, 2344866, 2344979, 2345093, 2345206, 2345320, 2345433, 2345547, 2345660, 2345774, 2345887, 2346001, 2346114, 2346228, 2346342, 2346455, 2346569, 2346682, 2346796, 2346909, 2347023, 2347136, 2347250, 2347363, 2347477, 2347591, 2347704, 2347818, 2347931, 2348045, 2348158, 2348272, 2348385, 2348499, 2348613, 2348726, 2348840, 2348953, 2349067, 2349180, 2349294, 2349408, 2349521, 2349635, 2349748, 2349862, 2349975, 2350089, 2350203, 2350316, 2350430, 2350543, 2350657, 2350770, 2350884, 2350998, 2351111, 2351225, 2351338, 2351452, 2351566, 2351679, 2351793, 2351906, 2352020, 2352134, 2352247, 2352361, 2352474, 2352588, 2352702, 2352815, 2352929, 2353042, 2353156, 2353270, 2353383, 2353497, 2353610, 2353724, 2353838, 2353951, 2354065, 2354179, 2354292, 2354406, 2354519, 2354633, 2354747, 2354860, 2354974, 2355088, 2355201, 2355315, 2355429, 2355542, 2355656, 2355769, 2355883, 2355997, 2356110, 2356224, 2356338, 2356451, 2356565, 2356679, 2356792, 2356906, 2357020, 2357133, 2357247, 2357360, 2357474, 2357588, 2357701, 2357815, 2357929, 2358042, 2358156, 2358270, 2358383, 2358497, 2358611, 2358724, 2358838, 2358952, 2359065, 2359179, 2359293, 2359406, 2359520, 2359634, 2359748, 2359861, 2359975, 2360089, 2360202, 2360316, 2360430, 2360543, 2360657, 2360771, 2360884, 2360998, 2361112, 2361225, 2361339, 2361453, 2361567, 2361680, 2361794, 2361908, 2362021, 2362135, 2362249, 2362362, 2362476, 2362590, 2362704, 2362817, 2362931, 2363045, 2363158, 2363272, 2363386, 2363500, 2363613, 2363727, 2363841, 2363955, 2364068, 2364182, 2364296, 2364409, 2364523, 2364637, 2364751, 2364864, 2364978, 2365092, 2365206, 2365319, 2365433, 2365547, 2365661, 2365774, 2365888, 2366002, 2366116, 2366229, 2366343, 2366457, 2366571, 2366684, 2366798, 2366912, 2367026, 2367139, 2367253, 2367367, 2367481, 2367594, 2367708, 2367822, 2367936, 2368049, 2368163, 2368277, 2368391, 2368505, 2368618, 2368732, 2368846, 2368960, 2369073, 2369187, 2369301, 2369415, 2369529, 2369642, 2369756, 2369870, 2369984, 2370097, 2370211, 2370325, 2370439, 2370553, 2370666, 2370780, 2370894, 2371008, 2371122, 2371235, 2371349, 2371463, 2371577, 2371691, 2371804, 2371918, 2372032, 2372146, 2372260, 2372374, 2372487, 2372601, 2372715, 2372829, 2372943, 2373056, 2373170, 2373284, 2373398, 2373512, 2373626, 2373739, 2373853, 2373967, 2374081, 2374195, 2374309, 2374422, 2374536, 2374650, 2374764, 2374878, 2374992, 2375105, 2375219, 2375333, 2375447, 2375561, 2375675, 2375788, 2375902, 2376016, 2376130, 2376244, 2376358, 2376472, 2376585, 2376699, 2376813, 2376927, 2377041, 2377155, 2377269, 2377383, 2377496, 2377610, 2377724, 2377838, 2377952, 2378066, 2378180, 2378293, 2378407, 2378521, 2378635, 2378749, 2378863, 2378977, 2379091, 2379205, 2379318, 2379432, 2379546, 2379660, 2379774, 2379888, 2380002, 2380116, 2380230, 2380343, 2380457, 2380571, 2380685, 2380799, 2380913, 2381027, 2381141, 2381255, 2381369, 2381483, 2381596, 2381710, 2381824, 2381938, 2382052, 2382166, 2382280, 2382394, 2382508, 2382622, 2382736, 2382850, 2382963, 2383077, 2383191, 2383305, 2383419, 2383533, 2383647, 2383761, 2383875, 2383989, 2384103, 2384217, 2384331, 2384445, 2384559, 2384672, 2384786, 2384900, 2385014, 2385128, 2385242, 2385356, 2385470, 2385584, 2385698, 2385812, 2385926, 2386040, 2386154, 2386268, 2386382, 2386496, 2386610, 2386724, 2386838, 2386952, 2387066, 2387180, 2387294, 2387408, 2387521, 2387635, 2387749, 2387863, 2387977, 2388091, 2388205, 2388319, 2388433, 2388547, 2388661, 2388775, 2388889, 2389003, 2389117, 2389231, 2389345, 2389459, 2389573, 2389687, 2389801, 2389915, 2390029, 2390143, 2390257, 2390371, 2390485, 2390599, 2390713, 2390827, 2390941, 2391055, 2391169, 2391283, 2391397, 2391511, 2391625, 2391739, 2391853, 2391967, 2392081, 2392195, 2392309, 2392424, 2392538, 2392652, 2392766, 2392880, 2392994, 2393108, 2393222, 2393336, 2393450, 2393564, 2393678, 2393792, 2393906, 2394020, 2394134, 2394248, 2394362, 2394476, 2394590, 2394704, 2394818, 2394932, 2395046, 2395160, 2395275, 2395389, 2395503, 2395617, 2395731, 2395845, 2395959, 2396073, 2396187, 2396301, 2396415, 2396529, 2396643, 2396757, 2396871, 2396986, 2397100, 2397214, 2397328, 2397442, 2397556, 2397670, 2397784, 2397898, 2398012, 2398126, 2398240, 2398355, 2398469, 2398583, 2398697, 2398811, 2398925, 2399039, 2399153, 2399267, 2399381, 2399495, 2399610, 2399724, 2399838, 2399952, 2400066, 2400180, 2400294, 2400408, 2400522, 2400637, 2400751, 2400865, 2400979, 2401093, 2401207, 2401321, 2401435, 2401549, 2401664, 2401778, 2401892, 2402006, 2402120, 2402234, 2402348, 2402463, 2402577, 2402691, 2402805, 2402919, 2403033, 2403147, 2403261, 2403376, 2403490, 2403604, 2403718, 2403832, 2403946, 2404060, 2404175, 2404289, 2404403, 2404517, 2404631, 2404745, 2404860, 2404974, 2405088, 2405202, 2405316, 2405430, 2405545, 2405659, 2405773, 2405887, 2406001, 2406115, 2406230, 2406344, 2406458, 2406572, 2406686, 2406800, 2406915, 2407029, 2407143, 2407257, 2407371, 2407486, 2407600, 2407714, 2407828, 2407942, 2408056, 2408171, 2408285, 2408399, 2408513, 2408627, 2408742, 2408856, 2408970, 2409084, 2409198, 2409313, 2409427, 2409541, 2409655, 2409769, 2409884, 2409998, 2410112, 2410226, 2410341, 2410455, 2410569, 2410683, 2410797, 2410912, 2411026, 2411140, 2411254, 2411369, 2411483, 2411597, 2411711, 2411825, 2411940, 2412054, 2412168, 2412282, 2412397, 2412511, 2412625, 2412739, 2412854, 2412968, 2413082, 2413196, 2413311, 2413425, 2413539, 2413653, 2413768, 2413882, 2413996, 2414110, 2414225, 2414339, 2414453, 2414567, 2414682, 2414796, 2414910, 2415024, 2415139, 2415253, 2415367, 2415481, 2415596, 2415710, 2415824, 2415939, 2416053, 2416167, 2416281, 2416396, 2416510, 2416624, 2416739, 2416853, 2416967, 2417081, 2417196, 2417310, 2417424, 2417539, 2417653, 2417767, 2417881, 2417996, 2418110, 2418224, 2418339, 2418453, 2418567, 2418682, 2418796, 2418910, 2419024, 2419139, 2419253, 2419367, 2419482, 2419596, 2419710, 2419825, 2419939, 2420053, 2420168, 2420282, 2420396, 2420511, 2420625, 2420739, 2420854, 2420968, 2421082, 2421197, 2421311, 2421425, 2421540, 2421654, 2421768, 2421883, 2421997, 2422111, 2422226, 2422340, 2422454, 2422569, 2422683, 2422797, 2422912, 2423026, 2423140, 2423255, 2423369, 2423483, 2423598, 2423712, 2423826, 2423941, 2424055, 2424170, 2424284, 2424398, 2424513, 2424627, 2424741, 2424856, 2424970, 2425084, 2425199, 2425313, 2425428, 2425542, 2425656, 2425771, 2425885, 2425999, 2426114, 2426228, 2426343, 2426457, 2426571, 2426686, 2426800, 2426915, 2427029, 2427143, 2427258, 2427372, 2427487, 2427601, 2427715, 2427830, 2427944, 2428059, 2428173, 2428287, 2428402, 2428516, 2428631, 2428745, 2428859, 2428974, 2429088, 2429203, 2429317, 2429431, 2429546, 2429660, 2429775, 2429889, 2430004, 2430118, 2430232, 2430347, 2430461, 2430576, 2430690, 2430805, 2430919, 2431033, 2431148, 2431262, 2431377, 2431491, 2431606, 2431720, 2431835, 2431949, 2432063, 2432178, 2432292, 2432407, 2432521, 2432636, 2432750, 2432865, 2432979, 2433093, 2433208, 2433322, 2433437, 2433551, 2433666, 2433780, 2433895, 2434009, 2434124, 2434238, 2434353, 2434467, 2434581, 2434696, 2434810, 2434925, 2435039, 2435154, 2435268, 2435383, 2435497, 2435612, 2435726, 2435841, 2435955, 2436070, 2436184, 2436299, 2436413, 2436528, 2436642, 2436757, 2436871, 2436986, 2437100, 2437215, 2437329, 2437444, 2437558, 2437673, 2437787, 2437902, 2438016, 2438131, 2438245, 2438360, 2438474, 2438589, 2438703, 2438818, 2438932, 2439047, 2439161, 2439276, 2439390, 2439505, 2439619, 2439734, 2439849, 2439963, 2440078, 2440192, 2440307, 2440421, 2440536, 2440650, 2440765, 2440879, 2440994, 2441108, 2441223, 2441337, 2441452, 2441567, 2441681, 2441796, 2441910, 2442025, 2442139, 2442254, 2442368, 2442483, 2442598, 2442712, 2442827, 2442941, 2443056, 2443170, 2443285, 2443399, 2443514, 2443629, 2443743, 2443858, 2443972, 2444087, 2444201, 2444316, 2444431, 2444545, 2444660, 2444774, 2444889, 2445004, 2445118, 2445233, 2445347, 2445462, 2445576, 2445691, 2445806, 2445920, 2446035, 2446149, 2446264, 2446379, 2446493, 2446608, 2446722, 2446837, 2446952, 2447066, 2447181, 2447295, 2447410, 2447525, 2447639, 2447754, 2447868, 2447983, 2448098, 2448212, 2448327, 2448442, 2448556, 2448671, 2448785, 2448900, 2449015, 2449129, 2449244, 2449359, 2449473, 2449588, 2449702, 2449817, 2449932, 2450046, 2450161, 2450276, 2450390, 2450505, 2450620, 2450734, 2450849, 2450963, 2451078, 2451193, 2451307, 2451422, 2451537, 2451651, 2451766, 2451881, 2451995, 2452110, 2452225, 2452339, 2452454, 2452569, 2452683, 2452798, 2452913, 2453027, 2453142, 2453257, 2453371, 2453486, 2453601, 2453715, 2453830, 2453945, 2454059, 2454174, 2454289, 2454403, 2454518, 2454633, 2454747, 2454862, 2454977, 2455091, 2455206, 2455321, 2455436, 2455550, 2455665, 2455780, 2455894, 2456009, 2456124, 2456238, 2456353, 2456468, 2456583, 2456697, 2456812, 2456927, 2457041, 2457156, 2457271, 2457385, 2457500, 2457615, 2457730, 2457844, 2457959, 2458074, 2458189, 2458303, 2458418, 2458533, 2458647, 2458762, 2458877, 2458992, 2459106, 2459221, 2459336, 2459451, 2459565, 2459680, 2459795, 2459909, 2460024, 2460139, 2460254, 2460368, 2460483, 2460598, 2460713, 2460827, 2460942, 2461057, 2461172, 2461286, 2461401, 2461516, 2461631, 2461745, 2461860, 2461975, 2462090, 2462205, 2462319, 2462434, 2462549, 2462664, 2462778, 2462893, 2463008, 2463123, 2463237, 2463352, 2463467, 2463582, 2463697, 2463811, 2463926, 2464041, 2464156, 2464270, 2464385, 2464500, 2464615, 2464730, 2464844, 2464959, 2465074, 2465189, 2465304, 2465418, 2465533, 2465648, 2465763, 2465878, 2465992, 2466107, 2466222, 2466337, 2466452, 2466566, 2466681, 2466796, 2466911, 2467026, 2467141, 2467255, 2467370, 2467485, 2467600, 2467715, 2467829, 2467944, 2468059, 2468174, 2468289, 2468404, 2468518, 2468633, 2468748, 2468863, 2468978, 2469093, 2469207, 2469322, 2469437, 2469552, 2469667, 2469782, 2469896, 2470011, 2470126, 2470241, 2470356, 2470471, 2470586, 2470700, 2470815, 2470930, 2471045, 2471160, 2471275, 2471390, 2471504, 2471619, 2471734, 2471849, 2471964, 2472079, 2472194, 2472309, 2472423, 2472538, 2472653, 2472768, 2472883, 2472998, 2473113, 2473228, 2473342, 2473457, 2473572, 2473687, 2473802, 2473917, 2474032, 2474147, 2474262, 2474376, 2474491, 2474606, 2474721, 2474836, 2474951, 2475066, 2475181, 2475296, 2475410, 2475525, 2475640, 2475755, 2475870, 2475985, 2476100, 2476215, 2476330, 2476445, 2476560, 2476675, 2476789, 2476904, 2477019, 2477134, 2477249, 2477364, 2477479, 2477594, 2477709, 2477824, 2477939, 2478054, 2478169, 2478283, 2478398, 2478513, 2478628, 2478743, 2478858, 2478973, 2479088, 2479203, 2479318, 2479433, 2479548, 2479663, 2479778, 2479893, 2480008, 2480123, 2480238, 2480352, 2480467, 2480582, 2480697, 2480812, 2480927, 2481042, 2481157, 2481272, 2481387, 2481502, 2481617, 2481732, 2481847, 2481962, 2482077, 2482192, 2482307, 2482422, 2482537, 2482652, 2482767, 2482882, 2482997, 2483112, 2483227, 2483342, 2483457, 2483572, 2483687, 2483802, 2483917, 2484032, 2484147, 2484262, 2484377, 2484492, 2484607, 2484722, 2484837, 2484952, 2485067, 2485182, 2485297, 2485412, 2485527, 2485642, 2485757, 2485872, 2485987, 2486102, 2486217, 2486332, 2486447, 2486562, 2486677, 2486792, 2486907, 2487022, 2487137, 2487252, 2487367, 2487482, 2487597, 2487712, 2487827, 2487942, 2488057, 2488172, 2488287, 2488402, 2488517, 2488633, 2488748, 2488863, 2488978, 2489093, 2489208, 2489323, 2489438, 2489553, 2489668, 2489783, 2489898, 2490013, 2490128, 2490243, 2490358, 2490473, 2490588, 2490704, 2490819, 2490934, 2491049, 2491164, 2491279, 2491394, 2491509, 2491624, 2491739, 2491854, 2491969, 2492084, 2492199, 2492315, 2492430, 2492545, 2492660, 2492775, 2492890, 2493005, 2493120, 2493235, 2493350, 2493465, 2493581, 2493696, 2493811, 2493926, 2494041, 2494156, 2494271, 2494386, 2494501, 2494616, 2494732, 2494847, 2494962, 2495077, 2495192, 2495307, 2495422, 2495537, 2495652, 2495768, 2495883, 2495998, 2496113, 2496228, 2496343, 2496458, 2496573, 2496689, 2496804, 2496919, 2497034, 2497149, 2497264, 2497379, 2497495, 2497610, 2497725, 2497840, 2497955, 2498070, 2498185, 2498301, 2498416, 2498531, 2498646, 2498761, 2498876, 2498991, 2499107, 2499222, 2499337, 2499452, 2499567, 2499682, 2499798, 2499913, 2500028, 2500143, 2500258, 2500373, 2500489, 2500604, 2500719, 2500834, 2500949, 2501064, 2501180, 2501295, 2501410, 2501525, 2501640, 2501755, 2501871, 2501986, 2502101, 2502216, 2502331, 2502447, 2502562, 2502677, 2502792, 2502907, 2503023, 2503138, 2503253, 2503368, 2503483, 2503599, 2503714, 2503829, 2503944, 2504059, 2504175, 2504290, 2504405, 2504520, 2504635, 2504751, 2504866, 2504981, 2505096, 2505211, 2505327, 2505442, 2505557, 2505672, 2505788, 2505903, 2506018, 2506133, 2506249, 2506364, 2506479, 2506594, 2506709, 2506825, 2506940, 2507055, 2507170, 2507286, 2507401, 2507516, 2507631, 2507747, 2507862, 2507977, 2508092, 2508208, 2508323, 2508438, 2508553, 2508669, 2508784, 2508899, 2509014, 2509130, 2509245, 2509360, 2509475, 2509591, 2509706, 2509821, 2509937, 2510052, 2510167, 2510282, 2510398, 2510513, 2510628, 2510743, 2510859, 2510974, 2511089, 2511205, 2511320, 2511435, 2511550, 2511666, 2511781, 2511896, 2512012, 2512127, 2512242, 2512357, 2512473, 2512588, 2512703, 2512819, 2512934, 2513049, 2513165, 2513280, 2513395, 2513510, 2513626, 2513741, 2513856, 2513972, 2514087, 2514202, 2514318, 2514433, 2514548, 2514664, 2514779, 2514894, 2515010, 2515125, 2515240, 2515356, 2515471, 2515586, 2515702, 2515817, 2515932, 2516047, 2516163, 2516278, 2516394, 2516509, 2516624, 2516740, 2516855, 2516970, 2517086, 2517201, 2517316, 2517432, 2517547, 2517662, 2517778, 2517893, 2518008, 2518124, 2518239, 2518354, 2518470, 2518585, 2518701, 2518816, 2518931, 2519047, 2519162, 2519277, 2519393, 2519508, 2519623, 2519739, 2519854, 2519970, 2520085, 2520200, 2520316, 2520431, 2520546, 2520662, 2520777, 2520893, 2521008, 2521123, 2521239, 2521354, 2521470, 2521585, 2521700, 2521816, 2521931, 2522047, 2522162, 2522277, 2522393, 2522508, 2522624, 2522739, 2522854, 2522970, 2523085, 2523201, 2523316, 2523431, 2523547, 2523662, 2523778, 2523893, 2524008, 2524124, 2524239, 2524355, 2524470, 2524586, 2524701, 2524816, 2524932, 2525047, 2525163, 2525278, 2525394, 2525509, 2525624, 2525740, 2525855, 2525971, 2526086, 2526202, 2526317, 2526433, 2526548, 2526663, 2526779, 2526894, 2527010, 2527125, 2527241, 2527356, 2527472, 2527587, 2527702, 2527818, 2527933, 2528049, 2528164, 2528280, 2528395, 2528511, 2528626, 2528742, 2528857, 2528973, 2529088, 2529204, 2529319, 2529434, 2529550, 2529665, 2529781, 2529896, 2530012, 2530127, 2530243, 2530358, 2530474, 2530589, 2530705, 2530820, 2530936, 2531051, 2531167, 2531282, 2531398, 2531513, 2531629, 2531744, 2531860, 2531975, 2532091, 2532206, 2532322, 2532437, 2532553, 2532668, 2532784, 2532899, 2533015, 2533130, 2533246, 2533361, 2533477, 2533592, 2533708, 2533823, 2533939, 2534054, 2534170, 2534286, 2534401, 2534517, 2534632, 2534748, 2534863, 2534979, 2535094, 2535210, 2535325, 2535441, 2535556, 2535672, 2535787, 2535903, 2536019, 2536134, 2536250, 2536365, 2536481, 2536596, 2536712, 2536827, 2536943, 2537059, 2537174, 2537290, 2537405, 2537521, 2537636, 2537752, 2537867, 2537983, 2538099, 2538214, 2538330, 2538445, 2538561, 2538676, 2538792, 2538908, 2539023, 2539139, 2539254, 2539370, 2539485, 2539601, 2539717, 2539832, 2539948, 2540063, 2540179, 2540295, 2540410, 2540526, 2540641, 2540757, 2540873, 2540988, 2541104, 2541219, 2541335, 2541451, 2541566, 2541682, 2541797, 2541913, 2542029, 2542144, 2542260, 2542375, 2542491, 2542607, 2542722, 2542838, 2542953, 2543069, 2543185, 2543300, 2543416, 2543532, 2543647, 2543763, 2543878, 2543994, 2544110, 2544225, 2544341, 2544457, 2544572, 2544688, 2544804, 2544919, 2545035, 2545150, 2545266, 2545382, 2545497, 2545613, 2545729, 2545844, 2545960, 2546076, 2546191, 2546307, 2546423, 2546538, 2546654, 2546770, 2546885, 2547001, 2547117, 2547232, 2547348, 2547464, 2547579, 2547695, 2547811, 2547926, 2548042, 2548158, 2548273, 2548389, 2548505, 2548620, 2548736, 2548852, 2548967, 2549083, 2549199, 2549314, 2549430, 2549546, 2549661, 2549777, 2549893, 2550008, 2550124, 2550240, 2550356, 2550471, 2550587, 2550703, 2550818, 2550934, 2551050, 2551165, 2551281, 2551397, 2551513, 2551628, 2551744, 2551860, 2551975, 2552091, 2552207, 2552323, 2552438, 2552554, 2552670, 2552785, 2552901, 2553017, 2553133, 2553248, 2553364, 2553480, 2553596, 2553711, 2553827, 2553943, 2554058, 2554174, 2554290, 2554406, 2554521, 2554637, 2554753, 2554869, 2554984, 2555100, 2555216, 2555332, 2555447, 2555563, 2555679, 2555795, 2555910, 2556026, 2556142, 2556258, 2556373, 2556489, 2556605, 2556721, 2556837, 2556952, 2557068, 2557184, 2557300, 2557415, 2557531, 2557647, 2557763, 2557878, 2557994, 2558110, 2558226, 2558342, 2558457, 2558573, 2558689, 2558805, 2558920, 2559036, 2559152, 2559268, 2559384, 2559499, 2559615, 2559731, 2559847, 2559963, 2560078, 2560194, 2560310, 2560426, 2560542, 2560657, 2560773, 2560889, 2561005, 2561121, 2561236, 2561352, 2561468, 2561584, 2561700, 2561816, 2561931, 2562047, 2562163, 2562279, 2562395, 2562510, 2562626, 2562742, 2562858, 2562974, 2563090, 2563205, 2563321, 2563437, 2563553, 2563669, 2563785, 2563900, 2564016, 2564132, 2564248, 2564364, 2564480, 2564596, 2564711, 2564827, 2564943, 2565059, 2565175, 2565291, 2565407, 2565522, 2565638, 2565754, 2565870, 2565986, 2566102, 2566218, 2566333, 2566449, 2566565, 2566681, 2566797, 2566913, 2567029, 2567144, 2567260, 2567376, 2567492, 2567608, 2567724, 2567840, 2567956, 2568072, 2568187, 2568303, 2568419, 2568535, 2568651, 2568767, 2568883, 2568999, 2569115, 2569230, 2569346, 2569462, 2569578, 2569694, 2569810, 2569926, 2570042, 2570158, 2570274, 2570389, 2570505, 2570621, 2570737, 2570853, 2570969, 2571085, 2571201, 2571317, 2571433, 2571549, 2571665, 2571780, 2571896, 2572012, 2572128, 2572244, 2572360, 2572476, 2572592, 2572708, 2572824, 2572940, 2573056, 2573172, 2573288, 2573403, 2573519, 2573635, 2573751, 2573867, 2573983, 2574099, 2574215, 2574331, 2574447, 2574563, 2574679, 2574795, 2574911, 2575027, 2575143, 2575259, 2575375, 2575491, 2575607, 2575723, 2575839, 2575954, 2576070, 2576186, 2576302, 2576418, 2576534, 2576650, 2576766, 2576882, 2576998, 2577114, 2577230, 2577346, 2577462, 2577578, 2577694, 2577810, 2577926, 2578042, 2578158, 2578274, 2578390, 2578506, 2578622, 2578738, 2578854, 2578970, 2579086, 2579202, 2579318, 2579434, 2579550, 2579666, 2579782, 2579898, 2580014, 2580130, 2580246, 2580362, 2580478, 2580594, 2580710, 2580826, 2580942, 2581058, 2581174, 2581290, 2581406, 2581522, 2581638, 2581754, 2581870, 2581986, 2582102, 2582219, 2582335, 2582451, 2582567, 2582683, 2582799, 2582915, 2583031, 2583147, 2583263, 2583379, 2583495, 2583611, 2583727, 2583843, 2583959, 2584075, 2584191, 2584307, 2584423, 2584539, 2584656, 2584772, 2584888, 2585004, 2585120, 2585236, 2585352, 2585468, 2585584, 2585700, 2585816, 2585932, 2586048, 2586164, 2586280, 2586397, 2586513, 2586629, 2586745, 2586861, 2586977, 2587093, 2587209, 2587325, 2587441, 2587557, 2587673, 2587790, 2587906, 2588022, 2588138, 2588254, 2588370, 2588486, 2588602, 2588718, 2588834, 2588951, 2589067, 2589183, 2589299, 2589415, 2589531, 2589647, 2589763, 2589879, 2589996, 2590112, 2590228, 2590344, 2590460, 2590576, 2590692, 2590808, 2590925, 2591041, 2591157, 2591273, 2591389, 2591505, 2591621, 2591737, 2591854, 2591970, 2592086, 2592202, 2592318, 2592434, 2592550, 2592667, 2592783, 2592899, 2593015, 2593131, 2593247, 2593363, 2593480, 2593596, 2593712, 2593828, 2593944, 2594060, 2594177, 2594293, 2594409, 2594525, 2594641, 2594757, 2594874, 2594990, 2595106, 2595222, 2595338, 2595454, 2595571, 2595687, 2595803, 2595919, 2596035, 2596151, 2596268, 2596384, 2596500, 2596616, 2596732, 2596849, 2596965, 2597081, 2597197, 2597313, 2597429, 2597546, 2597662, 2597778, 2597894, 2598010, 2598127, 2598243, 2598359, 2598475, 2598592, 2598708, 2598824, 2598940, 2599056, 2599173, 2599289, 2599405, 2599521, 2599637, 2599754, 2599870, 2599986, 2600102, 2600219, 2600335, 2600451, 2600567, 2600683, 2600800, 2600916, 2601032, 2601148, 2601265, 2601381, 2601497, 2601613, 2601730, 2601846, 2601962, 2602078, 2602195, 2602311, 2602427, 2602543, 2602660, 2602776, 2602892, 2603008, 2603125, 2603241, 2603357, 2603473, 2603590, 2603706, 2603822, 2603938, 2604055, 2604171, 2604287, 2604403, 2604520, 2604636, 2604752, 2604868, 2604985, 2605101, 2605217, 2605334, 2605450, 2605566, 2605682, 2605799, 2605915, 2606031, 2606148, 2606264, 2606380, 2606496, 2606613, 2606729, 2606845, 2606962, 2607078, 2607194, 2607310, 2607427, 2607543, 2607659, 2607776, 2607892, 2608008, 2608125, 2608241, 2608357, 2608474, 2608590, 2608706, 2608822, 2608939, 2609055, 2609171, 2609288, 2609404, 2609520, 2609637, 2609753, 2609869, 2609986, 2610102, 2610218, 2610335, 2610451, 2610567, 2610684, 2610800, 2610916, 2611033, 2611149, 2611265, 2611382, 2611498, 2611614, 2611731, 2611847, 2611963, 2612080, 2612196, 2612313, 2612429, 2612545, 2612662, 2612778, 2612894, 2613011, 2613127, 2613243, 2613360, 2613476, 2613592, 2613709, 2613825, 2613942, 2614058, 2614174, 2614291, 2614407, 2614523, 2614640, 2614756, 2614873, 2614989, 2615105, 2615222, 2615338, 2615454, 2615571, 2615687, 2615804, 2615920, 2616036, 2616153, 2616269, 2616386, 2616502, 2616618, 2616735, 2616851, 2616968, 2617084, 2617200, 2617317, 2617433, 2617550, 2617666, 2617782, 2617899, 2618015, 2618132, 2618248, 2618364, 2618481, 2618597, 2618714, 2618830, 2618947, 2619063, 2619179, 2619296, 2619412, 2619529, 2619645, 2619762, 2619878, 2619994, 2620111, 2620227, 2620344, 2620460, 2620577, 2620693, 2620809, 2620926, 2621042, 2621159, 2621275, 2621392, 2621508, 2621625, 2621741, 2621858, 2621974, 2622090, 2622207, 2622323, 2622440, 2622556, 2622673, 2622789, 2622906, 2623022, 2623139, 2623255, 2623372, 2623488, 2623604, 2623721, 2623837, 2623954, 2624070, 2624187, 2624303, 2624420, 2624536, 2624653, 2624769, 2624886, 2625002, 2625119, 2625235, 2625352, 2625468, 2625585, 2625701, 2625818, 2625934, 2626051, 2626167, 2626284, 2626400, 2626517, 2626633, 2626750, 2626866, 2626983, 2627099, 2627216, 2627332, 2627449, 2627565, 2627682, 2627798, 2627915, 2628031, 2628148, 2628264, 2628381, 2628497, 2628614, 2628730, 2628847, 2628963, 2629080, 2629197, 2629313, 2629430, 2629546, 2629663, 2629779, 2629896, 2630012, 2630129, 2630245, 2630362, 2630478, 2630595, 2630712, 2630828, 2630945, 2631061, 2631178, 2631294, 2631411, 2631527, 2631644, 2631760, 2631877, 2631994, 2632110, 2632227, 2632343, 2632460, 2632576, 2632693, 2632810, 2632926, 2633043, 2633159, 2633276, 2633392, 2633509, 2633626, 2633742, 2633859, 2633975, 2634092, 2634208, 2634325, 2634442, 2634558, 2634675, 2634791, 2634908, 2635025, 2635141, 2635258, 2635374, 2635491, 2635608, 2635724, 2635841, 2635957, 2636074, 2636191, 2636307, 2636424, 2636540, 2636657, 2636774, 2636890, 2637007, 2637123, 2637240, 2637357, 2637473, 2637590, 2637707, 2637823, 2637940, 2638056, 2638173, 2638290, 2638406, 2638523, 2638640, 2638756, 2638873, 2638989, 2639106, 2639223, 2639339, 2639456, 2639573, 2639689, 2639806, 2639923, 2640039, 2640156, 2640272, 2640389, 2640506, 2640622, 2640739, 2640856, 2640972, 2641089, 2641206, 2641322, 2641439, 2641556, 2641672, 2641789, 2641906, 2642022, 2642139, 2642256, 2642372, 2642489, 2642606, 2642722, 2642839, 2642956, 2643072, 2643189, 2643306, 2643422, 2643539, 2643656, 2643772, 2643889, 2644006, 2644123, 2644239, 2644356, 2644473, 2644589, 2644706, 2644823, 2644939, 2645056, 2645173, 2645290, 2645406, 2645523, 2645640, 2645756, 2645873, 2645990, 2646106, 2646223, 2646340, 2646457, 2646573, 2646690, 2646807, 2646923, 2647040, 2647157, 2647274, 2647390, 2647507, 2647624, 2647740, 2647857, 2647974, 2648091, 2648207, 2648324, 2648441, 2648558, 2648674, 2648791, 2648908, 2649025, 2649141, 2649258, 2649375, 2649492, 2649608, 2649725, 2649842, 2649959, 2650075, 2650192, 2650309, 2650426, 2650542, 2650659, 2650776, 2650893, 2651009, 2651126, 2651243, 2651360, 2651476, 2651593, 2651710, 2651827, 2651943, 2652060, 2652177, 2652294, 2652411, 2652527, 2652644, 2652761, 2652878, 2652994, 2653111, 2653228, 2653345, 2653462, 2653578, 2653695, 2653812, 2653929, 2654046, 2654162, 2654279, 2654396, 2654513, 2654630, 2654746, 2654863, 2654980, 2655097, 2655214, 2655330, 2655447, 2655564, 2655681, 2655798, 2655914, 2656031, 2656148, 2656265, 2656382, 2656498, 2656615, 2656732, 2656849, 2656966, 2657083, 2657199, 2657316, 2657433, 2657550, 2657667, 2657784, 2657900, 2658017, 2658134, 2658251, 2658368, 2658485, 2658601, 2658718, 2658835, 2658952, 2659069, 2659186, 2659303, 2659419, 2659536, 2659653, 2659770, 2659887, 2660004, 2660120, 2660237, 2660354, 2660471, 2660588, 2660705, 2660822, 2660939, 2661055, 2661172, 2661289, 2661406, 2661523, 2661640, 2661757, 2661873, 2661990, 2662107, 2662224, 2662341, 2662458, 2662575, 2662692, 2662809, 2662925, 2663042, 2663159, 2663276, 2663393, 2663510, 2663627, 2663744, 2663861, 2663977, 2664094, 2664211, 2664328, 2664445, 2664562, 2664679, 2664796, 2664913, 2665030, 2665147, 2665263, 2665380, 2665497, 2665614, 2665731, 2665848, 2665965, 2666082, 2666199, 2666316, 2666433, 2666550, 2666666, 2666783, 2666900, 2667017, 2667134, 2667251, 2667368, 2667485, 2667602, 2667719, 2667836, 2667953, 2668070, 2668187, 2668304, 2668421, 2668537, 2668654, 2668771, 2668888, 2669005, 2669122, 2669239, 2669356, 2669473, 2669590, 2669707, 2669824, 2669941, 2670058, 2670175, 2670292, 2670409, 2670526, 2670643, 2670760, 2670877, 2670994, 2671111, 2671228, 2671345, 2671462, 2671578, 2671695, 2671812, 2671929, 2672046, 2672163, 2672280, 2672397, 2672514, 2672631, 2672748, 2672865, 2672982, 2673099, 2673216, 2673333, 2673450, 2673567, 2673684, 2673801, 2673918, 2674035, 2674152, 2674269, 2674386, 2674503, 2674620, 2674737, 2674854, 2674971, 2675088, 2675205, 2675322, 2675439, 2675556, 2675674, 2675791, 2675908, 2676025, 2676142, 2676259, 2676376, 2676493, 2676610, 2676727, 2676844, 2676961, 2677078, 2677195, 2677312, 2677429, 2677546, 2677663, 2677780, 2677897, 2678014, 2678131, 2678248, 2678365, 2678482, 2678599, 2678717, 2678834, 2678951, 2679068, 2679185, 2679302, 2679419, 2679536, 2679653, 2679770, 2679887, 2680004, 2680121, 2680238, 2680355, 2680472, 2680590, 2680707, 2680824, 2680941, 2681058, 2681175, 2681292, 2681409, 2681526, 2681643, 2681760, 2681877, 2681995, 2682112, 2682229, 2682346, 2682463, 2682580, 2682697, 2682814, 2682931, 2683048, 2683165, 2683283, 2683400, 2683517, 2683634, 2683751, 2683868, 2683985, 2684102, 2684219, 2684337, 2684454, 2684571, 2684688, 2684805, 2684922, 2685039, 2685156, 2685274, 2685391, 2685508, 2685625, 2685742, 2685859, 2685976, 2686093, 2686211, 2686328, 2686445, 2686562, 2686679, 2686796, 2686913, 2687031, 2687148, 2687265, 2687382, 2687499, 2687616, 2687733, 2687851, 2687968, 2688085, 2688202, 2688319, 2688436, 2688553, 2688671, 2688788, 2688905, 2689022, 2689139, 2689256, 2689374, 2689491, 2689608, 2689725, 2689842, 2689959, 2690077, 2690194, 2690311, 2690428, 2690545, 2690663, 2690780, 2690897, 2691014, 2691131, 2691248, 2691366, 2691483, 2691600, 2691717, 2691834, 2691952, 2692069, 2692186, 2692303, 2692420, 2692538, 2692655, 2692772, 2692889, 2693006, 2693124, 2693241, 2693358, 2693475, 2693592, 2693710, 2693827, 2693944, 2694061, 2694178, 2694296, 2694413, 2694530, 2694647, 2694765, 2694882, 2694999, 2695116, 2695234, 2695351, 2695468, 2695585, 2695702, 2695820, 2695937, 2696054, 2696171, 2696289, 2696406, 2696523, 2696640, 2696758, 2696875, 2696992, 2697109, 2697227, 2697344, 2697461, 2697578, 2697696, 2697813, 2697930, 2698047, 2698165, 2698282, 2698399, 2698516, 2698634, 2698751, 2698868, 2698985, 2699103, 2699220, 2699337, 2699455, 2699572, 2699689, 2699806, 2699924, 2700041, 2700158, 2700276, 2700393, 2700510, 2700627, 2700745, 2700862, 2700979, 2701097, 2701214, 2701331, 2701448, 2701566, 2701683, 2701800, 2701918, 2702035, 2702152, 2702269, 2702387, 2702504, 2702621, 2702739, 2702856, 2702973, 2703091, 2703208, 2703325, 2703443, 2703560, 2703677, 2703795, 2703912, 2704029, 2704147, 2704264, 2704381, 2704498, 2704616, 2704733, 2704850, 2704968, 2705085, 2705202, 2705320, 2705437, 2705554, 2705672, 2705789, 2705907, 2706024, 2706141, 2706259, 2706376, 2706493, 2706611, 2706728, 2706845, 2706963, 2707080, 2707197, 2707315, 2707432, 2707549, 2707667, 2707784, 2707901, 2708019, 2708136, 2708254, 2708371, 2708488, 2708606, 2708723, 2708840, 2708958, 2709075, 2709193, 2709310, 2709427, 2709545, 2709662, 2709779, 2709897, 2710014, 2710132, 2710249, 2710366, 2710484, 2710601, 2710719, 2710836, 2710953, 2711071, 2711188, 2711306, 2711423, 2711540, 2711658, 2711775, 2711893, 2712010, 2712127, 2712245, 2712362, 2712480, 2712597, 2712714, 2712832, 2712949, 2713067, 2713184, 2713302, 2713419, 2713536, 2713654, 2713771, 2713889, 2714006, 2714123, 2714241, 2714358, 2714476, 2714593, 2714711, 2714828, 2714946, 2715063, 2715180, 2715298, 2715415, 2715533, 2715650, 2715768, 2715885, 2716003, 2716120, 2716237, 2716355, 2716472, 2716590, 2716707, 2716825, 2716942, 2717060, 2717177, 2717295, 2717412, 2717529, 2717647, 2717764, 2717882, 2717999, 2718117, 2718234, 2718352, 2718469, 2718587, 2718704, 2718822, 2718939, 2719057, 2719174, 2719292, 2719409, 2719527, 2719644, 2719762, 2719879, 2719996, 2720114, 2720231, 2720349, 2720466, 2720584, 2720701, 2720819, 2720936, 2721054, 2721171, 2721289, 2721406, 2721524, 2721641, 2721759, 2721877, 2721994, 2722112, 2722229, 2722347, 2722464, 2722582, 2722699, 2722817, 2722934, 2723052, 2723169, 2723287, 2723404, 2723522, 2723639, 2723757, 2723874, 2723992, 2724109, 2724227, 2724345, 2724462, 2724580, 2724697, 2724815, 2724932, 2725050, 2725167, 2725285, 2725402, 2725520, 2725637, 2725755, 2725873, 2725990, 2726108, 2726225, 2726343, 2726460, 2726578, 2726696, 2726813, 2726931, 2727048, 2727166, 2727283, 2727401, 2727518, 2727636, 2727754, 2727871, 2727989, 2728106, 2728224, 2728341, 2728459, 2728577, 2728694, 2728812, 2728929, 2729047, 2729165, 2729282, 2729400, 2729517, 2729635, 2729753, 2729870, 2729988, 2730105, 2730223, 2730341, 2730458, 2730576, 2730693, 2730811, 2730929, 2731046, 2731164, 2731281, 2731399, 2731517, 2731634, 2731752, 2731869, 2731987, 2732105, 2732222, 2732340, 2732458, 2732575, 2732693, 2732810, 2732928, 2733046, 2733163, 2733281, 2733399, 2733516, 2733634, 2733751, 2733869, 2733987, 2734104, 2734222, 2734340, 2734457, 2734575, 2734693, 2734810, 2734928, 2735046, 2735163, 2735281, 2735398, 2735516, 2735634, 2735751, 2735869, 2735987, 2736104, 2736222, 2736340, 2736457, 2736575, 2736693, 2736810, 2736928, 2737046, 2737163, 2737281, 2737399, 2737516, 2737634, 2737752, 2737870, 2737987, 2738105, 2738223, 2738340, 2738458, 2738576, 2738693, 2738811, 2738929, 2739046, 2739164, 2739282, 2739399, 2739517, 2739635, 2739753, 2739870, 2739988, 2740106, 2740223, 2740341, 2740459, 2740576, 2740694, 2740812, 2740930, 2741047, 2741165, 2741283, 2741400, 2741518, 2741636, 2741754, 2741871, 2741989, 2742107, 2742225, 2742342, 2742460, 2742578, 2742695, 2742813, 2742931, 2743049, 2743166, 2743284, 2743402, 2743520, 2743637, 2743755, 2743873, 2743991, 2744108, 2744226, 2744344, 2744462, 2744579, 2744697, 2744815, 2744933, 2745050, 2745168, 2745286, 2745404, 2745521, 2745639, 2745757, 2745875, 2745992, 2746110, 2746228, 2746346, 2746463, 2746581, 2746699, 2746817, 2746935, 2747052, 2747170, 2747288, 2747406, 2747523, 2747641, 2747759, 2747877, 2747995, 2748112, 2748230, 2748348, 2748466, 2748584, 2748701, 2748819, 2748937, 2749055, 2749173, 2749290, 2749408, 2749526, 2749644, 2749762, 2749879, 2749997, 2750115, 2750233, 2750351, 2750468, 2750586, 2750704, 2750822, 2750940, 2751057, 2751175, 2751293, 2751411, 2751529, 2751647, 2751764, 2751882, 2752000, 2752118, 2752236, 2752354, 2752471, 2752589, 2752707, 2752825, 2752943, 2753061, 2753178, 2753296, 2753414, 2753532, 2753650, 2753768, 2753886, 2754003, 2754121, 2754239, 2754357, 2754475, 2754593, 2754711, 2754828, 2754946, 2755064, 2755182, 2755300, 2755418, 2755536, 2755653, 2755771, 2755889, 2756007, 2756125, 2756243, 2756361, 2756479, 2756596, 2756714, 2756832, 2756950, 2757068, 2757186, 2757304, 2757422, 2757539, 2757657, 2757775, 2757893, 2758011, 2758129, 2758247, 2758365, 2758483, 2758601, 2758718, 2758836, 2758954, 2759072, 2759190, 2759308, 2759426, 2759544, 2759662, 2759780, 2759897, 2760015, 2760133, 2760251, 2760369, 2760487, 2760605, 2760723, 2760841, 2760959, 2761077, 2761195, 2761313, 2761430, 2761548, 2761666, 2761784, 2761902, 2762020, 2762138, 2762256, 2762374, 2762492, 2762610, 2762728, 2762846, 2762964, 2763082, 2763200, 2763317, 2763435, 2763553, 2763671, 2763789, 2763907, 2764025, 2764143, 2764261, 2764379, 2764497, 2764615, 2764733, 2764851, 2764969, 2765087, 2765205, 2765323, 2765441, 2765559, 2765677, 2765795, 2765913, 2766031, 2766149, 2766267, 2766385, 2766503, 2766621, 2766739, 2766857, 2766975, 2767092, 2767210, 2767328, 2767446, 2767564, 2767682, 2767800, 2767918, 2768036, 2768154, 2768272, 2768390, 2768508, 2768626, 2768744, 2768862, 2768980, 2769098, 2769217, 2769335, 2769453, 2769571, 2769689, 2769807, 2769925, 2770043, 2770161, 2770279, 2770397, 2770515, 2770633, 2770751, 2770869, 2770987, 2771105, 2771223, 2771341, 2771459, 2771577, 2771695, 2771813, 2771931, 2772049, 2772167, 2772285, 2772403, 2772521, 2772639, 2772757, 2772875, 2772994, 2773112, 2773230, 2773348, 2773466, 2773584, 2773702, 2773820, 2773938, 2774056, 2774174, 2774292, 2774410, 2774528, 2774646, 2774764, 2774883, 2775001, 2775119, 2775237, 2775355, 2775473, 2775591, 2775709, 2775827, 2775945, 2776063, 2776181, 2776299, 2776418, 2776536, 2776654, 2776772, 2776890, 2777008, 2777126, 2777244, 2777362, 2777480, 2777598, 2777717, 2777835, 2777953, 2778071, 2778189, 2778307, 2778425, 2778543, 2778661, 2778780, 2778898, 2779016, 2779134, 2779252, 2779370, 2779488, 2779606, 2779724, 2779843, 2779961, 2780079, 2780197, 2780315, 2780433, 2780551, 2780670, 2780788, 2780906, 2781024, 2781142, 2781260, 2781378, 2781496, 2781615, 2781733, 2781851, 2781969, 2782087, 2782205, 2782323, 2782442, 2782560, 2782678, 2782796, 2782914, 2783032, 2783151, 2783269, 2783387, 2783505, 2783623, 2783741, 2783860, 2783978, 2784096, 2784214, 2784332, 2784450, 2784569, 2784687, 2784805, 2784923, 2785041, 2785159, 2785278, 2785396, 2785514, 2785632, 2785750, 2785869, 2785987, 2786105, 2786223, 2786341, 2786460, 2786578, 2786696, 2786814, 2786932, 2787051, 2787169, 2787287, 2787405, 2787523, 2787642, 2787760, 2787878, 2787996, 2788114, 2788233, 2788351, 2788469, 2788587, 2788705, 2788824, 2788942, 2789060, 2789178, 2789297, 2789415, 2789533, 2789651, 2789769, 2789888, 2790006, 2790124, 2790242, 2790361, 2790479, 2790597, 2790715, 2790834, 2790952, 2791070, 2791188, 2791307, 2791425, 2791543, 2791661, 2791780, 2791898, 2792016, 2792134, 2792253, 2792371, 2792489, 2792607, 2792726, 2792844, 2792962, 2793080, 2793199, 2793317, 2793435, 2793553, 2793672, 2793790, 2793908, 2794027, 2794145, 2794263, 2794381, 2794500, 2794618, 2794736, 2794854, 2794973, 2795091, 2795209, 2795328, 2795446, 2795564, 2795682, 2795801, 2795919, 2796037, 2796156, 2796274, 2796392, 2796511, 2796629, 2796747, 2796865, 2796984, 2797102, 2797220, 2797339, 2797457, 2797575, 2797694, 2797812, 2797930, 2798049, 2798167, 2798285, 2798403, 2798522, 2798640, 2798758, 2798877, 2798995, 2799113, 2799232, 2799350, 2799468, 2799587, 2799705, 2799823, 2799942, 2800060, 2800178, 2800297, 2800415, 2800533, 2800652, 2800770, 2800889, 2801007, 2801125, 2801244, 2801362, 2801480, 2801599, 2801717, 2801835, 2801954, 2802072, 2802190, 2802309, 2802427, 2802545, 2802664, 2802782, 2802901, 2803019, 2803137, 2803256, 2803374, 2803492, 2803611, 2803729, 2803848, 2803966, 2804084, 2804203, 2804321, 2804439, 2804558, 2804676, 2804795, 2804913, 2805031, 2805150, 2805268, 2805387, 2805505, 2805623, 2805742, 2805860, 2805979, 2806097, 2806215, 2806334, 2806452, 2806571, 2806689, 2806807, 2806926, 2807044, 2807163, 2807281, 2807399, 2807518, 2807636, 2807755, 2807873, 2807992, 2808110, 2808228, 2808347, 2808465, 2808584, 2808702, 2808821, 2808939, 2809057, 2809176, 2809294, 2809413, 2809531, 2809650, 2809768, 2809886, 2810005, 2810123, 2810242, 2810360, 2810479, 2810597, 2810716, 2810834, 2810952, 2811071, 2811189, 2811308, 2811426, 2811545, 2811663, 2811782, 2811900, 2812019, 2812137, 2812256, 2812374, 2812492, 2812611, 2812729, 2812848, 2812966, 2813085, 2813203, 2813322, 2813440, 2813559, 2813677, 2813796, 2813914, 2814033, 2814151, 2814270, 2814388, 2814507, 2814625, 2814744, 2814862, 2814981, 2815099, 2815218, 2815336, 2815455, 2815573, 2815692, 2815810, 2815929, 2816047, 2816166, 2816284, 2816403, 2816521, 2816640, 2816758, 2816877, 2816995, 2817114, 2817232, 2817351, 2817469, 2817588, 2817706, 2817825, 2817943, 2818062, 2818180, 2818299, 2818418, 2818536, 2818655, 2818773, 2818892, 2819010, 2819129, 2819247, 2819366, 2819484, 2819603, 2819721, 2819840, 2819959, 2820077, 2820196, 2820314, 2820433, 2820551, 2820670, 2820788, 2820907, 2821026, 2821144, 2821263, 2821381, 2821500, 2821618, 2821737, 2821855, 2821974, 2822093, 2822211, 2822330, 2822448, 2822567, 2822685, 2822804, 2822923, 2823041, 2823160, 2823278, 2823397, 2823516, 2823634, 2823753, 2823871, 2823990, 2824109, 2824227, 2824346, 2824464, 2824583, 2824701, 2824820, 2824939, 2825057, 2825176, 2825294, 2825413, 2825532, 2825650, 2825769, 2825888, 2826006, 2826125, 2826243, 2826362, 2826481, 2826599, 2826718, 2826836, 2826955, 2827074, 2827192, 2827311, 2827430, 2827548, 2827667, 2827785, 2827904, 2828023, 2828141, 2828260, 2828379, 2828497, 2828616, 2828735, 2828853, 2828972, 2829090, 2829209, 2829328, 2829446, 2829565, 2829684, 2829802, 2829921, 2830040, 2830158, 2830277, 2830396, 2830514, 2830633, 2830752, 2830870, 2830989, 2831108, 2831226, 2831345, 2831464, 2831582, 2831701, 2831820, 2831938, 2832057, 2832176, 2832294, 2832413, 2832532, 2832650, 2832769, 2832888, 2833006, 2833125, 2833244, 2833363, 2833481, 2833600, 2833719, 2833837, 2833956, 2834075, 2834193, 2834312, 2834431, 2834549, 2834668, 2834787, 2834906, 2835024, 2835143, 2835262, 2835380, 2835499, 2835618, 2835737, 2835855, 2835974, 2836093, 2836211, 2836330, 2836449, 2836568, 2836686, 2836805, 2836924, 2837043, 2837161, 2837280, 2837399, 2837517, 2837636, 2837755, 2837874, 2837992, 2838111, 2838230, 2838349, 2838467, 2838586, 2838705, 2838824, 2838942, 2839061, 2839180, 2839299, 2839417, 2839536, 2839655, 2839774, 2839892, 2840011, 2840130, 2840249, 2840367, 2840486, 2840605, 2840724, 2840842, 2840961, 2841080, 2841199, 2841318, 2841436, 2841555, 2841674, 2841793, 2841911, 2842030, 2842149, 2842268, 2842387, 2842505, 2842624, 2842743, 2842862, 2842981, 2843099, 2843218, 2843337, 2843456, 2843575, 2843693, 2843812, 2843931, 2844050, 2844169, 2844287, 2844406, 2844525, 2844644, 2844763, 2844881, 2845000, 2845119, 2845238, 2845357, 2845475, 2845594, 2845713, 2845832, 2845951, 2846070, 2846188, 2846307, 2846426, 2846545, 2846664, 2846783, 2846901, 2847020, 2847139, 2847258, 2847377, 2847496, 2847614, 2847733, 2847852, 2847971, 2848090, 2848209, 2848327, 2848446, 2848565, 2848684, 2848803, 2848922, 2849041, 2849159, 2849278, 2849397, 2849516, 2849635, 2849754, 2849873, 2849991, 2850110, 2850229, 2850348, 2850467, 2850586, 2850705, 2850824, 2850942, 2851061, 2851180, 2851299, 2851418, 2851537, 2851656, 2851775, 2851893, 2852012, 2852131, 2852250, 2852369, 2852488, 2852607, 2852726, 2852845, 2852963, 2853082, 2853201, 2853320, 2853439, 2853558, 2853677, 2853796, 2853915, 2854034, 2854153, 2854271, 2854390, 2854509, 2854628, 2854747, 2854866, 2854985, 2855104, 2855223, 2855342, 2855461, 2855580, 2855698, 2855817, 2855936, 2856055, 2856174, 2856293, 2856412, 2856531, 2856650, 2856769, 2856888, 2857007, 2857126, 2857245, 2857364, 2857483, 2857601, 2857720, 2857839, 2857958, 2858077, 2858196, 2858315, 2858434, 2858553, 2858672, 2858791, 2858910, 2859029, 2859148, 2859267, 2859386, 2859505, 2859624, 2859743, 2859862, 2859981, 2860100, 2860219, 2860338, 2860457, 2860576, 2860694, 2860813, 2860932, 2861051, 2861170, 2861289, 2861408, 2861527, 2861646, 2861765, 2861884, 2862003, 2862122, 2862241, 2862360, 2862479, 2862598, 2862717, 2862836, 2862955, 2863074, 2863193, 2863312, 2863431, 2863550, 2863669, 2863788, 2863907, 2864026, 2864145, 2864264, 2864383, 2864502, 2864621, 2864741, 2864860, 2864979, 2865098, 2865217, 2865336, 2865455, 2865574, 2865693, 2865812, 2865931, 2866050, 2866169, 2866288, 2866407, 2866526, 2866645, 2866764, 2866883, 2867002, 2867121, 2867240, 2867359, 2867478, 2867597, 2867716, 2867836, 2867955, 2868074, 2868193, 2868312, 2868431, 2868550, 2868669, 2868788, 2868907, 2869026, 2869145, 2869264, 2869383, 2869502, 2869621, 2869741, 2869860, 2869979, 2870098, 2870217, 2870336, 2870455, 2870574, 2870693, 2870812, 2870931, 2871050, 2871170, 2871289, 2871408, 2871527, 2871646, 2871765, 2871884, 2872003, 2872122, 2872241, 2872360, 2872480, 2872599, 2872718, 2872837, 2872956, 2873075, 2873194, 2873313, 2873432, 2873552, 2873671, 2873790, 2873909, 2874028, 2874147, 2874266, 2874385, 2874505, 2874624, 2874743, 2874862, 2874981, 2875100, 2875219, 2875338, 2875458, 2875577, 2875696, 2875815, 2875934, 2876053, 2876172, 2876292, 2876411, 2876530, 2876649, 2876768, 2876887, 2877006, 2877126, 2877245, 2877364, 2877483, 2877602, 2877721, 2877841, 2877960, 2878079, 2878198, 2878317, 2878436, 2878556, 2878675, 2878794, 2878913, 2879032, 2879151, 2879271, 2879390, 2879509, 2879628, 2879747, 2879866, 2879986, 2880105, 2880224, 2880343, 2880462, 2880582, 2880701, 2880820, 2880939, 2881058, 2881178, 2881297, 2881416, 2881535, 2881654, 2881774, 2881893, 2882012, 2882131, 2882250, 2882370, 2882489, 2882608, 2882727, 2882846, 2882966, 2883085, 2883204, 2883323, 2883442, 2883562, 2883681, 2883800, 2883919, 2884039, 2884158, 2884277, 2884396, 2884516, 2884635, 2884754, 2884873, 2884992, 2885112, 2885231, 2885350, 2885469, 2885589, 2885708, 2885827, 2885946, 2886066, 2886185, 2886304, 2886423, 2886543, 2886662, 2886781, 2886900, 2887020, 2887139, 2887258, 2887377, 2887497, 2887616, 2887735, 2887854, 2887974, 2888093, 2888212, 2888332, 2888451, 2888570, 2888689, 2888809, 2888928, 2889047, 2889166, 2889286, 2889405, 2889524, 2889644, 2889763, 2889882, 2890001, 2890121, 2890240, 2890359, 2890479, 2890598, 2890717, 2890837, 2890956, 2891075, 2891194, 2891314, 2891433, 2891552, 2891672, 2891791, 2891910, 2892030, 2892149, 2892268, 2892388, 2892507, 2892626, 2892745, 2892865, 2892984, 2893103, 2893223, 2893342, 2893461, 2893581, 2893700, 2893819, 2893939, 2894058, 2894177, 2894297, 2894416, 2894535, 2894655, 2894774, 2894893, 2895013, 2895132, 2895251, 2895371, 2895490, 2895609, 2895729, 2895848, 2895968, 2896087, 2896206, 2896326, 2896445, 2896564, 2896684, 2896803, 2896922, 2897042, 2897161, 2897280, 2897400, 2897519, 2897639, 2897758, 2897877, 2897997, 2898116, 2898235, 2898355, 2898474, 2898594, 2898713, 2898832, 2898952, 2899071, 2899190, 2899310, 2899429, 2899549, 2899668, 2899787, 2899907, 2900026, 2900146, 2900265, 2900384, 2900504, 2900623, 2900743, 2900862, 2900981, 2901101, 2901220, 2901340, 2901459, 2901578, 2901698, 2901817, 2901937, 2902056, 2902176, 2902295, 2902414, 2902534, 2902653, 2902773, 2902892, 2903012, 2903131, 2903250, 2903370, 2903489, 2903609, 2903728, 2903848, 2903967, 2904086, 2904206, 2904325, 2904445, 2904564, 2904684, 2904803, 2904922, 2905042, 2905161, 2905281, 2905400, 2905520, 2905639, 2905759, 2905878, 2905998, 2906117, 2906236, 2906356, 2906475, 2906595, 2906714, 2906834, 2906953, 2907073, 2907192, 2907312, 2907431, 2907551, 2907670, 2907790, 2907909, 2908029, 2908148, 2908268, 2908387, 2908506, 2908626, 2908745, 2908865, 2908984, 2909104, 2909223, 2909343, 2909462, 2909582, 2909701, 2909821, 2909940, 2910060, 2910179, 2910299, 2910418, 2910538, 2910657, 2910777, 2910896, 2911016, 2911135, 2911255, 2911374, 2911494, 2911614, 2911733, 2911853, 2911972, 2912092, 2912211, 2912331, 2912450, 2912570, 2912689, 2912809, 2912928, 2913048, 2913167, 2913287, 2913406, 2913526, 2913645, 2913765, 2913885, 2914004, 2914124, 2914243, 2914363, 2914482, 2914602, 2914721, 2914841, 2914961, 2915080, 2915200, 2915319, 2915439, 2915558, 2915678, 2915797, 2915917, 2916037, 2916156, 2916276, 2916395, 2916515, 2916634, 2916754, 2916874, 2916993, 2917113, 2917232, 2917352, 2917471, 2917591, 2917711, 2917830, 2917950, 2918069, 2918189, 2918308, 2918428, 2918548, 2918667, 2918787, 2918906, 2919026, 2919146, 2919265, 2919385, 2919504, 2919624, 2919744, 2919863, 2919983, 2920102, 2920222, 2920342, 2920461, 2920581, 2920701, 2920820, 2920940, 2921059, 2921179, 2921299, 2921418, 2921538, 2921657, 2921777, 2921897, 2922016, 2922136, 2922256, 2922375, 2922495, 2922614, 2922734, 2922854, 2922973, 2923093, 2923213, 2923332, 2923452, 2923572, 2923691, 2923811, 2923931, 2924050, 2924170, 2924289, 2924409, 2924529, 2924648, 2924768, 2924888, 2925007, 2925127, 2925247, 2925366, 2925486, 2925606, 2925725, 2925845, 2925965, 2926084, 2926204, 2926324, 2926443, 2926563, 2926683, 2926802, 2926922, 2927042, 2927162, 2927281, 2927401, 2927521, 2927640, 2927760, 2927880, 2927999, 2928119, 2928239, 2928358, 2928478, 2928598, 2928717, 2928837, 2928957, 2929077, 2929196, 2929316, 2929436, 2929555, 2929675, 2929795, 2929915, 2930034, 2930154, 2930274, 2930393, 2930513, 2930633, 2930753, 2930872, 2930992, 2931112, 2931231, 2931351, 2931471, 2931591, 2931710, 2931830, 2931950, 2932070, 2932189, 2932309, 2932429, 2932548, 2932668, 2932788, 2932908, 2933027, 2933147, 2933267, 2933387, 2933506, 2933626, 2933746, 2933866, 2933985, 2934105, 2934225, 2934345, 2934464, 2934584, 2934704, 2934824, 2934944, 2935063, 2935183, 2935303, 2935423, 2935542, 2935662, 2935782, 2935902, 2936021, 2936141, 2936261, 2936381, 2936501, 2936620, 2936740, 2936860, 2936980, 2937099, 2937219, 2937339, 2937459, 2937579, 2937698, 2937818, 2937938, 2938058, 2938178, 2938297, 2938417, 2938537, 2938657, 2938777, 2938896, 2939016, 2939136, 2939256, 2939376, 2939495, 2939615, 2939735, 2939855, 2939975, 2940095, 2940214, 2940334, 2940454, 2940574, 2940694, 2940814, 2940933, 2941053, 2941173, 2941293, 2941413, 2941532, 2941652, 2941772, 2941892, 2942012, 2942132, 2942252, 2942371, 2942491, 2942611, 2942731, 2942851, 2942971, 2943090, 2943210, 2943330, 2943450, 2943570, 2943690, 2943810, 2943929, 2944049, 2944169, 2944289, 2944409, 2944529, 2944649, 2944768, 2944888, 2945008, 2945128, 2945248, 2945368, 2945488, 2945608, 2945727, 2945847, 2945967, 2946087, 2946207, 2946327, 2946447, 2946567, 2946687, 2946806, 2946926, 2947046, 2947166, 2947286, 2947406, 2947526, 2947646, 2947766, 2947885, 2948005, 2948125, 2948245, 2948365, 2948485, 2948605, 2948725, 2948845, 2948965, 2949085, 2949204, 2949324, 2949444, 2949564, 2949684, 2949804, 2949924, 2950044, 2950164, 2950284, 2950404, 2950524, 2950644, 2950763, 2950883, 2951003, 2951123, 2951243, 2951363, 2951483, 2951603, 2951723, 2951843, 2951963, 2952083, 2952203, 2952323, 2952443, 2952563, 2952683, 2952803, 2952922, 2953042, 2953162, 2953282, 2953402, 2953522, 2953642, 2953762, 2953882, 2954002, 2954122, 2954242, 2954362, 2954482, 2954602, 2954722, 2954842, 2954962, 2955082, 2955202, 2955322, 2955442, 2955562, 2955682, 2955802, 2955922, 2956042, 2956162, 2956282, 2956402, 2956522, 2956642, 2956762, 2956882, 2957002, 2957122, 2957242, 2957362, 2957482, 2957602, 2957722, 2957842, 2957962, 2958082, 2958202, 2958322, 2958442, 2958562, 2958682, 2958802, 2958922, 2959042, 2959162, 2959282, 2959402, 2959522, 2959642, 2959762, 2959882, 2960002, 2960122, 2960242, 2960362, 2960482, 2960602, 2960722, 2960842, 2960962, 2961082, 2961202, 2961322, 2961442, 2961562, 2961683, 2961803, 2961923, 2962043, 2962163, 2962283, 2962403, 2962523, 2962643, 2962763, 2962883, 2963003, 2963123, 2963243, 2963363, 2963483, 2963603, 2963724, 2963844, 2963964, 2964084, 2964204, 2964324, 2964444, 2964564, 2964684, 2964804, 2964924, 2965044, 2965164, 2965285, 2965405, 2965525, 2965645, 2965765, 2965885, 2966005, 2966125, 2966245, 2966365, 2966485, 2966606, 2966726, 2966846, 2966966, 2967086, 2967206, 2967326, 2967446, 2967566, 2967686, 2967807, 2967927, 2968047, 2968167, 2968287, 2968407, 2968527, 2968647, 2968768, 2968888, 2969008, 2969128, 2969248, 2969368, 2969488, 2969608, 2969729, 2969849, 2969969, 2970089, 2970209, 2970329, 2970449, 2970570, 2970690, 2970810, 2970930, 2971050, 2971170, 2971290, 2971411, 2971531, 2971651, 2971771, 2971891, 2972011, 2972131, 2972252, 2972372, 2972492, 2972612, 2972732, 2972852, 2972973, 2973093, 2973213, 2973333, 2973453, 2973573, 2973694, 2973814, 2973934, 2974054, 2974174, 2974295, 2974415, 2974535, 2974655, 2974775, 2974895, 2975016, 2975136, 2975256, 2975376, 2975496, 2975617, 2975737, 2975857, 2975977, 2976097, 2976218, 2976338, 2976458, 2976578, 2976698, 2976819, 2976939, 2977059, 2977179, 2977299, 2977420, 2977540, 2977660, 2977780, 2977901, 2978021, 2978141, 2978261, 2978381, 2978502, 2978622, 2978742, 2978862, 2978983, 2979103, 2979223, 2979343, 2979463, 2979584, 2979704, 2979824, 2979944, 2980065, 2980185, 2980305, 2980425, 2980546, 2980666, 2980786, 2980906, 2981027, 2981147, 2981267, 2981387, 2981508, 2981628, 2981748, 2981868, 2981989, 2982109, 2982229, 2982349, 2982470, 2982590, 2982710, 2982831, 2982951, 2983071, 2983191, 2983312, 2983432, 2983552, 2983672, 2983793, 2983913, 2984033, 2984154, 2984274, 2984394, 2984514, 2984635, 2984755, 2984875, 2984996, 2985116, 2985236, 2985357, 2985477, 2985597, 2985717, 2985838, 2985958, 2986078, 2986199, 2986319, 2986439, 2986560, 2986680, 2986800, 2986920, 2987041, 2987161, 2987281, 2987402, 2987522, 2987642, 2987763, 2987883, 2988003, 2988124, 2988244, 2988364, 2988485, 2988605, 2988725, 2988846, 2988966, 2989086, 2989207, 2989327, 2989447, 2989568, 2989688, 2989808, 2989929, 2990049, 2990169, 2990290, 2990410, 2990530, 2990651, 2990771, 2990892, 2991012, 2991132, 2991253, 2991373, 2991493, 2991614, 2991734, 2991854, 2991975, 2992095, 2992216, 2992336, 2992456, 2992577, 2992697, 2992817, 2992938, 2993058, 2993179, 2993299, 2993419, 2993540, 2993660, 2993780, 2993901, 2994021, 2994142, 2994262, 2994382, 2994503, 2994623, 2994744, 2994864, 2994984, 2995105, 2995225, 2995346, 2995466, 2995586, 2995707, 2995827, 2995948, 2996068, 2996188, 2996309, 2996429, 2996550, 2996670, 2996791, 2996911, 2997031, 2997152, 2997272, 2997393, 2997513, 2997634, 2997754, 2997874, 2997995, 2998115, 2998236, 2998356, 2998477, 2998597, 2998717, 2998838, 2998958, 2999079, 2999199, 2999320, 2999440, 2999561, 2999681, 2999801, 2999922, 3000042, 3000163, 3000283, 3000404, 3000524, 3000645, 3000765, 3000886, 3001006, 3001126, 3001247, 3001367, 3001488, 3001608, 3001729, 3001849, 3001970, 3002090, 3002211, 3002331, 3002452, 3002572, 3002693, 3002813, 3002934, 3003054, 3003175, 3003295, 3003415, 3003536, 3003656, 3003777, 3003897, 3004018, 3004138, 3004259, 3004379, 3004500, 3004620, 3004741, 3004861, 3004982, 3005102, 3005223, 3005343, 3005464, 3005584, 3005705, 3005826, 3005946, 3006067, 3006187, 3006308, 3006428, 3006549, 3006669, 3006790, 3006910, 3007031, 3007151, 3007272, 3007392, 3007513, 3007633, 3007754, 3007874, 3007995, 3008116, 3008236, 3008357, 3008477, 3008598, 3008718, 3008839, 3008959, 3009080, 3009200, 3009321, 3009442, 3009562, 3009683, 3009803, 3009924, 3010044, 3010165, 3010285, 3010406, 3010527, 3010647, 3010768, 3010888, 3011009, 3011129, 3011250, 3011371, 3011491, 3011612, 3011732, 3011853, 3011973, 3012094, 3012215, 3012335, 3012456, 3012576, 3012697, 3012817, 3012938, 3013059, 3013179, 3013300, 3013420, 3013541, 3013662, 3013782, 3013903, 3014023, 3014144, 3014265, 3014385, 3014506, 3014626, 3014747, 3014868, 3014988, 3015109, 3015230, 3015350, 3015471, 3015591, 3015712, 3015833, 3015953, 3016074, 3016194, 3016315, 3016436, 3016556, 3016677, 3016798, 3016918, 3017039, 3017159, 3017280, 3017401, 3017521, 3017642, 3017763, 3017883, 3018004, 3018125, 3018245, 3018366, 3018487, 3018607, 3018728, 3018848, 3018969, 3019090, 3019210, 3019331, 3019452, 3019572, 3019693, 3019814, 3019934, 3020055, 3020176, 3020296, 3020417, 3020538, 3020658, 3020779, 3020900, 3021020, 3021141, 3021262, 3021382, 3021503, 3021624, 3021745, 3021865, 3021986, 3022107, 3022227, 3022348, 3022469, 3022589, 3022710, 3022831, 3022951, 3023072, 3023193, 3023313, 3023434, 3023555, 3023676, 3023796, 3023917, 3024038, 3024158, 3024279, 3024400, 3024521, 3024641, 3024762, 3024883, 3025003, 3025124, 3025245, 3025366, 3025486, 3025607, 3025728, 3025848, 3025969, 3026090, 3026211, 3026331, 3026452, 3026573, 3026694, 3026814, 3026935, 3027056, 3027177, 3027297, 3027418, 3027539, 3027659, 3027780, 3027901, 3028022, 3028142, 3028263, 3028384, 3028505, 3028625, 3028746, 3028867, 3028988, 3029109, 3029229, 3029350, 3029471, 3029592, 3029712, 3029833, 3029954, 3030075, 3030195, 3030316, 3030437, 3030558, 3030679, 3030799, 3030920, 3031041, 3031162, 3031282, 3031403, 3031524, 3031645, 3031766, 3031886, 3032007, 3032128, 3032249, 3032370, 3032490, 3032611, 3032732, 3032853, 3032974, 3033094, 3033215, 3033336, 3033457, 3033578, 3033698, 3033819, 3033940, 3034061, 3034182, 3034302, 3034423, 3034544, 3034665, 3034786, 3034906, 3035027, 3035148, 3035269, 3035390, 3035511, 3035631, 3035752, 3035873, 3035994, 3036115, 3036236, 3036356, 3036477, 3036598, 3036719, 3036840, 3036961, 3037081, 3037202, 3037323, 3037444, 3037565, 3037686, 3037807, 3037927, 3038048, 3038169, 3038290, 3038411, 3038532, 3038653, 3038773, 3038894, 3039015, 3039136, 3039257, 3039378, 3039499, 3039620, 3039740, 3039861, 3039982, 3040103, 3040224, 3040345, 3040466, 3040587, 3040707, 3040828, 3040949, 3041070, 3041191, 3041312, 3041433, 3041554, 3041675, 3041795, 3041916, 3042037, 3042158, 3042279, 3042400, 3042521, 3042642, 3042763, 3042884, 3043004, 3043125, 3043246, 3043367, 3043488, 3043609, 3043730, 3043851, 3043972, 3044093, 3044214, 3044334, 3044455, 3044576, 3044697, 3044818, 3044939, 3045060, 3045181, 3045302, 3045423, 3045544, 3045665, 3045786, 3045907, 3046028, 3046148, 3046269, 3046390, 3046511, 3046632, 3046753, 3046874, 3046995, 3047116, 3047237, 3047358, 3047479, 3047600, 3047721, 3047842, 3047963, 3048084, 3048205, 3048326, 3048447, 3048568, 3048688, 3048809, 3048930, 3049051, 3049172, 3049293, 3049414, 3049535, 3049656, 3049777, 3049898, 3050019, 3050140, 3050261, 3050382, 3050503, 3050624, 3050745, 3050866, 3050987, 3051108, 3051229, 3051350, 3051471, 3051592, 3051713, 3051834, 3051955, 3052076, 3052197, 3052318, 3052439, 3052560, 3052681, 3052802, 3052923, 3053044, 3053165, 3053286, 3053407, 3053528, 3053649, 3053770, 3053891, 3054012, 3054133, 3054254, 3054375, 3054496, 3054617, 3054738, 3054859, 3054981, 3055102, 3055223, 3055344, 3055465, 3055586, 3055707, 3055828, 3055949, 3056070, 3056191, 3056312, 3056433, 3056554, 3056675, 3056796, 3056917, 3057038, 3057159, 3057280, 3057401, 3057523, 3057644, 3057765, 3057886, 3058007, 3058128, 3058249, 3058370, 3058491, 3058612, 3058733, 3058854, 3058975, 3059096, 3059218, 3059339, 3059460, 3059581, 3059702, 3059823, 3059944, 3060065, 3060186, 3060307, 3060428, 3060549, 3060671, 3060792, 3060913, 3061034, 3061155, 3061276, 3061397, 3061518, 3061639, 3061760, 3061882, 3062003, 3062124, 3062245, 3062366, 3062487, 3062608, 3062729, 3062850, 3062972, 3063093, 3063214, 3063335, 3063456, 3063577, 3063698, 3063819, 3063941, 3064062, 3064183, 3064304, 3064425, 3064546, 3064667, 3064788, 3064910, 3065031, 3065152, 3065273, 3065394, 3065515, 3065636, 3065758, 3065879, 3066000, 3066121, 3066242, 3066363, 3066485, 3066606, 3066727, 3066848, 3066969, 3067090, 3067212, 3067333, 3067454, 3067575, 3067696, 3067817, 3067939, 3068060, 3068181, 3068302, 3068423, 3068544, 3068666, 3068787, 3068908, 3069029, 3069150, 3069271, 3069393, 3069514, 3069635, 3069756, 3069877, 3069999, 3070120, 3070241, 3070362, 3070483, 3070605, 3070726, 3070847, 3070968, 3071089, 3071211, 3071332, 3071453, 3071574, 3071695, 3071817, 3071938, 3072059, 3072180, 3072302, 3072423, 3072544, 3072665, 3072786, 3072908, 3073029, 3073150, 3073271, 3073393, 3073514, 3073635, 3073756, 3073877, 3073999, 3074120, 3074241, 3074362, 3074484, 3074605, 3074726, 3074847, 3074969, 3075090, 3075211, 3075332, 3075454, 3075575, 3075696, 3075817, 3075939, 3076060, 3076181, 3076302, 3076424, 3076545, 3076666, 3076787, 3076909, 3077030, 3077151, 3077272, 3077394, 3077515, 3077636, 3077758, 3077879, 3078000, 3078121, 3078243, 3078364, 3078485, 3078607, 3078728, 3078849, 3078970, 3079092, 3079213, 3079334, 3079456, 3079577, 3079698, 3079819, 3079941, 3080062, 3080183, 3080305, 3080426, 3080547, 3080669, 3080790, 3080911, 3081032, 3081154, 3081275, 3081396, 3081518, 3081639, 3081760, 3081882, 3082003, 3082124, 3082246, 3082367, 3082488, 3082610, 3082731, 3082852, 3082974, 3083095, 3083216, 3083338, 3083459, 3083580, 3083702, 3083823, 3083944, 3084066, 3084187, 3084308, 3084430, 3084551, 3084672, 3084794, 3084915, 3085036, 3085158, 3085279, 3085400, 3085522, 3085643, 3085765, 3085886, 3086007, 3086129, 3086250, 3086371, 3086493, 3086614, 3086735, 3086857, 3086978, 3087100, 3087221, 3087342, 3087464, 3087585, 3087706, 3087828, 3087949, 3088071, 3088192, 3088313, 3088435, 3088556, 3088678, 3088799, 3088920, 3089042, 3089163, 3089284, 3089406, 3089527, 3089649, 3089770, 3089891, 3090013, 3090134, 3090256, 3090377, 3090499, 3090620, 3090741, 3090863, 3090984, 3091106, 3091227, 3091348, 3091470, 3091591, 3091713, 3091834, 3091956, 3092077, 3092198, 3092320, 3092441, 3092563, 3092684, 3092806, 3092927, 3093048, 3093170, 3093291, 3093413, 3093534, 3093656, 3093777, 3093899, 3094020, 3094141, 3094263, 3094384, 3094506, 3094627, 3094749, 3094870, 3094992, 3095113, 3095234, 3095356, 3095477, 3095599, 3095720, 3095842, 3095963, 3096085, 3096206, 3096328, 3096449, 3096571, 3096692, 3096814, 3096935, 3097057, 3097178, 3097299, 3097421, 3097542, 3097664, 3097785, 3097907, 3098028, 3098150, 3098271, 3098393, 3098514, 3098636, 3098757, 3098879, 3099000, 3099122, 3099243, 3099365, 3099486, 3099608, 3099729, 3099851, 3099972, 3100094, 3100215, 3100337, 3100458, 3100580, 3100701, 3100823, 3100945, 3101066, 3101188, 3101309, 3101431, 3101552, 3101674, 3101795, 3101917, 3102038, 3102160, 3102281, 3102403, 3102524, 3102646, 3102767, 3102889, 3103011, 3103132, 3103254, 3103375, 3103497, 3103618, 3103740, 3103861, 3103983, 3104104, 3104226, 3104348, 3104469, 3104591, 3104712, 3104834, 3104955, 3105077, 3105199, 3105320, 3105442, 3105563, 3105685, 3105806, 3105928, 3106050, 3106171, 3106293, 3106414, 3106536, 3106657, 3106779, 3106901, 3107022, 3107144, 3107265, 3107387, 3107508, 3107630, 3107752, 3107873, 3107995, 3108116, 3108238, 3108360, 3108481, 3108603, 3108724, 3108846, 3108968, 3109089, 3109211, 3109332, 3109454, 3109576, 3109697, 3109819, 3109941, 3110062, 3110184, 3110305, 3110427, 3110549, 3110670, 3110792, 3110914, 3111035, 3111157, 3111278, 3111400, 3111522, 3111643, 3111765, 3111887, 3112008, 3112130, 3112251, 3112373, 3112495, 3112616, 3112738, 3112860, 3112981, 3113103, 3113225, 3113346, 3113468, 3113590, 3113711, 3113833, 3113955, 3114076, 3114198, 3114320, 3114441, 3114563, 3114685, 3114806, 3114928, 3115050, 3115171, 3115293, 3115415, 3115536, 3115658, 3115780, 3115901, 3116023, 3116145, 3116266, 3116388, 3116510, 3116631, 3116753, 3116875, 3116996, 3117118, 3117240, 3117361, 3117483, 3117605, 3117727, 3117848, 3117970, 3118092, 3118213, 3118335, 3118457, 3118578, 3118700, 3118822, 3118944, 3119065, 3119187, 3119309, 3119430, 3119552, 3119674, 3119796, 3119917, 3120039, 3120161, 3120282, 3120404, 3120526, 3120648, 3120769, 3120891, 3121013, 3121135, 3121256, 3121378, 3121500, 3121622, 3121743, 3121865, 3121987, 3122109, 3122230, 3122352, 3122474, 3122595, 3122717, 3122839, 3122961, 3123083, 3123204, 3123326, 3123448, 3123570, 3123691, 3123813, 3123935, 3124057, 3124178, 3124300, 3124422, 3124544, 3124665, 3124787, 3124909, 3125031, 3125153, 3125274, 3125396, 3125518, 3125640, 3125761, 3125883, 3126005, 3126127, 3126249, 3126370, 3126492, 3126614, 3126736, 3126858, 3126979, 3127101, 3127223, 3127345, 3127466, 3127588, 3127710, 3127832, 3127954, 3128076, 3128197, 3128319, 3128441, 3128563, 3128685, 3128806, 3128928, 3129050, 3129172, 3129294, 3129415, 3129537, 3129659, 3129781, 3129903, 3130025, 3130146, 3130268, 3130390, 3130512, 3130634, 3130756, 3130877, 3130999, 3131121, 3131243, 3131365, 3131487, 3131608, 3131730, 3131852, 3131974, 3132096, 3132218, 3132340, 3132461, 3132583, 3132705, 3132827, 3132949, 3133071, 3133193, 3133314, 3133436, 3133558, 3133680, 3133802, 3133924, 3134046, 3134167, 3134289, 3134411, 3134533, 3134655, 3134777, 3134899, 3135021, 3135143, 3135264, 3135386, 3135508, 3135630, 3135752, 3135874, 3135996, 3136118, 3136239, 3136361, 3136483, 3136605, 3136727, 3136849, 3136971, 3137093, 3137215, 3137337, 3137458, 3137580, 3137702, 3137824, 3137946, 3138068, 3138190, 3138312, 3138434, 3138556, 3138678, 3138800, 3138921, 3139043, 3139165, 3139287, 3139409, 3139531, 3139653, 3139775, 3139897, 3140019, 3140141, 3140263, 3140385, 3140507, 3140628, 3140750, 3140872, 3140994, 3141116, 3141238, 3141360, 3141482, 3141604, 3141726, 3141848, 3141970, 3142092, 3142214, 3142336, 3142458, 3142580, 3142702, 3142824, 3142946, 3143068, 3143190, 3143311, 3143433, 3143555, 3143677, 3143799, 3143921, 3144043, 3144165, 3144287, 3144409, 3144531, 3144653, 3144775, 3144897, 3145019, 3145141, 3145263, 3145385, 3145507, 3145629, 3145751, 3145873, 3145995, 3146117, 3146239, 3146361, 3146483, 3146605, 3146727, 3146849, 3146971, 3147093, 3147215, 3147337, 3147459, 3147581, 3147703, 3147825, 3147947, 3148069, 3148191, 3148313, 3148435, 3148557, 3148679, 3148801, 3148923, 3149045, 3149167, 3149289, 3149412, 3149534, 3149656, 3149778, 3149900, 3150022, 3150144, 3150266, 3150388, 3150510, 3150632, 3150754, 3150876, 3150998, 3151120, 3151242, 3151364, 3151486, 3151608, 3151730, 3151852, 3151974, 3152097, 3152219, 3152341, 3152463, 3152585, 3152707, 3152829, 3152951, 3153073, 3153195, 3153317, 3153439, 3153561, 3153683, 3153806, 3153928, 3154050, 3154172, 3154294, 3154416, 3154538, 3154660, 3154782, 3154904, 3155026, 3155148, 3155271, 3155393, 3155515, 3155637, 3155759, 3155881, 3156003, 3156125, 3156247, 3156369, 3156492, 3156614, 3156736, 3156858, 3156980, 3157102, 3157224, 3157346, 3157468, 3157591, 3157713, 3157835, 3157957, 3158079, 3158201, 3158323, 3158445, 3158568, 3158690, 3158812, 3158934, 3159056, 3159178, 3159300, 3159423, 3159545, 3159667, 3159789, 3159911, 3160033, 3160155, 3160278, 3160400, 3160522, 3160644, 3160766, 3160888, 3161010, 3161133, 3161255, 3161377, 3161499, 3161621, 3161743, 3161866, 3161988, 3162110, 3162232, 3162354, 3162476, 3162599, 3162721, 3162843, 3162965, 3163087, 3163209, 3163332, 3163454, 3163576, 3163698, 3163820, 3163943, 3164065, 3164187, 3164309, 3164431, 3164554, 3164676, 3164798, 3164920, 3165042, 3165164, 3165287, 3165409, 3165531, 3165653, 3165776, 3165898, 3166020, 3166142, 3166264, 3166387, 3166509, 3166631, 3166753, 3166875, 3166998, 3167120, 3167242, 3167364, 3167487, 3167609, 3167731, 3167853, 3167975, 3168098, 3168220, 3168342, 3168464, 3168587, 3168709, 3168831, 3168953, 3169076, 3169198, 3169320, 3169442, 3169565, 3169687, 3169809, 3169931, 3170054, 3170176, 3170298, 3170420, 3170543, 3170665, 3170787, 3170909, 3171032, 3171154, 3171276, 3171398, 3171521, 3171643, 3171765, 3171887, 3172010, 3172132, 3172254, 3172377, 3172499, 3172621, 3172743, 3172866, 3172988, 3173110, 3173232, 3173355, 3173477, 3173599, 3173722, 3173844, 3173966, 3174089, 3174211, 3174333, 3174455, 3174578, 3174700, 3174822, 3174945, 3175067, 3175189, 3175312, 3175434, 3175556, 3175678, 3175801, 3175923, 3176045, 3176168, 3176290, 3176412, 3176535, 3176657, 3176779, 3176902, 3177024, 3177146, 3177269, 3177391, 3177513, 3177636, 3177758, 3177880, 3178003, 3178125, 3178247, 3178370, 3178492, 3178614, 3178737, 3178859, 3178981, 3179104, 3179226, 3179348, 3179471, 3179593, 3179715, 3179838, 3179960, 3180082, 3180205, 3180327, 3180450, 3180572, 3180694, 3180817, 3180939, 3181061, 3181184, 3181306, 3181428, 3181551, 3181673, 3181796, 3181918, 3182040, 3182163, 3182285, 3182407, 3182530, 3182652, 3182775, 3182897, 3183019, 3183142, 3183264, 3183387, 3183509, 3183631, 3183754, 3183876, 3183999, 3184121, 3184243, 3184366, 3184488, 3184611, 3184733, 3184855, 3184978, 3185100, 3185223, 3185345, 3185467, 3185590, 3185712, 3185835, 3185957, 3186080, 3186202, 3186324, 3186447, 3186569, 3186692, 3186814, 3186936, 3187059, 3187181, 3187304, 3187426, 3187549, 3187671, 3187794, 3187916, 3188038, 3188161, 3188283, 3188406, 3188528, 3188651, 3188773, 3188896, 3189018, 3189140, 3189263, 3189385, 3189508, 3189630, 3189753, 3189875, 3189998, 3190120, 3190243, 3190365, 3190488, 3190610, 3190732, 3190855, 3190977, 3191100, 3191222, 3191345, 3191467, 3191590, 3191712, 3191835, 3191957, 3192080, 3192202, 3192325, 3192447, 3192570, 3192692, 3192815, 3192937, 3193060, 3193182, 3193305, 3193427, 3193550, 3193672, 3193795, 3193917, 3194040, 3194162, 3194285, 3194407, 3194530, 3194652, 3194775, 3194897, 3195020, 3195142, 3195265, 3195387, 3195510, 3195632, 3195755, 3195877, 3196000, 3196122, 3196245, 3196367, 3196490, 3196612, 3196735, 3196858, 3196980, 3197103, 3197225, 3197348, 3197470, 3197593, 3197715, 3197838, 3197960, 3198083, 3198206, 3198328, 3198451, 3198573, 3198696, 3198818, 3198941, 3199063, 3199186, 3199309, 3199431, 3199554, 3199676, 3199799, 3199921, 3200044, 3200166, 3200289, 3200412, 3200534, 3200657, 3200779, 3200902, 3201024, 3201147, 3201270, 3201392, 3201515, 3201637, 3201760, 3201883, 3202005, 3202128, 3202250, 3202373, 3202496, 3202618, 3202741, 3202863, 3202986, 3203109, 3203231, 3203354, 3203476, 3203599, 3203722, 3203844, 3203967, 3204089, 3204212, 3204335, 3204457, 3204580, 3204702, 3204825, 3204948, 3205070, 3205193, 3205316, 3205438, 3205561, 3205683, 3205806, 3205929, 3206051, 3206174, 3206297, 3206419, 3206542, 3206664, 3206787, 3206910, 3207032, 3207155, 3207278, 3207400, 3207523, 3207646, 3207768, 3207891, 3208014, 3208136, 3208259, 3208382, 3208504, 3208627, 3208750, 3208872, 3208995, 3209118, 3209240, 3209363, 3209486, 3209608, 3209731, 3209854, 3209976, 3210099, 3210222, 3210344, 3210467, 3210590, 3210712, 3210835, 3210958, 3211080, 3211203, 3211326, 3211448, 3211571, 3211694, 3211816, 3211939, 3212062, 3212185, 3212307, 3212430, 3212553, 3212675, 3212798, 3212921, 3213043, 3213166, 3213289, 3213412, 3213534, 3213657, 3213780, 3213902, 3214025, 3214148, 3214271, 3214393, 3214516, 3214639, 3214761, 3214884, 3215007, 3215130, 3215252, 3215375, 3215498, 3215621, 3215743, 3215866, 3215989, 3216111, 3216234, 3216357, 3216480, 3216602, 3216725, 3216848, 3216971, 3217093, 3217216, 3217339, 3217462, 3217584, 3217707, 3217830, 3217953, 3218075, 3218198, 3218321, 3218444, 3218567, 3218689, 3218812, 3218935, 3219058, 3219180, 3219303, 3219426, 3219549, 3219671, 3219794, 3219917, 3220040, 3220163, 3220285, 3220408, 3220531, 3220654, 3220776, 3220899, 3221022, 3221145, 3221268, 3221390, 3221513, 3221636, 3221759, 3221882, 3222004, 3222127, 3222250, 3222373, 3222496, 3222618, 3222741, 3222864, 3222987, 3223110, 3223232, 3223355, 3223478, 3223601, 3223724, 3223847, 3223969, 3224092, 3224215, 3224338, 3224461, 3224584, 3224706, 3224829, 3224952, 3225075, 3225198, 3225321, 3225443, 3225566, 3225689, 3225812, 3225935, 3226058, 3226180, 3226303, 3226426, 3226549, 3226672, 3226795, 3226917, 3227040, 3227163, 3227286, 3227409, 3227532, 3227655, 3227777, 3227900, 3228023, 3228146, 3228269, 3228392, 3228515, 3228638, 3228760, 3228883, 3229006, 3229129, 3229252, 3229375, 3229498, 3229621, 3229743, 3229866, 3229989, 3230112, 3230235, 3230358, 3230481, 3230604, 3230727, 3230849, 3230972, 3231095, 3231218, 3231341, 3231464, 3231587, 3231710, 3231833, 3231956, 3232078, 3232201, 3232324, 3232447, 3232570, 3232693, 3232816, 3232939, 3233062, 3233185, 3233308, 3233430, 3233553, 3233676, 3233799, 3233922, 3234045, 3234168, 3234291, 3234414, 3234537, 3234660, 3234783, 3234906, 3235029, 3235152, 3235274, 3235397, 3235520, 3235643, 3235766, 3235889, 3236012, 3236135, 3236258, 3236381, 3236504, 3236627, 3236750, 3236873, 3236996, 3237119, 3237242, 3237365, 3237488, 3237611, 3237734, 3237857, 3237979, 3238102, 3238225, 3238348, 3238471, 3238594, 3238717, 3238840, 3238963, 3239086, 3239209, 3239332, 3239455, 3239578, 3239701, 3239824, 3239947, 3240070, 3240193, 3240316, 3240439, 3240562, 3240685, 3240808, 3240931, 3241054, 3241177, 3241300, 3241423, 3241546, 3241669, 3241792, 3241915, 3242038, 3242161, 3242284, 3242407, 3242530, 3242653, 3242776, 3242899, 3243022, 3243145, 3243268, 3243391, 3243514, 3243637, 3243760, 3243884, 3244007, 3244130, 3244253, 3244376, 3244499, 3244622, 3244745, 3244868, 3244991, 3245114, 3245237, 3245360, 3245483, 3245606, 3245729, 3245852, 3245975, 3246098, 3246221, 3246344, 3246467, 3246591, 3246714, 3246837, 3246960, 3247083, 3247206, 3247329, 3247452, 3247575, 3247698, 3247821, 3247944, 3248067, 3248190, 3248314, 3248437, 3248560, 3248683, 3248806, 3248929, 3249052, 3249175, 3249298, 3249421, 3249544, 3249667, 3249791, 3249914, 3250037, 3250160, 3250283, 3250406, 3250529, 3250652, 3250775, 3250898, 3251022, 3251145, 3251268, 3251391, 3251514, 3251637, 3251760, 3251883, 3252006, 3252130, 3252253, 3252376, 3252499, 3252622, 3252745, 3252868, 3252991, 3253115, 3253238, 3253361, 3253484, 3253607, 3253730, 3253853, 3253977, 3254100, 3254223, 3254346, 3254469, 3254592, 3254715, 3254839, 3254962, 3255085, 3255208, 3255331, 3255454, 3255577, 3255701, 3255824, 3255947, 3256070, 3256193, 3256316, 3256440, 3256563, 3256686, 3256809, 3256932, 3257055, 3257179, 3257302, 3257425, 3257548, 3257671, 3257794, 3257918, 3258041, 3258164, 3258287, 3258410, 3258534, 3258657, 3258780, 3258903, 3259026, 3259150, 3259273, 3259396, 3259519, 3259642, 3259765, 3259889, 3260012, 3260135, 3260258, 3260382, 3260505, 3260628, 3260751, 3260874, 3260998, 3261121, 3261244, 3261367, 3261490, 3261614, 3261737, 3261860, 3261983, 3262107, 3262230, 3262353, 3262476, 3262599, 3262723, 3262846, 3262969, 3263092, 3263216, 3263339, 3263462, 3263585, 3263709, 3263832, 3263955, 3264078, 3264202, 3264325, 3264448, 3264571, 3264695, 3264818, 3264941, 3265064, 3265188, 3265311, 3265434, 3265557, 3265681, 3265804, 3265927, 3266050, 3266174, 3266297, 3266420, 3266543, 3266667, 3266790, 3266913, 3267037, 3267160, 3267283, 3267406, 3267530, 3267653, 3267776, 3267900, 3268023, 3268146, 3268269, 3268393, 3268516, 3268639, 3268763, 3268886, 3269009, 3269132, 3269256, 3269379, 3269502, 3269626, 3269749, 3269872, 3269996, 3270119, 3270242, 3270366, 3270489, 3270612, 3270735, 3270859, 3270982, 3271105, 3271229, 3271352, 3271475, 3271599, 3271722, 3271845, 3271969, 3272092, 3272215, 3272339, 3272462, 3272585, 3272709, 3272832, 3272955, 3273079, 3273202, 3273325, 3273449, 3273572, 3273695, 3273819, 3273942, 3274065, 3274189, 3274312, 3274436, 3274559, 3274682, 3274806, 3274929, 3275052, 3275176, 3275299, 3275422, 3275546, 3275669, 3275793, 3275916, 3276039, 3276163, 3276286, 3276409, 3276533, 3276656, 3276780, 3276903, 3277026, 3277150, 3277273, 3277396, 3277520, 3277643, 3277767, 3277890, 3278013, 3278137, 3278260, 3278384, 3278507, 3278630, 3278754, 3278877, 3279001, 3279124, 3279247, 3279371, 3279494, 3279618, 3279741, 3279864, 3279988, 3280111, 3280235, 3280358, 3280481, 3280605, 3280728, 3280852, 3280975, 3281099, 3281222, 3281345, 3281469, 3281592, 3281716, 3281839, 3281963, 3282086, 3282209, 3282333, 3282456, 3282580, 3282703, 3282827, 3282950, 3283074, 3283197, 3283320, 3283444, 3283567, 3283691, 3283814, 3283938, 3284061, 3284185, 3284308, 3284432, 3284555, 3284678, 3284802, 3284925, 3285049, 3285172, 3285296, 3285419, 3285543, 3285666, 3285790, 3285913, 3286037, 3286160, 3286284, 3286407, 3286531, 3286654, 3286778, 3286901, 3287025, 3287148, 3287272, 3287395, 3287519, 3287642, 3287765, 3287889, 3288012, 3288136, 3288259, 3288383, 3288506, 3288630, 3288754, 3288877, 3289001, 3289124, 3289248, 3289371, 3289495, 3289618, 3289742, 3289865, 3289989, 3290112, 3290236, 3290359, 3290483, 3290606, 3290730, 3290853, 3290977, 3291100, 3291224, 3291347, 3291471, 3291594, 3291718, 3291842, 3291965, 3292089, 3292212, 3292336, 3292459, 3292583, 3292706, 3292830, 3292953, 3293077, 3293201, 3293324, 3293448, 3293571, 3293695, 3293818, 3293942, 3294065, 3294189, 3294313, 3294436, 3294560, 3294683, 3294807, 3294930, 3295054, 3295178, 3295301, 3295425, 3295548, 3295672, 3295796, 3295919, 3296043, 3296166, 3296290, 3296413, 3296537, 3296661, 3296784, 3296908, 3297031, 3297155, 3297279, 3297402, 3297526, 3297649, 3297773, 3297897, 3298020, 3298144, 3298267, 3298391, 3298515, 3298638, 3298762, 3298885, 3299009, 3299133, 3299256, 3299380, 3299504, 3299627, 3299751, 3299874, 3299998, 3300122, 3300245, 3300369, 3300493, 3300616, 3300740, 3300863, 3300987, 3301111, 3301234, 3301358, 3301482, 3301605, 3301729, 3301853, 3301976, 3302100, 3302223, 3302347, 3302471, 3302594, 3302718, 3302842, 3302965, 3303089, 3303213, 3303336, 3303460, 3303584, 3303707, 3303831, 3303955, 3304078, 3304202, 3304326, 3304449, 3304573, 3304697, 3304820, 3304944, 3305068, 3305191, 3305315, 3305439, 3305562, 3305686, 3305810, 3305934, 3306057, 3306181, 3306305, 3306428, 3306552, 3306676, 3306799, 3306923, 3307047, 3307170, 3307294, 3307418, 3307542, 3307665, 3307789, 3307913, 3308036, 3308160, 3308284, 3308408, 3308531, 3308655, 3308779, 3308902, 3309026, 3309150, 3309274, 3309397, 3309521, 3309645, 3309769, 3309892, 3310016, 3310140, 3310263, 3310387, 3310511, 3310635, 3310758, 3310882, 3311006, 3311130, 3311253, 3311377, 3311501, 3311625, 3311748, 3311872, 3311996, 3312120, 3312243, 3312367, 3312491, 3312615, 3312738, 3312862, 3312986, 3313110, 3313233, 3313357, 3313481, 3313605, 3313729, 3313852, 3313976, 3314100, 3314224, 3314347, 3314471, 3314595, 3314719, 3314843, 3314966, 3315090, 3315214, 3315338, 3315461, 3315585, 3315709, 3315833, 3315957, 3316080, 3316204, 3316328, 3316452, 3316576, 3316699, 3316823, 3316947, 3317071, 3317195, 3317318, 3317442, 3317566, 3317690, 3317814, 3317937, 3318061, 3318185, 3318309, 3318433, 3318557, 3318680, 3318804, 3318928, 3319052, 3319176, 3319300, 3319423, 3319547, 3319671, 3319795, 3319919, 3320043, 3320166, 3320290, 3320414, 3320538, 3320662, 3320786, 3320909, 3321033, 3321157, 3321281, 3321405, 3321529, 3321653, 3321776, 3321900, 3322024, 3322148, 3322272, 3322396, 3322520, 3322643, 3322767, 3322891, 3323015, 3323139, 3323263, 3323387, 3323510, 3323634, 3323758, 3323882, 3324006, 3324130, 3324254, 3324378, 3324502, 3324625, 3324749, 3324873, 3324997, 3325121, 3325245, 3325369, 3325493, 3325617, 3325740, 3325864, 3325988, 3326112, 3326236, 3326360, 3326484, 3326608, 3326732, 3326856, 3326979, 3327103, 3327227, 3327351, 3327475, 3327599, 3327723, 3327847, 3327971, 3328095, 3328219, 3328343, 3328467, 3328590, 3328714, 3328838, 3328962, 3329086, 3329210, 3329334, 3329458, 3329582, 3329706, 3329830, 3329954, 3330078, 3330202, 3330326, 3330449, 3330573, 3330697, 3330821, 3330945, 3331069, 3331193, 3331317, 3331441, 3331565, 3331689, 3331813, 3331937, 3332061, 3332185, 3332309, 3332433, 3332557, 3332681, 3332805, 3332929, 3333053, 3333177, 3333301, 3333425, 3333549, 3333673, 3333797, 3333921, 3334045, 3334169, 3334293, 3334416, 3334540, 3334664, 3334788, 3334912, 3335036, 3335160, 3335284, 3335408, 3335532, 3335656, 3335780, 3335904, 3336028, 3336152, 3336276, 3336400, 3336525, 3336649, 3336773, 3336897, 3337021, 3337145, 3337269, 3337393, 3337517, 3337641, 3337765, 3337889, 3338013, 3338137, 3338261, 3338385, 3338509, 3338633, 3338757, 3338881, 3339005, 3339129, 3339253, 3339377, 3339501, 3339625, 3339749, 3339873, 3339997, 3340121, 3340245, 3340370, 3340494, 3340618, 3340742, 3340866, 3340990, 3341114, 3341238, 3341362, 3341486, 3341610, 3341734, 3341858, 3341982, 3342106, 3342230, 3342355, 3342479, 3342603, 3342727, 3342851, 3342975, 3343099, 3343223, 3343347, 3343471, 3343595, 3343719, 3343843, 3343968, 3344092, 3344216, 3344340, 3344464, 3344588, 3344712, 3344836, 3344960, 3345084, 3345209, 3345333, 3345457, 3345581, 3345705, 3345829, 3345953, 3346077, 3346201, 3346326, 3346450, 3346574, 3346698, 3346822, 3346946, 3347070, 3347194, 3347319, 3347443, 3347567, 3347691, 3347815, 3347939, 3348063, 3348187, 3348312, 3348436, 3348560, 3348684, 3348808, 3348932, 3349056, 3349181, 3349305, 3349429, 3349553, 3349677, 3349801, 3349925, 3350050, 3350174, 3350298, 3350422, 3350546, 3350670, 3350795, 3350919, 3351043, 3351167, 3351291, 3351415, 3351540, 3351664, 3351788, 3351912, 3352036, 3352160, 3352285, 3352409, 3352533, 3352657, 3352781, 3352906, 3353030, 3353154, 3353278, 3353402, 3353526, 3353651, 3353775, 3353899, 3354023, 3354147, 3354272, 3354396, 3354520, 3354644, 3354768, 3354893, 3355017, 3355141, 3355265, 3355389, 3355514, 3355638, 3355762, 3355886, 3356011, 3356135, 3356259, 3356383, 3356507, 3356632, 3356756, 3356880, 3357004, 3357129, 3357253, 3357377, 3357501, 3357625, 3357750, 3357874, 3357998, 3358122, 3358247, 3358371, 3358495, 3358619, 3358744, 3358868, 3358992, 3359116, 3359241, 3359365, 3359489, 3359613, 3359738, 3359862, 3359986, 3360110, 3360235, 3360359, 3360483, 3360608, 3360732, 3360856, 3360980, 3361105, 3361229, 3361353, 3361477, 3361602, 3361726, 3361850, 3361975, 3362099, 3362223, 3362347, 3362472, 3362596, 3362720, 3362845, 3362969, 3363093, 3363217, 3363342, 3363466, 3363590, 3363715, 3363839, 3363963, 3364087, 3364212, 3364336, 3364460, 3364585, 3364709, 3364833, 3364958, 3365082, 3365206, 3365331, 3365455, 3365579, 3365704, 3365828, 3365952, 3366077, 3366201, 3366325, 3366449, 3366574, 3366698, 3366822, 3366947, 3367071, 3367195, 3367320, 3367444, 3367569, 3367693, 3367817, 3367942, 3368066, 3368190, 3368315, 3368439, 3368563, 3368688, 3368812, 3368936, 3369061, 3369185, 3369309, 3369434, 3369558, 3369682, 3369807, 3369931, 3370056, 3370180, 3370304, 3370429, 3370553, 3370677, 3370802, 3370926, 3371051, 3371175, 3371299, 3371424, 3371548, 3371672, 3371797, 3371921, 3372046, 3372170, 3372294, 3372419, 3372543, 3372668, 3372792, 3372916, 3373041, 3373165, 3373290, 3373414, 3373538, 3373663, 3373787, 3373912, 3374036, 3374160, 3374285, 3374409, 3374534, 3374658, 3374782, 3374907, 3375031, 3375156, 3375280, 3375405, 3375529, 3375653, 3375778, 3375902, 3376027, 3376151, 3376276, 3376400, 3376524, 3376649, 3376773, 3376898, 3377022, 3377147, 3377271, 3377395, 3377520, 3377644, 3377769, 3377893, 3378018, 3378142, 3378267, 3378391, 3378516, 3378640, 3378764, 3378889, 3379013, 3379138, 3379262, 3379387, 3379511, 3379636, 3379760, 3379885, 3380009, 3380134, 3380258, 3380383, 3380507, 3380631, 3380756, 3380880, 3381005, 3381129, 3381254, 3381378, 3381503, 3381627, 3381752, 3381876, 3382001, 3382125, 3382250, 3382374, 3382499, 3382623, 3382748, 3382872, 3382997, 3383121, 3383246, 3383370, 3383495, 3383619, 3383744, 3383868, 3383993, 3384117, 3384242, 3384366, 3384491, 3384615, 3384740, 3384865, 3384989, 3385114, 3385238, 3385363, 3385487, 3385612, 3385736, 3385861, 3385985, 3386110, 3386234, 3386359, 3386483, 3386608, 3386732, 3386857, 3386982, 3387106, 3387231, 3387355, 3387480, 3387604, 3387729, 3387853, 3387978, 3388103, 3388227, 3388352, 3388476, 3388601, 3388725, 3388850, 3388974, 3389099, 3389224, 3389348, 3389473, 3389597, 3389722, 3389846, 3389971, 3390096, 3390220, 3390345, 3390469, 3390594, 3390719, 3390843, 3390968, 3391092, 3391217, 3391341, 3391466, 3391591, 3391715, 3391840, 3391964, 3392089, 3392214, 3392338, 3392463, 3392587, 3392712, 3392837, 3392961, 3393086, 3393211, 3393335, 3393460, 3393584, 3393709, 3393834, 3393958, 3394083, 3394207, 3394332, 3394457, 3394581, 3394706, 3394831, 3394955, 3395080, 3395204, 3395329, 3395454, 3395578, 3395703, 3395828, 3395952, 3396077, 3396202, 3396326, 3396451, 3396575, 3396700, 3396825, 3396949, 3397074, 3397199, 3397323, 3397448, 3397573, 3397697, 3397822, 3397947, 3398071, 3398196, 3398321, 3398445, 3398570, 3398695, 3398819, 3398944, 3399069, 3399193, 3399318, 3399443, 3399567, 3399692, 3399817, 3399941, 3400066, 3400191, 3400316, 3400440, 3400565, 3400690, 3400814, 3400939, 3401064, 3401188, 3401313, 3401438, 3401562, 3401687, 3401812, 3401937, 3402061, 3402186, 3402311, 3402435, 3402560, 3402685, 3402809, 3402934, 3403059, 3403184, 3403308, 3403433, 3403558, 3403683, 3403807, 3403932, 3404057, 3404181, 3404306, 3404431, 3404556, 3404680, 3404805, 3404930, 3405055, 3405179, 3405304, 3405429, 3405554, 3405678, 3405803, 3405928, 3406052, 3406177, 3406302, 3406427, 3406551, 3406676, 3406801, 3406926, 3407051, 3407175, 3407300, 3407425, 3407550, 3407674, 3407799, 3407924, 3408049, 3408173, 3408298, 3408423, 3408548, 3408672, 3408797, 3408922, 3409047, 3409172, 3409296, 3409421, 3409546, 3409671, 3409795, 3409920, 3410045, 3410170, 3410295, 3410419, 3410544, 3410669, 3410794, 3410919, 3411043, 3411168, 3411293, 3411418, 3411543, 3411667, 3411792, 3411917, 3412042, 3412167, 3412291, 3412416, 3412541, 3412666, 3412791, 3412916, 3413040, 3413165, 3413290, 3413415, 3413540, 3413665, 3413789, 3413914, 3414039, 3414164, 3414289, 3414414, 3414538, 3414663, 3414788, 3414913, 3415038, 3415163, 3415287, 3415412, 3415537, 3415662, 3415787, 3415912, 3416036, 3416161, 3416286, 3416411, 3416536, 3416661, 3416786, 3416910, 3417035, 3417160, 3417285, 3417410, 3417535, 3417660, 3417785, 3417909, 3418034, 3418159, 3418284, 3418409, 3418534, 3418659, 3418784, 3418908, 3419033, 3419158, 3419283, 3419408, 3419533, 3419658, 3419783, 3419908, 3420032, 3420157, 3420282, 3420407, 3420532, 3420657, 3420782, 3420907, 3421032, 3421157, 3421281, 3421406, 3421531, 3421656, 3421781, 3421906, 3422031, 3422156, 3422281, 3422406, 3422531, 3422656, 3422780, 3422905, 3423030, 3423155, 3423280, 3423405, 3423530, 3423655, 3423780, 3423905, 3424030, 3424155, 3424280, 3424405, 3424530, 3424654, 3424779, 3424904, 3425029, 3425154, 3425279, 3425404, 3425529, 3425654, 3425779, 3425904, 3426029, 3426154, 3426279, 3426404, 3426529, 3426654, 3426779, 3426904, 3427029, 3427154, 3427279, 3427404, 3427529, 3427654, 3427778, 3427903, 3428028, 3428153, 3428278, 3428403, 3428528, 3428653, 3428778, 3428903, 3429028, 3429153, 3429278, 3429403, 3429528, 3429653, 3429778, 3429903, 3430028, 3430153, 3430278, 3430403, 3430528, 3430653, 3430778, 3430903, 3431028, 3431153, 3431278, 3431403, 3431528, 3431653, 3431778, 3431903, 3432028, 3432153, 3432279, 3432404, 3432529, 3432654, 3432779, 3432904, 3433029, 3433154, 3433279, 3433404, 3433529, 3433654, 3433779, 3433904, 3434029, 3434154, 3434279, 3434404, 3434529, 3434654, 3434779, 3434904, 3435029, 3435154, 3435279, 3435405, 3435530, 3435655, 3435780, 3435905, 3436030, 3436155, 3436280, 3436405, 3436530, 3436655, 3436780, 3436905, 3437030, 3437155, 3437281, 3437406, 3437531, 3437656, 3437781, 3437906, 3438031, 3438156, 3438281, 3438406, 3438531, 3438656, 3438782, 3438907, 3439032, 3439157, 3439282, 3439407, 3439532, 3439657, 3439782, 3439907, 3440033, 3440158, 3440283, 3440408, 3440533, 3440658, 3440783, 3440908, 3441033, 3441159, 3441284, 3441409, 3441534, 3441659, 3441784, 3441909, 3442034, 3442160, 3442285, 3442410, 3442535, 3442660, 3442785, 3442910, 3443036, 3443161, 3443286, 3443411, 3443536, 3443661, 3443786, 3443912, 3444037, 3444162, 3444287, 3444412, 3444537, 3444662, 3444788, 3444913, 3445038, 3445163, 3445288, 3445413, 3445539, 3445664, 3445789, 3445914, 3446039, 3446164, 3446290, 3446415, 3446540, 3446665, 3446790, 3446915, 3447041, 3447166, 3447291, 3447416, 3447541, 3447667, 3447792, 3447917, 3448042, 3448167, 3448293, 3448418, 3448543, 3448668, 3448793, 3448918, 3449044, 3449169, 3449294, 3449419, 3449545, 3449670, 3449795, 3449920, 3450045, 3450171, 3450296, 3450421, 3450546, 3450671, 3450797, 3450922, 3451047, 3451172, 3451298, 3451423, 3451548, 3451673, 3451798, 3451924, 3452049, 3452174, 3452299, 3452425, 3452550, 3452675, 3452800, 3452926, 3453051, 3453176, 3453301, 3453427, 3453552, 3453677, 3453802, 3453928, 3454053, 3454178, 3454303, 3454429, 3454554, 3454679, 3454804, 3454930, 3455055, 3455180, 3455305, 3455431, 3455556, 3455681, 3455807, 3455932, 3456057, 3456182, 3456308, 3456433, 3456558, 3456683, 3456809, 3456934, 3457059, 3457185, 3457310, 3457435, 3457560, 3457686, 3457811, 3457936, 3458062, 3458187, 3458312, 3458438, 3458563, 3458688, 3458813, 3458939, 3459064, 3459189, 3459315, 3459440, 3459565, 3459691, 3459816, 3459941, 3460067, 3460192, 3460317, 3460443, 3460568, 3460693, 3460819, 3460944, 3461069, 3461195, 3461320, 3461445, 3461571, 3461696, 3461821, 3461947, 3462072, 3462197, 3462323, 3462448, 3462573, 3462699, 3462824, 3462949, 3463075, 3463200, 3463325, 3463451, 3463576, 3463701, 3463827, 3463952, 3464077, 3464203, 3464328, 3464454, 3464579, 3464704, 3464830, 3464955, 3465080, 3465206, 3465331, 3465457, 3465582, 3465707, 3465833, 3465958, 3466083, 3466209, 3466334, 3466460, 3466585, 3466710, 3466836, 3466961, 3467087, 3467212, 3467337, 3467463, 3467588, 3467713, 3467839, 3467964, 3468090, 3468215, 3468341, 3468466, 3468591, 3468717, 3468842, 3468968, 3469093, 3469218, 3469344, 3469469, 3469595, 3469720, 3469845, 3469971, 3470096, 3470222, 3470347, 3470473, 3470598, 3470723, 3470849, 3470974, 3471100, 3471225, 3471351, 3471476, 3471602, 3471727, 3471852, 3471978, 3472103, 3472229, 3472354, 3472480, 3472605, 3472731, 3472856, 3472981, 3473107, 3473232, 3473358, 3473483, 3473609, 3473734, 3473860, 3473985, 3474111, 3474236, 3474362, 3474487, 3474612, 3474738, 3474863, 3474989, 3475114, 3475240, 3475365, 3475491, 3475616, 3475742, 3475867, 3475993, 3476118, 3476244, 3476369, 3476495, 3476620, 3476746, 3476871, 3476997, 3477122, 3477248, 3477373, 3477499, 3477624, 3477750, 3477875, 3478001, 3478126, 3478252, 3478377, 3478503, 3478628, 3478754, 3478879, 3479005, 3479130, 3479256, 3479381, 3479507, 3479632, 3479758, 3479883, 3480009, 3480135, 3480260, 3480386, 3480511, 3480637, 3480762, 3480888, 3481013, 3481139, 3481264, 3481390, 3481515, 3481641, 3481767, 3481892, 3482018, 3482143, 3482269, 3482394, 3482520, 3482645, 3482771, 3482897, 3483022, 3483148, 3483273, 3483399, 3483524, 3483650, 3483775, 3483901, 3484027, 3484152, 3484278, 3484403, 3484529, 3484655, 3484780, 3484906, 3485031, 3485157, 3485282, 3485408, 3485534, 3485659, 3485785, 3485910, 3486036, 3486162, 3486287, 3486413, 3486538, 3486664, 3486790, 3486915, 3487041, 3487166, 3487292, 3487418, 3487543, 3487669, 3487794, 3487920, 3488046, 3488171, 3488297, 3488422, 3488548, 3488674, 3488799, 3488925, 3489051, 3489176, 3489302, 3489427, 3489553, 3489679, 3489804, 3489930, 3490056, 3490181, 3490307, 3490433, 3490558, 3490684, 3490809, 3490935, 3491061, 3491186, 3491312, 3491438, 3491563, 3491689, 3491815, 3491940, 3492066, 3492192, 3492317, 3492443, 3492569, 3492694, 3492820, 3492946, 3493071, 3493197, 3493323, 3493448, 3493574, 3493700, 3493825, 3493951, 3494077, 3494202, 3494328, 3494454, 3494579, 3494705, 3494831, 3494956, 3495082, 3495208, 3495333, 3495459, 3495585, 3495711, 3495836, 3495962, 3496088, 3496213, 3496339, 3496465, 3496590, 3496716, 3496842, 3496968, 3497093, 3497219, 3497345, 3497470, 3497596, 3497722, 3497848, 3497973, 3498099, 3498225, 3498350, 3498476, 3498602, 3498728, 3498853, 3498979, 3499105, 3499231, 3499356, 3499482, 3499608, 3499734, 3499859, 3499985, 3500111, 3500236, 3500362, 3500488, 3500614, 3500739, 3500865, 3500991, 3501117, 3501242, 3501368, 3501494, 3501620, 3501745, 3501871, 3501997, 3502123, 3502249, 3502374, 3502500, 3502626, 3502752, 3502877, 3503003, 3503129, 3503255, 3503380, 3503506, 3503632, 3503758, 3503884, 3504009, 3504135, 3504261, 3504387, 3504513, 3504638, 3504764, 3504890, 3505016, 3505141, 3505267, 3505393, 3505519, 3505645, 3505770, 3505896, 3506022, 3506148, 3506274, 3506399, 3506525, 3506651, 3506777, 3506903, 3507029, 3507154, 3507280, 3507406, 3507532, 3507658, 3507783, 3507909, 3508035, 3508161, 3508287, 3508413, 3508538, 3508664, 3508790, 3508916, 3509042, 3509168, 3509293, 3509419, 3509545, 3509671, 3509797, 3509923, 3510048, 3510174, 3510300, 3510426, 3510552, 3510678, 3510804, 3510929, 3511055, 3511181, 3511307, 3511433, 3511559, 3511685, 3511810, 3511936, 3512062, 3512188, 3512314, 3512440, 3512566, 3512692, 3512817, 3512943, 3513069, 3513195, 3513321, 3513447, 3513573, 3513699, 3513825, 3513950, 3514076, 3514202, 3514328, 3514454, 3514580, 3514706, 3514832, 3514958, 3515083, 3515209, 3515335, 3515461, 3515587, 3515713, 3515839, 3515965, 3516091, 3516217, 3516343, 3516468, 3516594, 3516720, 3516846, 3516972, 3517098, 3517224, 3517350, 3517476, 3517602, 3517728, 3517854, 3517980, 3518105, 3518231, 3518357, 3518483, 3518609, 3518735, 3518861, 3518987, 3519113, 3519239, 3519365, 3519491, 3519617, 3519743, 3519869, 3519995, 3520121, 3520246, 3520372, 3520498, 3520624, 3520750, 3520876, 3521002, 3521128, 3521254, 3521380, 3521506, 3521632, 3521758, 3521884, 3522010, 3522136, 3522262, 3522388, 3522514, 3522640, 3522766, 3522892, 3523018, 3523144, 3523270, 3523396, 3523522, 3523648, 3523774, 3523900, 3524026, 3524152, 3524278, 3524404, 3524530, 3524656, 3524782, 3524908, 3525034, 3525160, 3525286, 3525412, 3525538, 3525664, 3525790, 3525916, 3526042, 3526168, 3526294, 3526420, 3526546, 3526672, 3526798, 3526924, 3527050, 3527176, 3527302, 3527428, 3527554, 3527680, 3527806, 3527932, 3528058, 3528184, 3528310, 3528436, 3528562, 3528688, 3528815, 3528941, 3529067, 3529193, 3529319, 3529445, 3529571, 3529697, 3529823, 3529949, 3530075, 3530201, 3530327, 3530453, 3530579, 3530705, 3530831, 3530957, 3531084, 3531210, 3531336, 3531462, 3531588, 3531714, 3531840, 3531966, 3532092, 3532218, 3532344, 3532470, 3532596, 3532723, 3532849, 3532975, 3533101, 3533227, 3533353, 3533479, 3533605, 3533731, 3533857, 3533984, 3534110, 3534236, 3534362, 3534488, 3534614, 3534740, 3534866, 3534992, 3535118, 3535245, 3535371, 3535497, 3535623, 3535749, 3535875, 3536001, 3536127, 3536254, 3536380, 3536506, 3536632, 3536758, 3536884, 3537010, 3537136, 3537263, 3537389, 3537515, 3537641, 3537767, 3537893, 3538019, 3538146, 3538272, 3538398, 3538524, 3538650, 3538776, 3538902, 3539029, 3539155, 3539281, 3539407, 3539533, 3539659, 3539786, 3539912, 3540038, 3540164, 3540290, 3540416, 3540543, 3540669, 3540795, 3540921, 3541047, 3541173, 3541300, 3541426, 3541552, 3541678, 3541804, 3541930, 3542057, 3542183, 3542309, 3542435, 3542561, 3542688, 3542814, 3542940, 3543066, 3543192, 3543319, 3543445, 3543571, 3543697, 3543823, 3543950, 3544076, 3544202, 3544328, 3544454, 3544581, 3544707, 3544833, 3544959, 3545085, 3545212, 3545338, 3545464, 3545590, 3545717, 3545843, 3545969, 3546095, 3546222, 3546348, 3546474, 3546600, 3546726, 3546853, 3546979, 3547105, 3547231, 3547358, 3547484, 3547610, 3547736, 3547863, 3547989, 3548115, 3548241, 3548368, 3548494, 3548620, 3548746, 3548873, 3548999, 3549125, 3549251, 3549378, 3549504, 3549630, 3549756, 3549883, 3550009, 3550135, 3550262, 3550388, 3550514, 3550640, 3550767, 3550893, 3551019, 3551145, 3551272, 3551398, 3551524, 3551651, 3551777, 3551903, 3552029, 3552156, 3552282, 3552408, 3552535, 3552661, 3552787, 3552914, 3553040, 3553166, 3553292, 3553419, 3553545, 3553671, 3553798, 3553924, 3554050, 3554177, 3554303, 3554429, 3554556, 3554682, 3554808, 3554935, 3555061, 3555187, 3555314, 3555440, 3555566, 3555692, 3555819, 3555945, 3556071, 3556198, 3556324, 3556450, 3556577, 3556703, 3556830, 3556956, 3557082, 3557209, 3557335, 3557461, 3557588, 3557714, 3557840, 3557967, 3558093, 3558219, 3558346, 3558472, 3558598, 3558725, 3558851, 3558978, 3559104, 3559230, 3559357, 3559483, 3559609, 3559736, 3559862, 3559988, 3560115, 3560241, 3560368, 3560494, 3560620, 3560747, 3560873, 3561000, 3561126, 3561252, 3561379, 3561505, 3561631, 3561758, 3561884, 3562011, 3562137, 3562263, 3562390, 3562516, 3562643, 3562769, 3562895, 3563022, 3563148, 3563275, 3563401, 3563528, 3563654, 3563780, 3563907, 3564033, 3564160, 3564286, 3564412, 3564539, 3564665, 3564792, 3564918, 3565045, 3565171, 3565297, 3565424, 3565550, 3565677, 3565803, 3565930, 3566056, 3566182, 3566309, 3566435, 3566562, 3566688, 3566815, 3566941, 3567068, 3567194, 3567321, 3567447, 3567573, 3567700, 3567826, 3567953, 3568079, 3568206, 3568332, 3568459, 3568585, 3568712, 3568838, 3568965, 3569091, 3569217, 3569344, 3569470, 3569597, 3569723, 3569850, 3569976, 3570103, 3570229, 3570356, 3570482, 3570609, 3570735, 3570862, 3570988, 3571115, 3571241, 3571368, 3571494, 3571621, 3571747, 3571874, 3572000, 3572127, 3572253, 3572380, 3572506, 3572633, 3572759, 3572886, 3573012, 3573139, 3573265, 3573392, 3573518, 3573645, 3573771, 3573898, 3574024, 3574151, 3574277, 3574404, 3574530, 3574657, 3574784, 3574910, 3575037, 3575163, 3575290, 3575416, 3575543, 3575669, 3575796, 3575922, 3576049, 3576175, 3576302, 3576429, 3576555, 3576682, 3576808, 3576935, 3577061, 3577188, 3577314, 3577441, 3577568, 3577694, 3577821, 3577947, 3578074, 3578200, 3578327, 3578454, 3578580, 3578707, 3578833, 3578960, 3579086, 3579213, 3579340, 3579466, 3579593, 3579719, 3579846, 3579972, 3580099, 3580226, 3580352, 3580479, 3580605, 3580732, 3580859, 3580985, 3581112, 3581238, 3581365, 3581492, 3581618, 3581745, 3581871, 3581998, 3582125, 3582251, 3582378, 3582504, 3582631, 3582758, 3582884, 3583011, 3583138, 3583264, 3583391, 3583517, 3583644, 3583771, 3583897, 3584024, 3584151, 3584277, 3584404, 3584530, 3584657, 3584784, 3584910, 3585037, 3585164, 3585290, 3585417, 3585544, 3585670, 3585797, 3585924, 3586050, 3586177, 3586303, 3586430, 3586557, 3586683, 3586810, 3586937, 3587063, 3587190, 3587317, 3587443, 3587570, 3587697, 3587823, 3587950, 3588077, 3588203, 3588330, 3588457, 3588583, 3588710, 3588837, 3588964, 3589090, 3589217, 3589344, 3589470, 3589597, 3589724, 3589850, 3589977, 3590104, 3590230, 3590357, 3590484, 3590610, 3590737, 3590864, 3590991, 3591117, 3591244, 3591371, 3591497, 3591624, 3591751, 3591878, 3592004, 3592131, 3592258, 3592384, 3592511, 3592638, 3592765, 3592891, 3593018, 3593145, 3593271, 3593398, 3593525, 3593652, 3593778, 3593905, 3594032, 3594159, 3594285, 3594412, 3594539, 3594666, 3594792, 3594919, 3595046, 3595173, 3595299, 3595426, 3595553, 3595680, 3595806, 3595933, 3596060, 3596187, 3596313, 3596440, 3596567, 3596694, 3596820, 3596947, 3597074, 3597201, 3597327, 3597454, 3597581, 3597708, 3597835, 3597961, 3598088, 3598215, 3598342, 3598468, 3598595, 3598722, 3598849, 3598976, 3599102, 3599229, 3599356, 3599483, 3599610, 3599736, 3599863, 3599990, 3600117, 3600244, 3600370, 3600497, 3600624, 3600751, 3600878, 3601004, 3601131, 3601258, 3601385, 3601512, 3601638, 3601765, 3601892, 3602019, 3602146, 3602273, 3602399, 3602526, 3602653, 3602780, 3602907, 3603033, 3603160, 3603287, 3603414, 3603541, 3603668, 3603794, 3603921, 3604048, 3604175, 3604302, 3604429, 3604556, 3604682, 3604809, 3604936, 3605063, 3605190, 3605317, 3605443, 3605570, 3605697, 3605824, 3605951, 3606078, 3606205, 3606332, 3606458, 3606585, 3606712, 3606839, 3606966, 3607093, 3607220, 3607346, 3607473, 3607600, 3607727, 3607854, 3607981, 3608108, 3608235, 3608362, 3608488, 3608615, 3608742, 3608869, 3608996, 3609123, 3609250, 3609377, 3609504, 3609630, 3609757, 3609884, 3610011, 3610138, 3610265, 3610392, 3610519, 3610646, 3610773, 3610900, 3611026, 3611153, 3611280, 3611407, 3611534, 3611661, 3611788, 3611915, 3612042, 3612169, 3612296, 3612423, 3612550, 3612676, 3612803, 3612930, 3613057, 3613184, 3613311, 3613438, 3613565, 3613692, 3613819, 3613946, 3614073, 3614200, 3614327, 3614454, 3614581, 3614708, 3614835, 3614961, 3615088, 3615215, 3615342, 3615469, 3615596, 3615723, 3615850, 3615977, 3616104, 3616231, 3616358, 3616485, 3616612, 3616739, 3616866, 3616993, 3617120, 3617247, 3617374, 3617501, 3617628, 3617755, 3617882, 3618009, 3618136, 3618263, 3618390, 3618517, 3618644, 3618771, 3618898, 3619025, 3619152, 3619279, 3619406, 3619533, 3619660, 3619787, 3619914, 3620041, 3620168, 3620295, 3620422, 3620549, 3620676, 3620803, 3620930, 3621057, 3621184, 3621311, 3621438, 3621565, 3621692, 3621819, 3621946, 3622073, 3622200, 3622327, 3622454, 3622581, 3622708, 3622835, 3622962, 3623089, 3623216, 3623344, 3623471, 3623598, 3623725, 3623852, 3623979, 3624106, 3624233, 3624360, 3624487, 3624614, 3624741, 3624868, 3624995, 3625122, 3625249, 3625376, 3625504, 3625631, 3625758, 3625885, 3626012, 3626139, 3626266, 3626393, 3626520, 3626647, 3626774, 3626901, 3627028, 3627156, 3627283, 3627410, 3627537, 3627664, 3627791, 3627918, 3628045, 3628172, 3628299, 3628426, 3628554, 3628681, 3628808, 3628935, 3629062, 3629189, 3629316, 3629443, 3629570, 3629697, 3629825, 3629952, 3630079, 3630206, 3630333, 3630460, 3630587, 3630714, 3630842, 3630969, 3631096, 3631223, 3631350, 3631477, 3631604, 3631731, 3631859, 3631986, 3632113, 3632240, 3632367, 3632494, 3632621, 3632749, 3632876, 3633003, 3633130, 3633257, 3633384, 3633511, 3633639, 3633766, 3633893, 3634020, 3634147, 3634274, 3634402, 3634529, 3634656, 3634783, 3634910, 3635037, 3635165, 3635292, 3635419, 3635546, 3635673, 3635800, 3635928, 3636055, 3636182, 3636309, 3636436, 3636564, 3636691, 3636818, 3636945, 3637072, 3637199, 3637327, 3637454, 3637581, 3637708, 3637835, 3637963, 3638090, 3638217, 3638344, 3638471, 3638599, 3638726, 3638853, 3638980, 3639108, 3639235, 3639362, 3639489, 3639616, 3639744, 3639871, 3639998, 3640125, 3640252, 3640380, 3640507, 3640634, 3640761, 3640889, 3641016, 3641143, 3641270, 3641398, 3641525, 3641652, 3641779, 3641907, 3642034, 3642161, 3642288, 3642415, 3642543, 3642670, 3642797, 3642924, 3643052, 3643179, 3643306, 3643434, 3643561, 3643688, 3643815, 3643943, 3644070, 3644197, 3644324, 3644452, 3644579, 3644706, 3644833, 3644961, 3645088, 3645215, 3645343, 3645470, 3645597, 3645724, 3645852, 3645979, 3646106, 3646234, 3646361, 3646488, 3646615, 3646743, 3646870, 3646997, 3647125, 3647252, 3647379, 3647506, 3647634, 3647761, 3647888, 3648016, 3648143, 3648270, 3648398, 3648525, 3648652, 3648780, 3648907, 3649034, 3649161, 3649289, 3649416, 3649543, 3649671, 3649798, 3649925, 3650053, 3650180, 3650307, 3650435, 3650562, 3650689, 3650817, 3650944, 3651071, 3651199, 3651326, 3651453, 3651581, 3651708, 3651835, 3651963, 3652090, 3652218, 3652345, 3652472, 3652600, 3652727, 3652854, 3652982, 3653109, 3653236, 3653364, 3653491, 3653618, 3653746, 3653873, 3654001, 3654128, 3654255, 3654383, 3654510, 3654637, 3654765, 3654892, 3655020, 3655147, 3655274, 3655402, 3655529, 3655656, 3655784, 3655911, 3656039, 3656166, 3656293, 3656421, 3656548, 3656676, 3656803, 3656930, 3657058, 3657185, 3657313, 3657440, 3657567, 3657695, 3657822, 3657950, 3658077, 3658204, 3658332, 3658459, 3658587, 3658714, 3658842, 3658969, 3659096, 3659224, 3659351, 3659479, 3659606, 3659734, 3659861, 3659988, 3660116, 3660243, 3660371, 3660498, 3660626, 3660753, 3660880, 3661008, 3661135, 3661263, 3661390, 3661518, 3661645, 3661773, 3661900, 3662028, 3662155, 3662282, 3662410, 3662537, 3662665, 3662792, 3662920, 3663047, 3663175, 3663302, 3663430, 3663557, 3663685, 3663812, 3663939, 3664067, 3664194, 3664322, 3664449, 3664577, 3664704, 3664832, 3664959, 3665087, 3665214, 3665342, 3665469, 3665597, 3665724, 3665852, 3665979, 3666107, 3666234, 3666362, 3666489, 3666617, 3666744, 3666872, 3666999, 3667127, 3667254, 3667382, 3667509, 3667637, 3667764, 3667892, 3668019, 3668147, 3668274, 3668402, 3668529, 3668657, 3668785, 3668912, 3669040, 3669167, 3669295, 3669422, 3669550, 3669677, 3669805, 3669932, 3670060, 3670187, 3670315, 3670442, 3670570, 3670698, 3670825, 3670953, 3671080, 3671208, 3671335, 3671463, 3671590, 3671718, 3671846, 3671973, 3672101, 3672228, 3672356, 3672483, 3672611, 3672738, 3672866, 3672994, 3673121, 3673249, 3673376, 3673504, 3673631, 3673759, 3673887, 3674014, 3674142, 3674269, 3674397, 3674525, 3674652, 3674780, 3674907, 3675035, 3675162, 3675290, 3675418, 3675545, 3675673, 3675800, 3675928, 3676056, 3676183, 3676311, 3676438, 3676566, 3676694, 3676821, 3676949, 3677077, 3677204, 3677332, 3677459, 3677587, 3677715, 3677842, 3677970, 3678097, 3678225, 3678353, 3678480, 3678608, 3678736, 3678863, 3678991, 3679119, 3679246, 3679374, 3679501, 3679629, 3679757, 3679884, 3680012, 3680140, 3680267, 3680395, 3680523, 3680650, 3680778, 3680906, 3681033, 3681161, 3681289, 3681416, 3681544, 3681672, 3681799, 3681927, 3682055, 3682182, 3682310, 3682438, 3682565, 3682693, 3682821, 3682948, 3683076, 3683204, 3683331, 3683459, 3683587, 3683714, 3683842, 3683970, 3684097, 3684225, 3684353, 3684480, 3684608, 3684736, 3684863, 3684991, 3685119, 3685247, 3685374, 3685502, 3685630, 3685757, 3685885, 3686013, 3686141, 3686268, 3686396, 3686524, 3686651, 3686779, 3686907, 3687035, 3687162, 3687290, 3687418, 3687545, 3687673, 3687801, 3687929, 3688056, 3688184, 3688312, 3688440, 3688567, 3688695, 3688823, 3688950, 3689078, 3689206, 3689334, 3689461, 3689589, 3689717, 3689845, 3689972, 3690100, 3690228, 3690356, 3690483, 3690611, 3690739, 3690867, 3690994, 3691122, 3691250, 3691378, 3691506, 3691633, 3691761, 3691889, 3692017, 3692144, 3692272, 3692400, 3692528, 3692655, 3692783, 3692911, 3693039, 3693167, 3693294, 3693422, 3693550, 3693678, 3693806, 3693933, 3694061, 3694189, 3694317, 3694445, 3694572, 3694700, 3694828, 3694956, 3695084, 3695211, 3695339, 3695467, 3695595, 3695723, 3695850, 3695978, 3696106, 3696234, 3696362, 3696489, 3696617, 3696745, 3696873, 3697001, 3697129, 3697256, 3697384, 3697512, 3697640, 3697768, 3697896, 3698023, 3698151, 3698279, 3698407, 3698535, 3698663, 3698790, 3698918, 3699046, 3699174, 3699302, 3699430, 3699557, 3699685, 3699813, 3699941, 3700069, 3700197, 3700325, 3700452, 3700580, 3700708, 3700836, 3700964, 3701092, 3701220, 3701348, 3701475, 3701603, 3701731, 3701859, 3701987, 3702115, 3702243, 3702371, 3702498, 3702626, 3702754, 3702882, 3703010, 3703138, 3703266, 3703394, 3703522, 3703649, 3703777, 3703905, 3704033, 3704161, 3704289, 3704417, 3704545, 3704673, 3704801, 3704928, 3705056, 3705184, 3705312, 3705440, 3705568, 3705696, 3705824, 3705952, 3706080, 3706208, 3706336, 3706463, 3706591, 3706719, 3706847, 3706975, 3707103, 3707231, 3707359, 3707487, 3707615, 3707743, 3707871, 3707999, 3708127, 3708255, 3708382, 3708510, 3708638, 3708766, 3708894, 3709022, 3709150, 3709278, 3709406, 3709534, 3709662, 3709790, 3709918, 3710046, 3710174, 3710302, 3710430, 3710558, 3710686, 3710814, 3710942, 3711070, 3711198, 3711326, 3711454, 3711582, 3711709, 3711837, 3711965, 3712093, 3712221, 3712349, 3712477, 3712605, 3712733, 3712861, 3712989, 3713117, 3713245, 3713373, 3713501, 3713629, 3713757, 3713885, 3714013, 3714141, 3714269, 3714397, 3714525, 3714653, 3714781, 3714909, 3715037, 3715165, 3715293, 3715421, 3715549, 3715678, 3715806, 3715934, 3716062, 3716190, 3716318, 3716446, 3716574, 3716702, 3716830, 3716958, 3717086, 3717214, 3717342, 3717470, 3717598, 3717726, 3717854, 3717982, 3718110, 3718238, 3718366, 3718494, 3718622, 3718750, 3718878, 3719007, 3719135, 3719263, 3719391, 3719519, 3719647, 3719775, 3719903, 3720031, 3720159, 3720287, 3720415, 3720543, 3720671, 3720799, 3720928, 3721056, 3721184, 3721312, 3721440, 3721568, 3721696, 3721824, 3721952, 3722080, 3722208, 3722336, 3722465, 3722593, 3722721, 3722849, 3722977, 3723105, 3723233, 3723361, 3723489, 3723617, 3723746, 3723874, 3724002, 3724130, 3724258, 3724386, 3724514, 3724642, 3724770, 3724899, 3725027, 3725155, 3725283, 3725411, 3725539, 3725667, 3725795, 3725924, 3726052, 3726180, 3726308, 3726436, 3726564, 3726692, 3726821, 3726949, 3727077, 3727205, 3727333, 3727461, 3727589, 3727718, 3727846, 3727974, 3728102, 3728230, 3728358, 3728486, 3728615, 3728743, 3728871, 3728999, 3729127, 3729255, 3729384, 3729512, 3729640, 3729768, 3729896, 3730024, 3730153, 3730281, 3730409, 3730537, 3730665, 3730794, 3730922, 3731050, 3731178, 3731306, 3731434, 3731563, 3731691, 3731819, 3731947, 3732075, 3732204, 3732332, 3732460, 3732588, 3732716, 3732845, 3732973, 3733101, 3733229, 3733357, 3733486, 3733614, 3733742, 3733870, 3733999, 3734127, 3734255, 3734383, 3734511, 3734640, 3734768, 3734896, 3735024, 3735153, 3735281, 3735409, 3735537, 3735665, 3735794, 3735922, 3736050, 3736178, 3736307, 3736435, 3736563, 3736691, 3736820, 3736948, 3737076, 3737204, 3737333, 3737461, 3737589, 3737717, 3737846, 3737974, 3738102, 3738230, 3738359, 3738487, 3738615, 3738743, 3738872, 3739000, 3739128, 3739257, 3739385, 3739513, 3739641, 3739770, 3739898, 3740026, 3740154, 3740283, 3740411, 3740539, 3740668, 3740796, 3740924, 3741052, 3741181, 3741309, 3741437, 3741566, 3741694, 3741822, 3741951, 3742079, 3742207, 3742335, 3742464, 3742592, 3742720, 3742849, 3742977, 3743105, 3743234, 3743362, 3743490, 3743619, 3743747, 3743875, 3744003, 3744132, 3744260, 3744388, 3744517, 3744645, 3744773, 3744902, 3745030, 3745158, 3745287, 3745415, 3745543, 3745672, 3745800, 3745928, 3746057, 3746185, 3746313, 3746442, 3746570, 3746699, 3746827, 3746955, 3747084, 3747212, 3747340, 3747469, 3747597, 3747725, 3747854, 3747982, 3748110, 3748239, 3748367, 3748496, 3748624, 3748752, 3748881, 3749009, 3749137, 3749266, 3749394, 3749523, 3749651, 3749779, 3749908, 3750036, 3750164, 3750293, 3750421, 3750550, 3750678, 3750806, 3750935, 3751063, 3751192, 3751320, 3751448, 3751577, 3751705, 3751834, 3751962, 3752090, 3752219, 3752347, 3752476, 3752604, 3752732, 3752861, 3752989, 3753118, 3753246, 3753375, 3753503, 3753631, 3753760, 3753888, 3754017, 3754145, 3754274, 3754402, 3754530, 3754659, 3754787, 3754916, 3755044, 3755173, 3755301, 3755429, 3755558, 3755686, 3755815, 3755943, 3756072, 3756200, 3756329, 3756457, 3756586, 3756714, 3756842, 3756971, 3757099, 3757228, 3757356, 3757485, 3757613, 3757742, 3757870, 3757999, 3758127, 3758256, 3758384, 3758512, 3758641, 3758769, 3758898, 3759026, 3759155, 3759283, 3759412, 3759540, 3759669, 3759797, 3759926, 3760054, 3760183, 3760311, 3760440, 3760568, 3760697, 3760825, 3760954, 3761082, 3761211, 3761339, 3761468, 3761596, 3761725, 3761853, 3761982, 3762110, 3762239, 3762367, 3762496, 3762624, 3762753, 3762881, 3763010, 3763138, 3763267, 3763396, 3763524, 3763653, 3763781, 3763910, 3764038, 3764167, 3764295, 3764424, 3764552, 3764681, 3764809, 3764938, 3765066, 3765195, 3765324, 3765452, 3765581, 3765709, 3765838, 3765966, 3766095, 3766223, 3766352, 3766481, 3766609, 3766738, 3766866, 3766995, 3767123, 3767252, 3767381, 3767509, 3767638, 3767766, 3767895, 3768023, 3768152, 3768281, 3768409, 3768538, 3768666, 3768795, 3768923, 3769052, 3769181, 3769309, 3769438, 3769566, 3769695, 3769824, 3769952, 3770081, 3770209, 3770338, 3770467, 3770595, 3770724, 3770852, 3770981, 3771110, 3771238, 3771367, 3771495, 3771624, 3771753, 3771881, 3772010, 3772138, 3772267, 3772396, 3772524, 3772653, 3772782, 3772910, 3773039, 3773167, 3773296, 3773425, 3773553, 3773682, 3773811, 3773939, 3774068, 3774197, 3774325, 3774454, 3774582, 3774711, 3774840, 3774968, 3775097, 3775226, 3775354, 3775483, 3775612, 3775740, 3775869, 3775998, 3776126, 3776255, 3776384, 3776512, 3776641, 3776770, 3776898, 3777027, 3777156, 3777284, 3777413, 3777542, 3777670, 3777799, 3777928, 3778056, 3778185, 3778314, 3778442, 3778571, 3778700, 3778829, 3778957, 3779086, 3779215, 3779343, 3779472, 3779601, 3779729, 3779858, 3779987, 3780115, 3780244, 3780373, 3780502, 3780630, 3780759, 3780888, 3781016, 3781145, 3781274, 3781403, 3781531, 3781660, 3781789, 3781917, 3782046, 3782175, 3782304, 3782432, 3782561, 3782690, 3782819, 3782947, 3783076, 3783205, 3783333, 3783462, 3783591, 3783720, 3783848, 3783977, 3784106, 3784235, 3784363, 3784492, 3784621, 3784750, 3784878, 3785007, 3785136, 3785265, 3785393, 3785522, 3785651, 3785780, 3785909, 3786037, 3786166, 3786295, 3786424, 3786552, 3786681, 3786810, 3786939, 3787067, 3787196, 3787325, 3787454, 3787583, 3787711, 3787840, 3787969, 3788098, 3788227, 3788355, 3788484, 3788613, 3788742, 3788870, 3788999, 3789128, 3789257, 3789386, 3789514, 3789643, 3789772, 3789901, 3790030, 3790159, 3790287, 3790416, 3790545, 3790674, 3790803, 3790931, 3791060, 3791189, 3791318, 3791447, 3791575, 3791704, 3791833, 3791962, 3792091, 3792220, 3792348, 3792477, 3792606, 3792735, 3792864, 3792993, 3793121, 3793250, 3793379, 3793508, 3793637, 3793766, 3793895, 3794023, 3794152, 3794281, 3794410, 3794539, 3794668, 3794797, 3794925, 3795054, 3795183, 3795312, 3795441, 3795570, 3795699, 3795827, 3795956, 3796085, 3796214, 3796343, 3796472, 3796601, 3796730, 3796858, 3796987, 3797116, 3797245, 3797374, 3797503, 3797632, 3797761, 3797890, 3798018, 3798147, 3798276, 3798405, 3798534, 3798663, 3798792, 3798921, 3799050, 3799179, 3799307, 3799436, 3799565, 3799694, 3799823, 3799952, 3800081, 3800210, 3800339, 3800468, 3800597, 3800725, 3800854, 3800983, 3801112, 3801241, 3801370, 3801499, 3801628, 3801757, 3801886, 3802015, 3802144, 3802273, 3802402, 3802531, 3802659, 3802788, 3802917, 3803046, 3803175, 3803304, 3803433, 3803562, 3803691, 3803820, 3803949, 3804078, 3804207, 3804336, 3804465, 3804594, 3804723, 3804852, 3804981, 3805110, 3805239, 3805368, 3805497, 3805625, 3805754, 3805883, 3806012, 3806141, 3806270, 3806399, 3806528, 3806657, 3806786, 3806915, 3807044, 3807173, 3807302, 3807431, 3807560, 3807689, 3807818, 3807947, 3808076, 3808205, 3808334, 3808463, 3808592, 3808721, 3808850, 3808979, 3809108, 3809237, 3809366, 3809495, 3809624, 3809753, 3809882, 3810011, 3810140, 3810269, 3810398, 3810527, 3810656, 3810786, 3810915, 3811044, 3811173, 3811302, 3811431, 3811560, 3811689, 3811818, 3811947, 3812076, 3812205, 3812334, 3812463, 3812592, 3812721, 3812850, 3812979, 3813108, 3813237, 3813366, 3813495, 3813624, 3813754, 3813883, 3814012, 3814141, 3814270, 3814399, 3814528, 3814657, 3814786, 3814915, 3815044, 3815173, 3815302, 3815431, 3815560, 3815690, 3815819, 3815948, 3816077, 3816206, 3816335, 3816464, 3816593, 3816722, 3816851, 3816980, 3817110, 3817239, 3817368, 3817497, 3817626, 3817755, 3817884, 3818013, 3818142, 3818271, 3818401, 3818530, 3818659, 3818788, 3818917, 3819046, 3819175, 3819304, 3819433, 3819563, 3819692, 3819821, 3819950, 3820079, 3820208, 3820337, 3820466, 3820596, 3820725, 3820854, 3820983, 3821112, 3821241, 3821370, 3821500, 3821629, 3821758, 3821887, 3822016, 3822145, 3822274, 3822404, 3822533, 3822662, 3822791, 3822920, 3823049, 3823178, 3823308, 3823437, 3823566, 3823695, 3823824, 3823953, 3824083, 3824212, 3824341, 3824470, 3824599, 3824728, 3824858, 3824987, 3825116, 3825245, 3825374, 3825504, 3825633, 3825762, 3825891, 3826020, 3826150, 3826279, 3826408, 3826537, 3826666, 3826795, 3826925, 3827054, 3827183, 3827312, 3827441, 3827571, 3827700, 3827829, 3827958, 3828088, 3828217, 3828346, 3828475, 3828604, 3828734, 3828863, 3828992, 3829121, 3829250, 3829380, 3829509, 3829638, 3829767, 3829897, 3830026, 3830155, 3830284, 3830414, 3830543, 3830672, 3830801, 3830930, 3831060, 3831189, 3831318, 3831447, 3831577, 3831706, 3831835, 3831964, 3832094, 3832223, 3832352, 3832481, 3832611, 3832740, 3832869, 3832999, 3833128, 3833257, 3833386, 3833516, 3833645, 3833774, 3833903, 3834033, 3834162, 3834291, 3834420, 3834550, 3834679, 3834808, 3834938, 3835067, 3835196, 3835325, 3835455, 3835584, 3835713, 3835843, 3835972, 3836101, 3836231, 3836360, 3836489, 3836618, 3836748, 3836877, 3837006, 3837136, 3837265, 3837394, 3837524, 3837653, 3837782, 3837911, 3838041, 3838170, 3838299, 3838429, 3838558, 3838687, 3838817, 3838946, 3839075, 3839205, 3839334, 3839463, 3839593, 3839722, 3839851, 3839981, 3840110, 3840239, 3840369, 3840498, 3840627, 3840757, 3840886, 3841015, 3841145, 3841274, 3841403, 3841533, 3841662, 3841792, 3841921, 3842050, 3842180, 3842309, 3842438, 3842568, 3842697, 3842826, 3842956, 3843085, 3843215, 3843344, 3843473, 3843603, 3843732, 3843861, 3843991, 3844120, 3844250, 3844379, 3844508, 3844638, 3844767, 3844896, 3845026, 3845155, 3845285, 3845414, 3845543, 3845673, 3845802, 3845932, 3846061, 3846190, 3846320, 3846449, 3846579, 3846708, 3846837, 3846967, 3847096, 3847226, 3847355, 3847485, 3847614, 3847743, 3847873, 3848002, 3848132, 3848261, 3848390, 3848520, 3848649, 3848779, 3848908, 3849038, 3849167, 3849297, 3849426, 3849555, 3849685, 3849814, 3849944, 3850073, 3850203, 3850332, 3850461, 3850591, 3850720, 3850850, 3850979, 3851109, 3851238, 3851368, 3851497, 3851627, 3851756, 3851885, 3852015, 3852144, 3852274, 3852403, 3852533, 3852662, 3852792, 3852921, 3853051, 3853180, 3853310, 3853439, 3853569, 3853698, 3853828, 3853957, 3854087, 3854216, 3854346, 3854475, 3854604, 3854734, 3854863, 3854993, 3855122, 3855252, 3855381, 3855511, 3855640, 3855770, 3855899, 3856029, 3856158, 3856288, 3856418, 3856547, 3856677, 3856806, 3856936, 3857065, 3857195, 3857324, 3857454, 3857583, 3857713, 3857842, 3857972, 3858101, 3858231, 3858360, 3858490, 3858619, 3858749, 3858878, 3859008, 3859138, 3859267, 3859397, 3859526, 3859656, 3859785, 3859915, 3860044, 3860174, 3860303, 3860433, 3860563, 3860692, 3860822, 3860951, 3861081, 3861210, 3861340, 3861469, 3861599, 3861729, 3861858, 3861988, 3862117, 3862247, 3862376, 3862506, 3862636, 3862765, 3862895, 3863024, 3863154, 3863283, 3863413, 3863543, 3863672, 3863802, 3863931, 3864061, 3864191, 3864320, 3864450, 3864579, 3864709, 3864839, 3864968, 3865098, 3865227, 3865357, 3865487, 3865616, 3865746, 3865875, 3866005, 3866135, 3866264, 3866394, 3866524, 3866653, 3866783, 3866912, 3867042, 3867172, 3867301, 3867431, 3867560, 3867690, 3867820, 3867949, 3868079, 3868209, 3868338, 3868468, 3868598, 3868727, 3868857, 3868986, 3869116, 3869246, 3869375, 3869505, 3869635, 3869764, 3869894, 3870024, 3870153, 3870283, 3870413, 3870542, 3870672, 3870802, 3870931, 3871061, 3871191, 3871320, 3871450, 3871580, 3871709, 3871839, 3871969, 3872098, 3872228, 3872358, 3872487, 3872617, 3872747, 3872876, 3873006, 3873136, 3873265, 3873395, 3873525, 3873655, 3873784, 3873914, 3874044, 3874173, 3874303, 3874433, 3874562, 3874692, 3874822, 3874952, 3875081, 3875211, 3875341, 3875470, 3875600, 3875730, 3875860, 3875989, 3876119, 3876249, 3876378, 3876508, 3876638, 3876768, 3876897, 3877027, 3877157, 3877286, 3877416, 3877546, 3877676, 3877805, 3877935, 3878065, 3878195, 3878324, 3878454, 3878584, 3878714, 3878843, 3878973, 3879103, 3879233, 3879362, 3879492, 3879622, 3879752, 3879881, 3880011, 3880141, 3880271, 3880400, 3880530, 3880660, 3880790, 3880919, 3881049, 3881179, 3881309, 3881439, 3881568, 3881698, 3881828, 3881958, 3882087, 3882217, 3882347, 3882477, 3882607, 3882736, 3882866, 3882996, 3883126, 3883256, 3883385, 3883515, 3883645, 3883775, 3883905, 3884034, 3884164, 3884294, 3884424, 3884554, 3884683, 3884813, 3884943, 3885073, 3885203, 3885332, 3885462, 3885592, 3885722, 3885852, 3885982, 3886111, 3886241, 3886371, 3886501, 3886631, 3886761, 3886890, 3887020, 3887150, 3887280, 3887410, 3887540, 3887669, 3887799, 3887929, 3888059, 3888189, 3888319, 3888448, 3888578, 3888708, 3888838, 3888968, 3889098, 3889228, 3889357, 3889487, 3889617, 3889747, 3889877, 3890007, 3890137, 3890266, 3890396, 3890526, 3890656, 3890786, 3890916, 3891046, 3891176, 3891305, 3891435, 3891565, 3891695, 3891825, 3891955, 3892085, 3892215, 3892345, 3892474, 3892604, 3892734, 3892864, 3892994, 3893124, 3893254, 3893384, 3893514, 3893644, 3893773, 3893903, 3894033, 3894163, 3894293, 3894423, 3894553, 3894683, 3894813, 3894943, 3895073, 3895202, 3895332, 3895462, 3895592, 3895722, 3895852, 3895982, 3896112, 3896242, 3896372, 3896502, 3896632, 3896762, 3896892, 3897021, 3897151, 3897281, 3897411, 3897541, 3897671, 3897801, 3897931, 3898061, 3898191, 3898321, 3898451, 3898581, 3898711, 3898841, 3898971, 3899101, 3899231, 3899361, 3899491, 3899621, 3899751, 3899881, 3900010, 3900140, 3900270, 3900400, 3900530, 3900660, 3900790, 3900920, 3901050, 3901180, 3901310, 3901440, 3901570, 3901700, 3901830, 3901960, 3902090, 3902220, 3902350, 3902480, 3902610, 3902740, 3902870, 3903000, 3903130, 3903260, 3903390, 3903520, 3903650, 3903780, 3903910, 3904040, 3904170, 3904300, 3904430, 3904560, 3904690, 3904820, 3904950, 3905080, 3905210, 3905340, 3905470, 3905601, 3905731, 3905861, 3905991, 3906121, 3906251, 3906381, 3906511, 3906641, 3906771, 3906901, 3907031, 3907161, 3907291, 3907421, 3907551, 3907681, 3907811, 3907941, 3908071, 3908201, 3908331, 3908462, 3908592, 3908722, 3908852, 3908982, 3909112, 3909242, 3909372, 3909502, 3909632, 3909762, 3909892, 3910022, 3910152, 3910283, 3910413, 3910543, 3910673, 3910803, 3910933, 3911063, 3911193, 3911323, 3911453, 3911583, 3911713, 3911844, 3911974, 3912104, 3912234, 3912364, 3912494, 3912624, 3912754, 3912884, 3913015, 3913145, 3913275, 3913405, 3913535, 3913665, 3913795, 3913925, 3914055, 3914186, 3914316, 3914446, 3914576, 3914706, 3914836, 3914966, 3915096, 3915227, 3915357, 3915487, 3915617, 3915747, 3915877, 3916007, 3916138, 3916268, 3916398, 3916528, 3916658, 3916788, 3916918, 3917049, 3917179, 3917309, 3917439, 3917569, 3917699, 3917829, 3917960, 3918090, 3918220, 3918350, 3918480, 3918610, 3918741, 3918871, 3919001, 3919131, 3919261, 3919392, 3919522, 3919652, 3919782, 3919912, 3920042, 3920173, 3920303, 3920433, 3920563, 3920693, 3920824, 3920954, 3921084, 3921214, 3921344, 3921475, 3921605, 3921735, 3921865, 3921995, 3922126, 3922256, 3922386, 3922516, 3922646, 3922777, 3922907, 3923037, 3923167, 3923297, 3923428, 3923558, 3923688, 3923818, 3923949, 3924079, 3924209, 3924339, 3924469, 3924600, 3924730, 3924860, 3924990, 3925121, 3925251, 3925381, 3925511, 3925642, 3925772, 3925902, 3926032, 3926163, 3926293, 3926423, 3926553, 3926684, 3926814, 3926944, 3927074, 3927205, 3927335, 3927465, 3927595, 3927726, 3927856, 3927986, 3928116, 3928247, 3928377, 3928507, 3928638, 3928768, 3928898, 3929028, 3929159, 3929289, 3929419, 3929549, 3929680, 3929810, 3929940, 3930071, 3930201, 3930331, 3930462, 3930592, 3930722, 3930852, 3930983, 3931113, 3931243, 3931374, 3931504, 3931634, 3931765, 3931895, 3932025, 3932155, 3932286, 3932416, 3932546, 3932677, 3932807, 3932937, 3933068, 3933198, 3933328, 3933459, 3933589, 3933719, 3933850, 3933980, 3934110, 3934241, 3934371, 3934501, 3934632, 3934762, 3934892, 3935023, 3935153, 3935283, 3935414, 3935544, 3935674, 3935805, 3935935, 3936065, 3936196, 3936326, 3936456, 3936587, 3936717, 3936848, 3936978, 3937108, 3937239, 3937369, 3937499, 3937630, 3937760, 3937890, 3938021, 3938151, 3938282, 3938412, 3938542, 3938673, 3938803, 3938934, 3939064, 3939194, 3939325, 3939455, 3939585, 3939716, 3939846, 3939977, 3940107, 3940237, 3940368, 3940498, 3940629, 3940759, 3940889, 3941020, 3941150, 3941281, 3941411, 3941541, 3941672, 3941802, 3941933, 3942063, 3942194, 3942324, 3942454, 3942585, 3942715, 3942846, 3942976, 3943106, 3943237, 3943367, 3943498, 3943628, 3943759, 3943889, 3944020, 3944150, 3944280, 3944411, 3944541, 3944672, 3944802, 3944933, 3945063, 3945193, 3945324, 3945454, 3945585, 3945715, 3945846, 3945976, 3946107, 3946237, 3946368, 3946498, 3946629, 3946759, 3946889, 3947020, 3947150, 3947281, 3947411, 3947542, 3947672, 3947803, 3947933, 3948064, 3948194, 3948325, 3948455, 3948586, 3948716, 3948847, 3948977, 3949108, 3949238, 3949369, 3949499, 3949630, 3949760, 3949891, 3950021, 3950152, 3950282, 3950413, 3950543, 3950674, 3950804, 3950935, 3951065, 3951196, 3951326, 3951457, 3951587, 3951718, 3951848, 3951979, 3952109, 3952240, 3952370, 3952501, 3952631, 3952762, 3952892, 3953023, 3953153, 3953284, 3953415, 3953545, 3953676, 3953806, 3953937, 3954067, 3954198, 3954328, 3954459, 3954589, 3954720, 3954851, 3954981, 3955112, 3955242, 3955373, 3955503, 3955634, 3955764, 3955895, 3956026, 3956156, 3956287, 3956417, 3956548, 3956678, 3956809, 3956940, 3957070, 3957201, 3957331, 3957462, 3957592, 3957723, 3957854, 3957984, 3958115, 3958245, 3958376, 3958507, 3958637, 3958768, 3958898, 3959029, 3959159, 3959290, 3959421, 3959551, 3959682, 3959813, 3959943, 3960074, 3960204, 3960335, 3960466, 3960596, 3960727, 3960857, 3960988, 3961119, 3961249, 3961380, 3961510, 3961641, 3961772, 3961902, 3962033, 3962164, 3962294, 3962425, 3962555, 3962686, 3962817, 3962947, 3963078, 3963209, 3963339, 3963470, 3963601, 3963731, 3963862, 3963993, 3964123, 3964254, 3964384, 3964515, 3964646, 3964776, 3964907, 3965038, 3965168, 3965299, 3965430, 3965560, 3965691, 3965822, 3965952, 3966083, 3966214, 3966344, 3966475, 3966606, 3966736, 3966867, 3966998, 3967128, 3967259, 3967390, 3967521, 3967651, 3967782, 3967913, 3968043, 3968174, 3968305, 3968435, 3968566, 3968697, 3968827, 3968958, 3969089, 3969220, 3969350, 3969481, 3969612, 3969742, 3969873, 3970004, 3970135, 3970265, 3970396, 3970527, 3970657, 3970788, 3970919, 3971050, 3971180, 3971311, 3971442, 3971572, 3971703, 3971834, 3971965, 3972095, 3972226, 3972357, 3972488, 3972618, 3972749, 3972880, 3973011, 3973141, 3973272, 3973403, 3973534, 3973664, 3973795, 3973926, 3974057, 3974187, 3974318, 3974449, 3974580, 3974710, 3974841, 3974972, 3975103, 3975233, 3975364, 3975495, 3975626, 3975756, 3975887, 3976018, 3976149, 3976280, 3976410, 3976541, 3976672, 3976803, 3976934, 3977064, 3977195, 3977326, 3977457, 3977587, 3977718, 3977849, 3977980, 3978111, 3978241, 3978372, 3978503, 3978634, 3978765, 3978895, 3979026, 3979157, 3979288, 3979419, 3979549, 3979680, 3979811, 3979942, 3980073, 3980204, 3980334, 3980465, 3980596, 3980727, 3980858, 3980989, 3981119, 3981250, 3981381, 3981512, 3981643, 3981774, 3981904, 3982035, 3982166, 3982297, 3982428, 3982559, 3982689, 3982820, 3982951, 3983082, 3983213, 3983344, 3983474, 3983605, 3983736, 3983867, 3983998, 3984129, 3984260, 3984391, 3984521, 3984652, 3984783, 3984914, 3985045, 3985176, 3985307, 3985437, 3985568, 3985699, 3985830, 3985961, 3986092, 3986223, 3986354, 3986485, 3986615, 3986746, 3986877, 3987008, 3987139, 3987270, 3987401, 3987532, 3987663, 3987793, 3987924, 3988055, 3988186, 3988317, 3988448, 3988579, 3988710, 3988841, 3988972, 3989103, 3989233, 3989364, 3989495, 3989626, 3989757, 3989888, 3990019, 3990150, 3990281, 3990412, 3990543, 3990674, 3990805, 3990935, 3991066, 3991197, 3991328, 3991459, 3991590, 3991721, 3991852, 3991983, 3992114, 3992245, 3992376, 3992507, 3992638, 3992769, 3992900, 3993031, 3993162, 3993292, 3993423, 3993554, 3993685, 3993816, 3993947, 3994078, 3994209, 3994340, 3994471, 3994602, 3994733, 3994864, 3994995, 3995126, 3995257, 3995388, 3995519, 3995650, 3995781, 3995912, 3996043, 3996174, 3996305, 3996436, 3996567, 3996698, 3996829, 3996960, 3997091, 3997222, 3997353, 3997484, 3997615, 3997746, 3997877, 3998008, 3998139, 3998270, 3998401, 3998532, 3998663, 3998794, 3998925, 3999056, 3999187, 3999318, 3999449, 3999580, 3999711, 3999842, 3999973, 4000104, 4000235, 4000366, 4000497, 4000628, 4000759, 4000890, 4001021, 4001152, 4001283, 4001415, 4001546, 4001677, 4001808, 4001939, 4002070, 4002201, 4002332, 4002463, 4002594, 4002725, 4002856, 4002987, 4003118, 4003249, 4003380, 4003511, 4003642, 4003774, 4003905, 4004036, 4004167, 4004298, 4004429, 4004560, 4004691, 4004822, 4004953, 4005084, 4005215, 4005346, 4005478, 4005609, 4005740, 4005871, 4006002, 4006133, 4006264, 4006395, 4006526, 4006657, 4006789, 4006920, 4007051, 4007182, 4007313, 4007444, 4007575, 4007706, 4007837, 4007968, 4008100, 4008231, 4008362, 4008493, 4008624, 4008755, 4008886, 4009017, 4009149, 4009280, 4009411, 4009542, 4009673, 4009804, 4009935, 4010066, 4010198, 4010329, 4010460, 4010591, 4010722, 4010853, 4010984, 4011116, 4011247, 4011378, 4011509, 4011640, 4011771, 4011903, 4012034, 4012165, 4012296, 4012427, 4012558, 4012689, 4012821, 4012952, 4013083, 4013214, 4013345, 4013476, 4013608, 4013739, 4013870, 4014001, 4014132, 4014264, 4014395, 4014526, 4014657, 4014788, 4014919, 4015051, 4015182, 4015313, 4015444, 4015575, 4015707, 4015838, 4015969, 4016100, 4016231, 4016363, 4016494, 4016625, 4016756, 4016887, 4017019, 4017150, 4017281, 4017412, 4017543, 4017675, 4017806, 4017937, 4018068, 4018200, 4018331, 4018462, 4018593, 4018724, 4018856, 4018987, 4019118, 4019249, 4019381, 4019512, 4019643, 4019774, 4019906, 4020037, 4020168, 4020299, 4020431, 4020562, 4020693, 4020824, 4020956, 4021087, 4021218, 4021349, 4021481, 4021612, 4021743, 4021874, 4022006, 4022137, 4022268, 4022399, 4022531, 4022662, 4022793, 4022924, 4023056, 4023187, 4023318, 4023450, 4023581, 4023712, 4023843, 4023975, 4024106, 4024237, 4024369, 4024500, 4024631, 4024762, 4024894, 4025025, 4025156, 4025288, 4025419, 4025550, 4025681, 4025813, 4025944, 4026075, 4026207, 4026338, 4026469, 4026601, 4026732, 4026863, 4026995, 4027126, 4027257, 4027388, 4027520, 4027651, 4027782, 4027914, 4028045, 4028176, 4028308, 4028439, 4028570, 4028702, 4028833, 4028964, 4029096, 4029227, 4029358, 4029490, 4029621, 4029752, 4029884, 4030015, 4030146, 4030278, 4030409, 4030541, 4030672, 4030803, 4030935, 4031066, 4031197, 4031329, 4031460, 4031591, 4031723, 4031854, 4031985, 4032117, 4032248, 4032380, 4032511, 4032642, 4032774, 4032905, 4033036, 4033168, 4033299, 4033431, 4033562, 4033693, 4033825, 4033956, 4034088, 4034219, 4034350, 4034482, 4034613, 4034745, 4034876, 4035007, 4035139, 4035270, 4035402, 4035533, 4035664, 4035796, 4035927, 4036059, 4036190, 4036321, 4036453, 4036584, 4036716, 4036847, 4036978, 4037110, 4037241, 4037373, 4037504, 4037636, 4037767, 4037898, 4038030, 4038161, 4038293, 4038424, 4038556, 4038687, 4038818, 4038950, 4039081, 4039213, 4039344, 4039476, 4039607, 4039739, 4039870, 4040001, 4040133, 4040264, 4040396, 4040527, 4040659, 4040790, 4040922, 4041053, 4041185, 4041316, 4041448, 4041579, 4041710, 4041842, 4041973, 4042105, 4042236, 4042368, 4042499, 4042631, 4042762, 4042894, 4043025, 4043157, 4043288, 4043420, 4043551, 4043683, 4043814, 4043946, 4044077, 4044209, 4044340, 4044472, 4044603, 4044735, 4044866, 4044998, 4045129, 4045261, 4045392, 4045524, 4045655, 4045787, 4045918, 4046050, 4046181, 4046313, 4046444, 4046576, 4046707, 4046839, 4046970, 4047102, 4047233, 4047365, 4047497, 4047628, 4047760, 4047891, 4048023, 4048154, 4048286, 4048417, 4048549, 4048680, 4048812, 4048943, 4049075, 4049207, 4049338, 4049470, 4049601, 4049733, 4049864, 4049996, 4050127, 4050259, 4050391, 4050522, 4050654, 4050785, 4050917, 4051048, 4051180, 4051312, 4051443, 4051575, 4051706, 4051838, 4051969, 4052101, 4052233, 4052364, 4052496, 4052627, 4052759, 4052890, 4053022, 4053154, 4053285, 4053417, 4053548, 4053680, 4053812, 4053943, 4054075, 4054206, 4054338, 4054470, 4054601, 4054733, 4054864, 4054996, 4055128, 4055259, 4055391, 4055523, 4055654, 4055786, 4055917, 4056049, 4056181, 4056312, 4056444, 4056576, 4056707, 4056839, 4056970, 4057102, 4057234, 4057365, 4057497, 4057629, 4057760, 4057892, 4058023, 4058155, 4058287, 4058418, 4058550, 4058682, 4058813, 4058945, 4059077, 4059208, 4059340, 4059472, 4059603, 4059735, 4059867, 4059998, 4060130, 4060262, 4060393, 4060525, 4060657, 4060788, 4060920, 4061052, 4061183, 4061315, 4061447, 4061578, 4061710, 4061842, 4061973, 4062105, 4062237, 4062368, 4062500, 4062632, 4062764, 4062895, 4063027, 4063159, 4063290, 4063422, 4063554, 4063685, 4063817, 4063949, 4064081, 4064212, 4064344, 4064476, 4064607, 4064739, 4064871, 4065003, 4065134, 4065266, 4065398, 4065529, 4065661, 4065793, 4065925, 4066056, 4066188, 4066320, 4066451, 4066583, 4066715, 4066847, 4066978, 4067110, 4067242, 4067374, 4067505, 4067637, 4067769, 4067901, 4068032, 4068164, 4068296, 4068428, 4068559, 4068691, 4068823, 4068955, 4069086, 4069218, 4069350, 4069482, 4069613, 4069745, 4069877, 4070009, 4070141, 4070272, 4070404, 4070536, 4070668, 4070799, 4070931, 4071063, 4071195, 4071327, 4071458, 4071590, 4071722, 4071854, 4071985, 4072117, 4072249, 4072381, 4072513, 4072644, 4072776, 4072908, 4073040, 4073172, 4073303, 4073435, 4073567, 4073699, 4073831, 4073962, 4074094, 4074226, 4074358, 4074490, 4074622, 4074753, 4074885, 4075017, 4075149, 4075281, 4075412, 4075544, 4075676, 4075808, 4075940, 4076072, 4076203, 4076335, 4076467, 4076599, 4076731, 4076863, 4076995, 4077126, 4077258, 4077390, 4077522, 4077654, 4077786, 4077917, 4078049, 4078181, 4078313, 4078445, 4078577, 4078709, 4078840, 4078972, 4079104, 4079236, 4079368, 4079500, 4079632, 4079764, 4079895, 4080027, 4080159, 4080291, 4080423, 4080555, 4080687, 4080819, 4080950, 4081082, 4081214, 4081346, 4081478, 4081610, 4081742, 4081874, 4082006, 4082137, 4082269, 4082401, 4082533, 4082665, 4082797, 4082929, 4083061, 4083193, 4083325, 4083457, 4083588, 4083720, 4083852, 4083984, 4084116, 4084248, 4084380, 4084512, 4084644, 4084776, 4084908, 4085040, 4085171, 4085303, 4085435, 4085567, 4085699, 4085831, 4085963, 4086095, 4086227, 4086359, 4086491, 4086623, 4086755, 4086887, 4087019, 4087151, 4087283, 4087415, 4087546, 4087678, 4087810, 4087942, 4088074, 4088206, 4088338, 4088470, 4088602, 4088734, 4088866, 4088998, 4089130, 4089262, 4089394, 4089526, 4089658, 4089790, 4089922, 4090054, 4090186, 4090318, 4090450, 4090582, 4090714, 4090846, 4090978, 4091110, 4091242, 4091374, 4091506, 4091638, 4091770, 4091902, 4092034, 4092166, 4092298, 4092430, 4092562, 4092694, 4092826, 4092958, 4093090, 4093222, 4093354, 4093486, 4093618, 4093750, 4093882, 4094014, 4094146, 4094278, 4094410, 4094542, 4094674, 4094806, 4094938, 4095070, 4095202, 4095334, 4095466, 4095598, 4095730, 4095862, 4095994, 4096126, 4096259, 4096391, 4096523, 4096655, 4096787, 4096919, 4097051, 4097183, 4097315, 4097447, 4097579, 4097711, 4097843, 4097975, 4098107, 4098239, 4098371, 4098504, 4098636, 4098768, 4098900, 4099032, 4099164, 4099296, 4099428, 4099560, 4099692, 4099824, 4099956, 4100088, 4100221, 4100353, 4100485, 4100617, 4100749, 4100881, 4101013, 4101145, 4101277, 4101409, 4101542, 4101674, 4101806, 4101938, 4102070, 4102202, 4102334, 4102466, 4102598, 4102731, 4102863, 4102995, 4103127, 4103259, 4103391, 4103523, 4103655, 4103787, 4103920, 4104052, 4104184, 4104316, 4104448, 4104580, 4104712, 4104845, 4104977, 4105109, 4105241, 4105373, 4105505, 4105637, 4105770, 4105902, 4106034, 4106166, 4106298, 4106430, 4106562, 4106695, 4106827, 4106959, 4107091, 4107223, 4107355, 4107488, 4107620, 4107752, 4107884, 4108016, 4108148, 4108281, 4108413, 4108545, 4108677, 4108809, 4108942, 4109074, 4109206, 4109338, 4109470, 4109602, 4109735, 4109867, 4109999, 4110131, 4110263, 4110396, 4110528, 4110660, 4110792, 4110924, 4111057, 4111189, 4111321, 4111453, 4111585, 4111718, 4111850, 4111982, 4112114, 4112246, 4112379, 4112511, 4112643, 4112775, 4112908, 4113040, 4113172, 4113304, 4113436, 4113569, 4113701, 4113833, 4113965, 4114098, 4114230, 4114362, 4114494, 4114627, 4114759, 4114891, 4115023, 4115156, 4115288, 4115420, 4115552, 4115685, 4115817, 4115949, 4116081, 4116214, 4116346, 4116478, 4116610, 4116743, 4116875, 4117007, 4117139, 4117272, 4117404, 4117536, 4117669, 4117801, 4117933, 4118065, 4118198, 4118330, 4118462, 4118594, 4118727, 4118859, 4118991, 4119124, 4119256, 4119388, 4119520, 4119653, 4119785, 4119917, 4120050, 4120182, 4120314, 4120447, 4120579, 4120711, 4120844, 4120976, 4121108, 4121240, 4121373, 4121505, 4121637, 4121770, 4121902, 4122034, 4122167, 4122299, 4122431, 4122564, 4122696, 4122828, 4122961, 4123093, 4123225, 4123358, 4123490, 4123622, 4123755, 4123887, 4124019, 4124152, 4124284, 4124416, 4124549, 4124681, 4124813, 4124946, 4125078, 4125210, 4125343, 4125475, 4125607, 4125740, 4125872, 4126005, 4126137, 4126269, 4126402, 4126534, 4126666, 4126799, 4126931, 4127063, 4127196, 4127328, 4127461, 4127593, 4127725, 4127858, 4127990, 4128123, 4128255, 4128387, 4128520, 4128652, 4128784, 4128917, 4129049, 4129182, 4129314, 4129446, 4129579, 4129711, 4129844, 4129976, 4130108, 4130241, 4130373, 4130506, 4130638, 4130770, 4130903, 4131035, 4131168, 4131300, 4131433, 4131565, 4131697, 4131830, 4131962, 4132095, 4132227, 4132360, 4132492, 4132624, 4132757, 4132889, 4133022, 4133154, 4133287, 4133419, 4133551, 4133684, 4133816, 4133949, 4134081, 4134214, 4134346, 4134479, 4134611, 4134743, 4134876, 4135008, 4135141, 4135273, 4135406, 4135538, 4135671, 4135803, 4135936, 4136068, 4136201, 4136333, 4136466, 4136598, 4136730, 4136863, 4136995, 4137128, 4137260, 4137393, 4137525, 4137658, 4137790, 4137923, 4138055, 4138188, 4138320, 4138453, 4138585, 4138718, 4138850, 4138983, 4139115, 4139248, 4139380, 4139513, 4139645, 4139778, 4139910, 4140043, 4140175, 4140308, 4140440, 4140573, 4140705, 4140838, 4140970, 4141103, 4141235, 4141368, 4141500, 4141633, 4141766, 4141898, 4142031, 4142163, 4142296, 4142428, 4142561, 4142693, 4142826, 4142958, 4143091, 4143223, 4143356, 4143489, 4143621, 4143754, 4143886, 4144019, 4144151, 4144284, 4144416, 4144549, 4144681, 4144814, 4144947, 4145079, 4145212, 4145344, 4145477, 4145609, 4145742, 4145875, 4146007, 4146140, 4146272, 4146405, 4146537, 4146670, 4146803, 4146935, 4147068, 4147200, 4147333, 4147466, 4147598, 4147731, 4147863, 4147996, 4148129, 4148261, 4148394, 4148526, 4148659, 4148792, 4148924, 4149057, 4149189, 4149322, 4149455, 4149587, 4149720, 4149852, 4149985, 4150118, 4150250, 4150383, 4150515, 4150648, 4150781, 4150913, 4151046, 4151179, 4151311, 4151444, 4151576, 4151709, 4151842, 4151974, 4152107, 4152240, 4152372, 4152505, 4152638, 4152770, 4152903, 4153036, 4153168, 4153301, 4153433, 4153566, 4153699, 4153831, 4153964, 4154097, 4154229, 4154362, 4154495, 4154627, 4154760, 4154893, 4155025, 4155158, 4155291, 4155423, 4155556, 4155689, 4155821, 4155954, 4156087, 4156219, 4156352, 4156485, 4156618, 4156750, 4156883, 4157016, 4157148, 4157281, 4157414, 4157546, 4157679, 4157812, 4157944, 4158077, 4158210, 4158343, 4158475, 4158608, 4158741, 4158873, 4159006, 4159139, 4159272, 4159404, 4159537, 4159670, 4159802, 4159935, 4160068, 4160201, 4160333, 4160466, 4160599, 4160731, 4160864, 4160997, 4161130, 4161262, 4161395, 4161528, 4161661, 4161793, 4161926, 4162059, 4162192, 4162324, 4162457, 4162590, 4162723, 4162855, 4162988, 4163121, 4163254, 4163386, 4163519, 4163652, 4163785, 4163917, 4164050, 4164183, 4164316, 4164448, 4164581, 4164714, 4164847, 4164980, 4165112, 4165245, 4165378, 4165511, 4165643, 4165776, 4165909, 4166042, 4166175, 4166307, 4166440, 4166573, 4166706, 4166838, 4166971, 4167104, 4167237, 4167370, 4167502, 4167635, 4167768, 4167901, 4168034, 4168166, 4168299, 4168432, 4168565, 4168698, 4168831, 4168963, 4169096, 4169229, 4169362, 4169495, 4169627, 4169760, 4169893, 4170026, 4170159, 4170292, 4170424, 4170557, 4170690, 4170823, 4170956, 4171089, 4171221, 4171354, 4171487, 4171620, 4171753, 4171886, 4172019, 4172151, 4172284, 4172417, 4172550, 4172683, 4172816, 4172948, 4173081, 4173214, 4173347, 4173480, 4173613, 4173746, 4173879, 4174011, 4174144, 4174277, 4174410, 4174543, 4174676, 4174809, 4174942, 4175074, 4175207, 4175340, 4175473, 4175606, 4175739, 4175872, 4176005, 4176137, 4176270, 4176403, 4176536, 4176669, 4176802, 4176935, 4177068, 4177201, 4177334, 4177466, 4177599, 4177732, 4177865, 4177998, 4178131, 4178264, 4178397, 4178530, 4178663, 4178796, 4178929, 4179061, 4179194, 4179327, 4179460, 4179593, 4179726, 4179859, 4179992, 4180125, 4180258, 4180391, 4180524, 4180657, 4180790, 4180923, 4181055, 4181188, 4181321, 4181454, 4181587, 4181720, 4181853, 4181986, 4182119, 4182252, 4182385, 4182518, 4182651, 4182784, 4182917, 4183050, 4183183, 4183316, 4183449, 4183582, 4183715, 4183848, 4183981, 4184114, 4184247, 4184380, 4184512, 4184645, 4184778, 4184911, 4185044, 4185177, 4185310, 4185443, 4185576, 4185709, 4185842, 4185975, 4186108, 4186241, 4186374, 4186507, 4186640, 4186773, 4186906, 4187039, 4187172, 4187305, 4187438, 4187571, 4187704, 4187837, 4187970, 4188103, 4188236, 4188370, 4188503, 4188636, 4188769, 4188902, 4189035, 4189168, 4189301, 4189434, 4189567, 4189700, 4189833, 4189966, 4190099, 4190232, 4190365, 4190498, 4190631, 4190764, 4190897, 4191030, 4191163, 4191296, 4191429, 4191562, 4191695, 4191829, 4191962, 4192095, 4192228, 4192361, 4192494, 4192627, 4192760, 4192893, 4193026, 4193159, 4193292, 4193425, 4193558, 4193692, 4193825, 4193958, 4194091, 4194224, 4194357, 4194490, 4194623, 4194756, 4194889, 4195022, 4195155, 4195289, 4195422, 4195555, 4195688, 4195821, 4195954, 4196087, 4196220, 4196353, 4196486, 4196620, 4196753, 4196886, 4197019, 4197152, 4197285, 4197418, 4197551, 4197684, 4197818, 4197951, 4198084, 4198217, 4198350, 4198483, 4198616, 4198749, 4198883, 4199016, 4199149, 4199282, 4199415, 4199548, 4199681, 4199815, 4199948, 4200081, 4200214, 4200347, 4200480, 4200613, 4200747, 4200880, 4201013, 4201146, 4201279, 4201412, 4201546, 4201679, 4201812, 4201945, 4202078, 4202211, 4202345, 4202478, 4202611, 4202744, 4202877, 4203010, 4203144, 4203277, 4203410, 4203543, 4203676, 4203809, 4203943, 4204076, 4204209, 4204342, 4204475, 4204609, 4204742, 4204875, 4205008, 4205141, 4205275, 4205408, 4205541, 4205674, 4205807, 4205941, 4206074, 4206207, 4206340, 4206473, 4206607, 4206740, 4206873, 4207006, 4207140, 4207273, 4207406, 4207539, 4207672, 4207806, 4207939, 4208072, 4208205, 4208339, 4208472, 4208605, 4208738, 4208872, 4209005, 4209138, 4209271, 4209404, 4209538, 4209671, 4209804, 4209937, 4210071, 4210204, 4210337, 4210470, 4210604, 4210737, 4210870, 4211004, 4211137, 4211270, 4211403, 4211537, 4211670, 4211803, 4211936, 4212070, 4212203, 4212336, 4212469, 4212603, 4212736, 4212869, 4213003, 4213136, 4213269, 4213402, 4213536, 4213669, 4213802, 4213936, 4214069, 4214202, 4214335, 4214469, 4214602, 4214735, 4214869, 4215002, 4215135, 4215269, 4215402, 4215535, 4215669, 4215802, 4215935, 4216068, 4216202, 4216335, 4216468, 4216602, 4216735, 4216868, 4217002, 4217135, 4217268, 4217402, 4217535, 4217668, 4217802, 4217935, 4218068, 4218202, 4218335, 4218468, 4218602, 4218735, 4218868, 4219002, 4219135, 4219268, 4219402, 4219535, 4219668, 4219802, 4219935, 4220069, 4220202, 4220335, 4220469, 4220602, 4220735, 4220869, 4221002, 4221135, 4221269, 4221402, 4221536, 4221669, 4221802, 4221936, 4222069, 4222202, 4222336, 4222469, 4222603, 4222736, 4222869, 4223003, 4223136, 4223269, 4223403, 4223536, 4223670, 4223803, 4223936, 4224070, 4224203, 4224337, 4224470, 4224603, 4224737, 4224870, 4225004, 4225137, 4225270, 4225404, 4225537, 4225671, 4225804, 4225938, 4226071, 4226204, 4226338, 4226471, 4226605, 4226738, 4226872, 4227005, 4227138, 4227272, 4227405, 4227539, 4227672, 4227806, 4227939, 4228072, 4228206, 4228339, 4228473, 4228606, 4228740, 4228873, 4229007, 4229140, 4229273, 4229407, 4229540, 4229674, 4229807, 4229941, 4230074, 4230208, 4230341, 4230475, 4230608, 4230742, 4230875, 4231009, 4231142, 4231275, 4231409, 4231542, 4231676, 4231809, 4231943, 4232076, 4232210, 4232343, 4232477, 4232610, 4232744, 4232877, 4233011, 4233144, 4233278, 4233411, 4233545, 4233678, 4233812, 4233945, 4234079, 4234212, 4234346, 4234479, 4234613, 4234746, 4234880, 4235013, 4235147, 4235280, 4235414, 4235547, 4235681, 4235814, 4235948, 4236081, 4236215, 4236349, 4236482, 4236616, 4236749, 4236883, 4237016, 4237150, 4237283, 4237417, 4237550, 4237684, 4237817, 4237951, 4238085, 4238218, 4238352, 4238485, 4238619, 4238752, 4238886, 4239019, 4239153, 4239287, 4239420, 4239554, 4239687, 4239821, 4239954, 4240088, 4240221, 4240355, 4240489, 4240622, 4240756, 4240889, 4241023, 4241156, 4241290, 4241424, 4241557, 4241691, 4241824, 4241958, 4242092, 4242225, 4242359, 4242492, 4242626, 4242760, 4242893, 4243027, 4243160, 4243294, 4243428, 4243561, 4243695, 4243828, 4243962, 4244096, 4244229, 4244363, 4244496, 4244630, 4244764, 4244897, 4245031, 4245165, 4245298, 4245432, 4245565, 4245699, 4245833, 4245966, 4246100, 4246234, 4246367, 4246501, 4246634, 4246768, 4246902, 4247035, 4247169, 4247303, 4247436, 4247570, 4247704, 4247837, 4247971, 4248105, 4248238, 4248372, 4248506, 4248639, 4248773, 4248906, 4249040, 4249174, 4249307, 4249441, 4249575, 4249708, 4249842, 4249976, 4250110, 4250243, 4250377, 4250511, 4250644, 4250778, 4250912, 4251045, 4251179, 4251313, 4251446, 4251580, 4251714, 4251847, 4251981, 4252115, 4252248, 4252382, 4252516, 4252650, 4252783, 4252917, 4253051, 4253184, 4253318, 4253452, 4253586, 4253719, 4253853, 4253987, 4254120, 4254254, 4254388, 4254522, 4254655, 4254789, 4254923, 4255056, 4255190, 4255324, 4255458, 4255591, 4255725, 4255859, 4255993, 4256126, 4256260, 4256394, 4256528, 4256661, 4256795, 4256929, 4257062, 4257196, 4257330, 4257464, 4257598, 4257731, 4257865, 4257999, 4258133, 4258266, 4258400, 4258534, 4258668, 4258801, 4258935, 4259069, 4259203, 4259336, 4259470, 4259604, 4259738, 4259872, 4260005, 4260139, 4260273, 4260407, 4260540, 4260674, 4260808, 4260942, 4261076, 4261209, 4261343, 4261477, 4261611, 4261745, 4261878, 4262012, 4262146, 4262280, 4262414, 4262547, 4262681, 4262815, 4262949, 4263083, 4263216, 4263350, 4263484, 4263618, 4263752, 4263885, 4264019, 4264153, 4264287, 4264421, 4264555, 4264688, 4264822, 4264956, 4265090, 4265224, 4265358, 4265491, 4265625, 4265759, 4265893, 4266027, 4266161, 4266294, 4266428, 4266562, 4266696, 4266830, 4266964, 4267098, 4267231, 4267365, 4267499, 4267633, 4267767, 4267901, 4268035, 4268168, 4268302, 4268436, 4268570, 4268704, 4268838, 4268972, 4269106, 4269239, 4269373, 4269507, 4269641, 4269775, 4269909, 4270043, 4270177, 4270310, 4270444, 4270578, 4270712, 4270846, 4270980, 4271114, 4271248, 4271382, 4271516, 4271649, 4271783, 4271917, 4272051, 4272185, 4272319, 4272453, 4272587, 4272721, 4272855, 4272989, 4273122, 4273256, 4273390, 4273524, 4273658, 4273792, 4273926, 4274060, 4274194, 4274328, 4274462, 4274596, 4274730, 4274864, 4274997, 4275131, 4275265, 4275399, 4275533, 4275667, 4275801, 4275935, 4276069, 4276203, 4276337, 4276471, 4276605, 4276739, 4276873, 4277007, 4277141, 4277275, 4277409, 4277543, 4277676, 4277810, 4277944, 4278078, 4278212, 4278346, 4278480, 4278614, 4278748, 4278882, 4279016, 4279150, 4279284, 4279418, 4279552, 4279686, 4279820, 4279954, 4280088, 4280222, 4280356, 4280490, 4280624, 4280758, 4280892, 4281026, 4281160, 4281294, 4281428, 4281562, 4281696, 4281830, 4281964, 4282098, 4282232, 4282366, 4282500, 4282634, 4282768, 4282902, 4283036, 4283170, 4283304, 4283438, 4283572, 4283706, 4283840, 4283974, 4284108, 4284243, 4284377, 4284511, 4284645, 4284779, 4284913, 4285047, 4285181, 4285315, 4285449, 4285583, 4285717, 4285851, 4285985, 4286119, 4286253, 4286387, 4286521, 4286655, 4286789, 4286924, 4287058, 4287192, 4287326, 4287460, 4287594, 4287728, 4287862, 4287996, 4288130, 4288264, 4288398, 4288532, 4288666, 4288801, 4288935, 4289069, 4289203, 4289337, 4289471, 4289605, 4289739, 4289873, 4290007, 4290141, 4290276, 4290410, 4290544, 4290678, 4290812, 4290946, 4291080, 4291214, 4291348, 4291483, 4291617, 4291751, 4291885, 4292019, 4292153, 4292287, 4292421, 4292555, 4292690, 4292824, 4292958, 4293092, 4293226, 4293360, 4293494, 4293628, 4293763, 4293897, 4294031, 4294165, 4294299, 4294433, 4294567, 4294702, 4294836, 4294970, 4295104, 4295238, 4295372, 4295507, 4295641, 4295775, 4295909, 4296043, 4296177, 4296311, 4296446, 4296580, 4296714, 4296848, 4296982, 4297116, 4297251, 4297385, 4297519, 4297653, 4297787, 4297922, 4298056, 4298190, 4298324, 4298458, 4298592, 4298727, 4298861, 4298995, 4299129, 4299263, 4299398, 4299532, 4299666, 4299800, 4299934, 4300069, 4300203, 4300337, 4300471, 4300605, 4300740, 4300874, 4301008, 4301142, 4301276, 4301411, 4301545, 4301679, 4301813, 4301948, 4302082, 4302216, 4302350, 4302484, 4302619, 4302753, 4302887, 4303021, 4303156, 4303290, 4303424, 4303558, 4303693, 4303827, 4303961, 4304095, 4304230, 4304364, 4304498, 4304632, 4304767, 4304901, 4305035, 4305169, 4305304, 4305438, 4305572, 4305706, 4305841, 4305975, 4306109, 4306243, 4306378, 4306512, 4306646, 4306780, 4306915, 4307049, 4307183, 4307318, 4307452, 4307586, 4307720, 4307855, 4307989, 4308123, 4308258, 4308392, 4308526, 4308660, 4308795, 4308929, 4309063, 4309198, 4309332, 4309466, 4309601, 4309735, 4309869, 4310003, 4310138, 4310272, 4310406, 4310541, 4310675, 4310809, 4310944, 4311078, 4311212, 4311347, 4311481, 4311615, 4311750, 4311884, 4312018, 4312153, 4312287, 4312421, 4312556, 4312690, 4312824, 4312959, 4313093, 4313227, 4313362, 4313496, 4313630, 4313765, 4313899, 4314033, 4314168, 4314302, 4314436, 4314571, 4314705, 4314839, 4314974, 4315108, 4315243, 4315377, 4315511, 4315646, 4315780, 4315914, 4316049, 4316183, 4316318, 4316452, 4316586, 4316721, 4316855, 4316989, 4317124, 4317258, 4317393, 4317527, 4317661, 4317796, 4317930, 4318065, 4318199, 4318333, 4318468, 4318602, 4318736, 4318871, 4319005, 4319140, 4319274, 4319409, 4319543, 4319677, 4319812, 4319946, 4320081, 4320215, 4320349, 4320484, 4320618, 4320753, 4320887, 4321022, 4321156, 4321290, 4321425, 4321559, 4321694, 4321828, 4321963, 4322097, 4322231, 4322366, 4322500, 4322635, 4322769, 4322904, 4323038, 4323172, 4323307, 4323441, 4323576, 4323710, 4323845, 4323979, 4324114, 4324248, 4324383, 4324517, 4324651, 4324786, 4324920, 4325055, 4325189, 4325324, 4325458, 4325593, 4325727, 4325862, 4325996, 4326131, 4326265, 4326400, 4326534, 4326669, 4326803, 4326938, 4327072, 4327207, 4327341, 4327476, 4327610, 4327745, 4327879, 4328014, 4328148, 4328283, 4328417, 4328552, 4328686, 4328821, 4328955, 4329090, 4329224, 4329359, 4329493, 4329628, 4329762, 4329897, 4330031, 4330166, 4330300, 4330435, 4330569, 4330704, 4330838, 4330973, 4331107, 4331242, 4331376, 4331511, 4331645, 4331780, 4331915, 4332049, 4332184, 4332318, 4332453, 4332587, 4332722, 4332856, 4332991, 4333125, 4333260, 4333395, 4333529, 4333664, 4333798, 4333933, 4334067, 4334202, 4334337, 4334471, 4334606, 4334740, 4334875, 4335009, 4335144, 4335278, 4335413, 4335548, 4335682, 4335817, 4335951, 4336086, 4336221, 4336355, 4336490, 4336624, 4336759, 4336894, 4337028, 4337163, 4337297, 4337432, 4337566, 4337701, 4337836, 4337970, 4338105, 4338239, 4338374, 4338509, 4338643, 4338778, 4338913, 4339047, 4339182, 4339316, 4339451, 4339586, 4339720, 4339855, 4339990, 4340124, 4340259, 4340393, 4340528, 4340663, 4340797, 4340932, 4341067, 4341201, 4341336, 4341470, 4341605, 4341740, 4341874, 4342009, 4342144, 4342278, 4342413, 4342548, 4342682, 4342817, 4342952, 4343086, 4343221, 4343356, 4343490, 4343625, 4343760, 4343894, 4344029, 4344164, 4344298, 4344433, 4344568, 4344702, 4344837, 4344972, 4345106, 4345241, 4345376, 4345510, 4345645, 4345780, 4345914, 4346049, 4346184, 4346318, 4346453, 4346588, 4346723, 4346857, 4346992, 4347127, 4347261, 4347396, 4347531, 4347665, 4347800, 4347935, 4348070, 4348204, 4348339, 4348474, 4348608, 4348743, 4348878, 4349013, 4349147, 4349282, 4349417, 4349551, 4349686, 4349821, 4349956, 4350090, 4350225, 4350360, 4350495, 4350629, 4350764, 4350899, 4351034, 4351168, 4351303, 4351438, 4351573, 4351707, 4351842, 4351977, 4352112, 4352246, 4352381, 4352516, 4352651, 4352785, 4352920, 4353055, 4353190, 4353324, 4353459, 4353594, 4353729, 4353863, 4353998, 4354133, 4354268, 4354403, 4354537, 4354672, 4354807, 4354942, 4355076, 4355211, 4355346, 4355481, 4355616, 4355750, 4355885, 4356020, 4356155, 4356290, 4356424, 4356559, 4356694, 4356829, 4356964, 4357098, 4357233, 4357368, 4357503, 4357638, 4357772, 4357907, 4358042, 4358177, 4358312, 4358447, 4358581, 4358716, 4358851, 4358986, 4359121, 4359255, 4359390, 4359525, 4359660, 4359795, 4359930, 4360064, 4360199, 4360334, 4360469, 4360604, 4360739, 4360874, 4361008, 4361143, 4361278, 4361413, 4361548, 4361683, 4361817, 4361952, 4362087, 4362222, 4362357, 4362492, 4362627, 4362761, 4362896, 4363031, 4363166, 4363301, 4363436, 4363571, 4363706, 4363840, 4363975, 4364110, 4364245, 4364380, 4364515, 4364650, 4364785, 4364920, 4365054, 4365189, 4365324, 4365459, 4365594, 4365729, 4365864, 4365999, 4366134, 4366268, 4366403, 4366538, 4366673, 4366808, 4366943, 4367078, 4367213, 4367348, 4367483, 4367618, 4367753, 4367887, 4368022, 4368157, 4368292, 4368427, 4368562, 4368697, 4368832, 4368967, 4369102, 4369237, 4369372, 4369507, 4369642, 4369776, 4369911, 4370046, 4370181, 4370316, 4370451, 4370586, 4370721, 4370856, 4370991, 4371126, 4371261, 4371396, 4371531, 4371666, 4371801, 4371936, 4372071, 4372206, 4372341, 4372476, 4372611, 4372745, 4372880, 4373015, 4373150, 4373285, 4373420, 4373555, 4373690, 4373825, 4373960, 4374095, 4374230, 4374365, 4374500, 4374635, 4374770, 4374905, 4375040, 4375175, 4375310, 4375445, 4375580, 4375715, 4375850, 4375985, 4376120, 4376255, 4376390, 4376525, 4376660, 4376795, 4376930, 4377065, 4377200, 4377335, 4377470, 4377605, 4377740, 4377875, 4378010, 4378145, 4378281, 4378416, 4378551, 4378686, 4378821, 4378956, 4379091, 4379226, 4379361, 4379496, 4379631, 4379766, 4379901, 4380036, 4380171, 4380306, 4380441, 4380576, 4380711, 4380846, 4380981, 4381116, 4381252, 4381387, 4381522, 4381657, 4381792, 4381927, 4382062, 4382197, 4382332, 4382467, 4382602, 4382737, 4382872, 4383007, 4383143, 4383278, 4383413, 4383548, 4383683, 4383818, 4383953, 4384088, 4384223, 4384358, 4384493, 4384629, 4384764, 4384899, 4385034, 4385169, 4385304, 4385439, 4385574, 4385709, 4385844, 4385980, 4386115, 4386250, 4386385, 4386520, 4386655, 4386790, 4386925, 4387060, 4387196, 4387331, 4387466, 4387601, 4387736, 4387871, 4388006, 4388142, 4388277, 4388412, 4388547, 4388682, 4388817, 4388952, 4389087, 4389223, 4389358, 4389493, 4389628, 4389763, 4389898, 4390034, 4390169, 4390304, 4390439, 4390574, 4390709, 4390844, 4390980, 4391115, 4391250, 4391385, 4391520, 4391655, 4391791, 4391926, 4392061, 4392196, 4392331, 4392467, 4392602, 4392737, 4392872, 4393007, 4393142, 4393278, 4393413, 4393548, 4393683, 4393818, 4393954, 4394089, 4394224, 4394359, 4394494, 4394630, 4394765, 4394900, 4395035, 4395170, 4395306, 4395441, 4395576, 4395711, 4395847, 4395982, 4396117, 4396252, 4396387, 4396523, 4396658, 4396793, 4396928, 4397064, 4397199, 4397334, 4397469, 4397604, 4397740, 4397875, 4398010, 4398145, 4398281, 4398416, 4398551, 4398686, 4398822, 4398957, 4399092, 4399227, 4399363, 4399498, 4399633, 4399768, 4399904, 4400039, 4400174, 4400309, 4400445, 4400580, 4400715, 4400850, 4400986, 4401121, 4401256, 4401392, 4401527, 4401662, 4401797, 4401933, 4402068, 4402203, 4402339, 4402474, 4402609, 4402744, 4402880, 4403015, 4403150, 4403286, 4403421, 4403556, 4403691, 4403827, 4403962, 4404097, 4404233, 4404368, 4404503, 4404639, 4404774, 4404909, 4405044, 4405180, 4405315, 4405450, 4405586, 4405721, 4405856, 4405992, 4406127, 4406262, 4406398, 4406533, 4406668, 4406804, 4406939, 4407074, 4407210, 4407345, 4407480, 4407616, 4407751, 4407886, 4408022, 4408157, 4408292, 4408428, 4408563, 4408698, 4408834, 4408969, 4409105, 4409240, 4409375, 4409511, 4409646, 4409781, 4409917, 4410052, 4410187, 4410323, 4410458, 4410594, 4410729, 4410864, 4411000, 4411135, 4411270, 4411406, 4411541, 4411677, 4411812, 4411947, 4412083, 4412218, 4412353, 4412489, 4412624, 4412760, 4412895, 4413030, 4413166, 4413301, 4413437, 4413572, 4413707, 4413843, 4413978, 4414114, 4414249, 4414385, 4414520, 4414655, 4414791, 4414926, 4415062, 4415197, 4415332, 4415468, 4415603, 4415739, 4415874, 4416010, 4416145, 4416280, 4416416, 4416551, 4416687, 4416822, 4416958, 4417093, 4417228, 4417364, 4417499, 4417635, 4417770, 4417906, 4418041, 4418177, 4418312, 4418448, 4418583, 4418718, 4418854, 4418989, 4419125, 4419260, 4419396, 4419531, 4419667, 4419802, 4419938, 4420073, 4420209, 4420344, 4420479, 4420615, 4420750, 4420886, 4421021, 4421157, 4421292, 4421428, 4421563, 4421699, 4421834, 4421970, 4422105, 4422241, 4422376, 4422512, 4422647, 4422783, 4422918, 4423054, 4423189, 4423325, 4423460, 4423596, 4423731, 4423867, 4424002, 4424138, 4424273, 4424409, 4424544, 4424680, 4424815, 4424951, 4425087, 4425222, 4425358, 4425493, 4425629, 4425764, 4425900, 4426035, 4426171, 4426306, 4426442, 4426577, 4426713, 4426848, 4426984, 4427120, 4427255, 4427391, 4427526, 4427662, 4427797, 4427933, 4428068, 4428204, 4428340, 4428475, 4428611, 4428746, 4428882, 4429017, 4429153, 4429288, 4429424, 4429560, 4429695, 4429831, 4429966, 4430102, 4430238, 4430373, 4430509, 4430644, 4430780, 4430915, 4431051, 4431187, 4431322, 4431458, 4431593, 4431729, 4431865, 4432000, 4432136, 4432271, 4432407, 4432543, 4432678, 4432814, 4432949, 4433085, 4433221, 4433356, 4433492, 4433627, 4433763, 4433899, 4434034, 4434170, 4434306, 4434441, 4434577, 4434712, 4434848, 4434984, 4435119, 4435255, 4435391, 4435526, 4435662, 4435797, 4435933, 4436069, 4436204, 4436340, 4436476, 4436611, 4436747, 4436883, 4437018, 4437154, 4437290, 4437425, 4437561, 4437697, 4437832, 4437968, 4438104, 4438239, 4438375, 4438511, 4438646, 4438782, 4438918, 4439053, 4439189, 4439325, 4439460, 4439596, 4439732, 4439867, 4440003, 4440139, 4440274, 4440410, 4440546, 4440681, 4440817, 4440953, 4441088, 4441224, 4441360, 4441496, 4441631, 4441767, 4441903, 4442038, 4442174, 4442310, 4442445, 4442581, 4442717, 4442853, 4442988, 4443124, 4443260, 4443395, 4443531, 4443667, 4443803, 4443938, 4444074, 4444210, 4444346, 4444481, 4444617, 4444753, 4444888, 4445024, 4445160, 4445296, 4445431, 4445567, 4445703, 4445839, 4445974, 4446110, 4446246, 4446382, 4446517, 4446653, 4446789, 4446925, 4447060, 4447196, 4447332, 4447468, 4447603, 4447739, 4447875, 4448011, 4448147, 4448282, 4448418, 4448554, 4448690, 4448825, 4448961, 4449097, 4449233, 4449369, 4449504, 4449640, 4449776, 4449912, 4450047, 4450183, 4450319, 4450455, 4450591, 4450726, 4450862, 4450998, 4451134, 4451270, 4451405, 4451541, 4451677, 4451813, 4451949, 4452084, 4452220, 4452356, 4452492, 4452628, 4452764, 4452899, 4453035, 4453171, 4453307, 4453443, 4453578, 4453714, 4453850, 4453986, 4454122, 4454258, 4454393, 4454529, 4454665, 4454801, 4454937, 4455073, 4455208, 4455344, 4455480, 4455616, 4455752, 4455888, 4456024, 4456159, 4456295, 4456431, 4456567, 4456703, 4456839, 4456975, 4457110, 4457246, 4457382, 4457518, 4457654, 4457790, 4457926, 4458061, 4458197, 4458333, 4458469, 4458605, 4458741, 4458877, 4459013, 4459149, 4459284, 4459420, 4459556, 4459692, 4459828, 4459964, 4460100, 4460236, 4460372, 4460507, 4460643, 4460779, 4460915, 4461051, 4461187, 4461323, 4461459, 4461595, 4461731, 4461867, 4462002, 4462138, 4462274, 4462410, 4462546, 4462682, 4462818, 4462954, 4463090, 4463226, 4463362, 4463498, 4463634, 4463769, 4463905, 4464041, 4464177, 4464313, 4464449, 4464585, 4464721, 4464857, 4464993, 4465129, 4465265, 4465401, 4465537, 4465673, 4465809, 4465945, 4466081, 4466217, 4466352, 4466488, 4466624, 4466760, 4466896, 4467032, 4467168, 4467304, 4467440, 4467576, 4467712, 4467848, 4467984, 4468120, 4468256, 4468392, 4468528, 4468664, 4468800, 4468936, 4469072, 4469208, 4469344, 4469480, 4469616, 4469752, 4469888, 4470024, 4470160, 4470296, 4470432, 4470568, 4470704, 4470840, 4470976, 4471112, 4471248, 4471384, 4471520, 4471656, 4471792, 4471928, 4472064, 4472200, 4472336, 4472472, 4472608, 4472744, 4472880, 4473016, 4473152, 4473288, 4473424, 4473560, 4473696, 4473833, 4473969, 4474105, 4474241, 4474377, 4474513, 4474649, 4474785, 4474921, 4475057, 4475193, 4475329, 4475465, 4475601, 4475737, 4475873, 4476009, 4476145, 4476282, 4476418, 4476554, 4476690, 4476826, 4476962, 4477098, 4477234, 4477370, 4477506, 4477642, 4477778, 4477914, 4478050, 4478187, 4478323, 4478459, 4478595, 4478731, 4478867, 4479003, 4479139, 4479275, 4479411, 4479548, 4479684, 4479820, 4479956, 4480092, 4480228, 4480364, 4480500, 4480636, 4480772, 4480909, 4481045, 4481181, 4481317, 4481453, 4481589, 4481725, 4481861, 4481998, 4482134, 4482270, 4482406, 4482542, 4482678, 4482814, 4482950, 4483087, 4483223, 4483359, 4483495, 4483631, 4483767, 4483903, 4484040, 4484176, 4484312, 4484448, 4484584, 4484720, 4484857, 4484993, 4485129, 4485265, 4485401, 4485537, 4485674, 4485810, 4485946, 4486082, 4486218, 4486354, 4486491, 4486627, 4486763, 4486899, 4487035, 4487171, 4487308, 4487444, 4487580, 4487716, 4487852, 4487989, 4488125, 4488261, 4488397, 4488533, 4488670, 4488806, 4488942, 4489078, 4489214, 4489351, 4489487, 4489623, 4489759, 4489895, 4490032, 4490168, 4490304, 4490440, 4490576, 4490713, 4490849, 4490985, 4491121, 4491258, 4491394, 4491530, 4491666, 4491802, 4491939, 4492075, 4492211, 4492347, 4492484, 4492620, 4492756, 4492892, 4493029, 4493165, 4493301, 4493437, 4493574, 4493710, 4493846, 4493982, 4494119, 4494255, 4494391, 4494527, 4494664, 4494800, 4494936, 4495072, 4495209, 4495345, 4495481, 4495617, 4495754, 4495890, 4496026, 4496163, 4496299, 4496435, 4496571, 4496708, 4496844, 4496980, 4497117, 4497253, 4497389, 4497525, 4497662, 4497798, 4497934, 4498071, 4498207, 4498343, 4498479, 4498616, 4498752, 4498888, 4499025, 4499161, 4499297, 4499434, 4499570, 4499706, 4499843, 4499979, 4500115, 4500252, 4500388, 4500524, 4500660, 4500797, 4500933, 4501069, 4501206, 4501342, 4501478, 4501615, 4501751, 4501887, 4502024, 4502160, 4502296, 4502433, 4502569, 4502706, 4502842, 4502978, 4503115, 4503251, 4503387, 4503524, 4503660, 4503796, 4503933, 4504069, 4504205, 4504342, 4504478, 4504615, 4504751, 4504887, 4505024, 4505160, 4505296, 4505433, 4505569, 4505705, 4505842, 4505978, 4506115, 4506251, 4506387, 4506524, 4506660, 4506797, 4506933, 4507069, 4507206, 4507342, 4507479, 4507615, 4507751, 4507888, 4508024, 4508161, 4508297, 4508433, 4508570, 4508706, 4508843, 4508979, 4509115, 4509252, 4509388, 4509525, 4509661, 4509797, 4509934, 4510070, 4510207, 4510343, 4510480, 4510616, 4510752, 4510889, 4511025, 4511162, 4511298, 4511435, 4511571, 4511708, 4511844, 4511980, 4512117, 4512253, 4512390, 4512526, 4512663, 4512799, 4512936, 4513072, 4513208, 4513345, 4513481, 4513618, 4513754, 4513891, 4514027, 4514164, 4514300, 4514437, 4514573, 4514710, 4514846, 4514983, 4515119, 4515255, 4515392, 4515528, 4515665, 4515801, 4515938, 4516074, 4516211, 4516347, 4516484, 4516620, 4516757, 4516893, 4517030, 4517166, 4517303, 4517439, 4517576, 4517712, 4517849, 4517985, 4518122, 4518258, 4518395, 4518531, 4518668, 4518804, 4518941, 4519077, 4519214, 4519350, 4519487, 4519624, 4519760, 4519897, 4520033, 4520170, 4520306, 4520443, 4520579, 4520716, 4520852, 4520989, 4521125, 4521262, 4521398, 4521535, 4521672, 4521808, 4521945, 4522081, 4522218, 4522354, 4522491, 4522627, 4522764, 4522901, 4523037, 4523174, 4523310, 4523447, 4523583, 4523720, 4523857, 4523993, 4524130, 4524266, 4524403, 4524539, 4524676, 4524813, 4524949, 4525086, 4525222, 4525359, 4525495, 4525632, 4525769, 4525905, 4526042, 4526178, 4526315, 4526452, 4526588, 4526725, 4526861, 4526998, 4527135, 4527271, 4527408, 4527544, 4527681, 4527818, 4527954, 4528091, 4528227, 4528364, 4528501, 4528637, 4528774, 4528911, 4529047, 4529184, 4529320, 4529457, 4529594, 4529730, 4529867, 4530004, 4530140, 4530277, 4530414, 4530550, 4530687, 4530823, 4530960, 4531097, 4531233, 4531370, 4531507, 4531643, 4531780, 4531917, 4532053, 4532190, 4532327, 4532463, 4532600, 4532737, 4532873, 4533010, 4533147, 4533283, 4533420, 4533557, 4533693, 4533830, 4533967, 4534103, 4534240, 4534377, 4534513, 4534650, 4534787, 4534923, 4535060, 4535197, 4535333, 4535470, 4535607, 4535744, 4535880, 4536017, 4536154, 4536290, 4536427, 4536564, 4536700, 4536837, 4536974, 4537111, 4537247, 4537384, 4537521, 4537657, 4537794, 4537931, 4538068, 4538204, 4538341, 4538478, 4538614, 4538751, 4538888, 4539025, 4539161, 4539298, 4539435, 4539572, 4539708, 4539845, 4539982, 4540119, 4540255, 4540392, 4540529, 4540666, 4540802, 4540939, 4541076, 4541213, 4541349, 4541486, 4541623, 4541760, 4541896, 4542033, 4542170, 4542307, 4542443, 4542580, 4542717, 4542854, 4542990, 4543127, 4543264, 4543401, 4543538, 4543674, 4543811, 4543948, 4544085, 4544221, 4544358, 4544495, 4544632, 4544769, 4544905, 4545042, 4545179, 4545316, 4545453, 4545589, 4545726, 4545863, 4546000, 4546137, 4546273, 4546410, 4546547, 4546684, 4546821, 4546957, 4547094, 4547231, 4547368, 4547505, 4547642, 4547778, 4547915, 4548052, 4548189, 4548326, 4548462, 4548599, 4548736, 4548873, 4549010, 4549147, 4549283, 4549420, 4549557, 4549694, 4549831, 4549968, 4550105, 4550241, 4550378, 4550515, 4550652, 4550789, 4550926, 4551063, 4551199, 4551336, 4551473, 4551610, 4551747, 4551884, 4552021, 4552157, 4552294, 4552431, 4552568, 4552705, 4552842, 4552979, 4553116, 4553252, 4553389, 4553526, 4553663, 4553800, 4553937, 4554074, 4554211, 4554348, 4554484, 4554621, 4554758, 4554895, 4555032, 4555169, 4555306, 4555443, 4555580, 4555717, 4555853, 4555990, 4556127, 4556264, 4556401, 4556538, 4556675, 4556812, 4556949, 4557086, 4557223, 4557359, 4557496, 4557633, 4557770, 4557907, 4558044, 4558181, 4558318, 4558455, 4558592, 4558729, 4558866, 4559003, 4559140, 4559277, 4559414, 4559550, 4559687, 4559824, 4559961, 4560098, 4560235, 4560372, 4560509, 4560646, 4560783, 4560920, 4561057, 4561194, 4561331, 4561468, 4561605, 4561742, 4561879, 4562016, 4562153, 4562290, 4562427, 4562564, 4562701, 4562838, 4562975, 4563112, 4563249, 4563386, 4563523, 4563660, 4563797, 4563934, 4564071, 4564208, 4564345, 4564482, 4564619, 4564756, 4564893, 4565030, 4565167, 4565304, 4565441, 4565578, 4565715, 4565852, 4565989, 4566126, 4566263, 4566400, 4566537, 4566674, 4566811, 4566948, 4567085, 4567222, 4567359, 4567496, 4567633, 4567770, 4567907, 4568044, 4568181, 4568318, 4568455, 4568592, 4568729, 4568866, 4569003, 4569140, 4569277, 4569414, 4569551, 4569689, 4569826, 4569963, 4570100, 4570237, 4570374, 4570511, 4570648, 4570785, 4570922, 4571059, 4571196, 4571333, 4571470, 4571607, 4571745, 4571882, 4572019, 4572156, 4572293, 4572430, 4572567, 4572704, 4572841, 4572978, 4573115, 4573252, 4573390, 4573527, 4573664, 4573801, 4573938, 4574075, 4574212, 4574349, 4574486, 4574623, 4574761, 4574898, 4575035, 4575172, 4575309, 4575446, 4575583, 4575720, 4575857, 4575995, 4576132, 4576269, 4576406, 4576543, 4576680, 4576817, 4576954, 4577092, 4577229, 4577366, 4577503, 4577640, 4577777, 4577914, 4578052, 4578189, 4578326, 4578463, 4578600, 4578737, 4578874, 4579012, 4579149, 4579286, 4579423, 4579560, 4579697, 4579835, 4579972, 4580109, 4580246, 4580383, 4580520, 4580658, 4580795, 4580932, 4581069, 4581206, 4581343, 4581481, 4581618, 4581755, 4581892, 4582029, 4582167, 4582304, 4582441, 4582578, 4582715, 4582852, 4582990, 4583127, 4583264, 4583401, 4583538, 4583676, 4583813, 4583950, 4584087, 4584224, 4584362, 4584499, 4584636, 4584773, 4584911, 4585048, 4585185, 4585322, 4585459, 4585597, 4585734, 4585871, 4586008, 4586146, 4586283, 4586420, 4586557, 4586694, 4586832, 4586969, 4587106, 4587243, 4587381, 4587518, 4587655, 4587792, 4587930, 4588067, 4588204, 4588341, 4588479, 4588616, 4588753, 4588890, 4589028, 4589165, 4589302, 4589439, 4589577, 4589714, 4589851, 4589988, 4590126, 4590263, 4590400, 4590538, 4590675, 4590812, 4590949, 4591087, 4591224, 4591361, 4591499, 4591636, 4591773, 4591910, 4592048, 4592185, 4592322, 4592460, 4592597, 4592734, 4592871, 4593009, 4593146, 4593283, 4593421, 4593558, 4593695, 4593833, 4593970, 4594107, 4594245, 4594382, 4594519, 4594656, 4594794, 4594931, 4595068, 4595206, 4595343, 4595480, 4595618, 4595755, 4595892, 4596030, 4596167, 4596304, 4596442, 4596579, 4596716, 4596854, 4596991, 4597128, 4597266, 4597403, 4597540, 4597678, 4597815, 4597953, 4598090, 4598227, 4598365, 4598502, 4598639, 4598777, 4598914, 4599051, 4599189, 4599326, 4599464, 4599601, 4599738, 4599876, 4600013, 4600150, 4600288, 4600425, 4600563, 4600700, 4600837, 4600975, 4601112, 4601249, 4601387, 4601524, 4601662, 4601799, 4601936, 4602074, 4602211, 4602349, 4602486, 4602623, 4602761, 4602898, 4603036, 4603173, 4603310, 4603448, 4603585, 4603723, 4603860, 4603998, 4604135, 4604272, 4604410, 4604547, 4604685, 4604822, 4604959, 4605097, 4605234, 4605372, 4605509, 4605647, 4605784, 4605921, 4606059, 4606196, 4606334, 4606471, 4606609, 4606746, 4606884, 4607021, 4607158, 4607296, 4607433, 4607571, 4607708, 4607846, 4607983, 4608121, 4608258, 4608396, 4608533, 4608671, 4608808, 4608945, 4609083, 4609220, 4609358, 4609495, 4609633, 4609770, 4609908, 4610045, 4610183, 4610320, 4610458, 4610595, 4610733, 4610870, 4611008, 4611145, 4611283, 4611420, 4611558, 4611695, 4611833, 4611970, 4612108, 4612245, 4612383, 4612520, 4612658, 4612795, 4612933, 4613070, 4613208, 4613345, 4613483, 4613620, 4613758, 4613895, 4614033, 4614170, 4614308, 4614445, 4614583, 4614720, 4614858, 4614996, 4615133, 4615271, 4615408, 4615546, 4615683, 4615821, 4615958, 4616096, 4616233, 4616371, 4616509, 4616646, 4616784, 4616921, 4617059, 4617196, 4617334, 4617471, 4617609, 4617747, 4617884, 4618022, 4618159, 4618297, 4618434, 4618572, 4618709, 4618847, 4618985, 4619122, 4619260, 4619397, 4619535, 4619673, 4619810, 4619948, 4620085, 4620223, 4620360, 4620498, 4620636, 4620773, 4620911, 4621048, 4621186, 4621324, 4621461, 4621599, 4621736, 4621874, 4622012, 4622149, 4622287, 4622424, 4622562, 4622700, 4622837, 4622975, 4623113, 4623250, 4623388, 4623525, 4623663, 4623801, 4623938, 4624076, 4624214, 4624351, 4624489, 4624626, 4624764, 4624902, 4625039, 4625177, 4625315, 4625452, 4625590, 4625728, 4625865, 4626003, 4626141, 4626278, 4626416, 4626554, 4626691, 4626829, 4626966, 4627104, 4627242, 4627379, 4627517, 4627655, 4627792, 4627930, 4628068, 4628205, 4628343, 4628481, 4628619, 4628756, 4628894, 4629032, 4629169, 4629307, 4629445, 4629582, 4629720, 4629858, 4629995, 4630133, 4630271, 4630408, 4630546, 4630684, 4630822, 4630959, 4631097, 4631235, 4631372, 4631510, 4631648, 4631786, 4631923, 4632061, 4632199, 4632336, 4632474, 4632612, 4632750, 4632887, 4633025, 4633163, 4633300, 4633438, 4633576, 4633714, 4633851, 4633989, 4634127, 4634265, 4634402, 4634540, 4634678, 4634816, 4634953, 4635091, 4635229, 4635366, 4635504, 4635642, 4635780, 4635917, 4636055, 4636193, 4636331, 4636469, 4636606, 4636744, 4636882, 4637020, 4637157, 4637295, 4637433, 4637571, 4637708, 4637846, 4637984, 4638122, 4638260, 4638397, 4638535, 4638673, 4638811, 4638948, 4639086, 4639224, 4639362, 4639500, 4639637, 4639775, 4639913, 4640051, 4640189, 4640326, 4640464, 4640602, 4640740, 4640878, 4641015, 4641153, 4641291, 4641429, 4641567, 4641704, 4641842, 4641980, 4642118, 4642256, 4642394, 4642531, 4642669, 4642807, 4642945, 4643083, 4643221, 4643358, 4643496, 4643634, 4643772, 4643910, 4644048, 4644185, 4644323, 4644461, 4644599, 4644737, 4644875, 4645013, 4645150, 4645288, 4645426, 4645564, 4645702, 4645840, 4645977, 4646115, 4646253, 4646391, 4646529, 4646667, 4646805, 4646943, 4647080, 4647218, 4647356, 4647494, 4647632, 4647770, 4647908, 4648046, 4648183, 4648321, 4648459, 4648597, 4648735, 4648873, 4649011, 4649149, 4649287, 4649424, 4649562, 4649700, 4649838, 4649976, 4650114, 4650252, 4650390, 4650528, 4650666, 4650804, 4650941, 4651079, 4651217, 4651355, 4651493, 4651631, 4651769, 4651907, 4652045, 4652183, 4652321, 4652459, 4652597, 4652734, 4652872, 4653010, 4653148, 4653286, 4653424, 4653562, 4653700, 4653838, 4653976, 4654114, 4654252, 4654390, 4654528, 4654666, 4654804, 4654942, 4655080, 4655217, 4655355, 4655493, 4655631, 4655769, 4655907, 4656045, 4656183, 4656321, 4656459, 4656597, 4656735, 4656873, 4657011, 4657149, 4657287, 4657425, 4657563, 4657701, 4657839, 4657977, 4658115, 4658253, 4658391, 4658529, 4658667, 4658805, 4658943, 4659081, 4659219, 4659357, 4659495, 4659633, 4659771, 4659909, 4660047, 4660185, 4660323, 4660461, 4660599, 4660737, 4660875, 4661013, 4661151, 4661289, 4661427, 4661565, 4661703, 4661841, 4661979, 4662117, 4662255, 4662393, 4662531, 4662669, 4662807, 4662945, 4663084, 4663222, 4663360, 4663498, 4663636, 4663774, 4663912, 4664050, 4664188, 4664326, 4664464, 4664602, 4664740, 4664878, 4665016, 4665154, 4665292, 4665430, 4665569, 4665707, 4665845, 4665983, 4666121, 4666259, 4666397, 4666535, 4666673, 4666811, 4666949, 4667087, 4667225, 4667364, 4667502, 4667640, 4667778, 4667916, 4668054, 4668192, 4668330, 4668468, 4668606, 4668744, 4668883, 4669021, 4669159, 4669297, 4669435, 4669573, 4669711, 4669849, 4669987, 4670126, 4670264, 4670402, 4670540, 4670678, 4670816, 4670954, 4671092, 4671231, 4671369, 4671507, 4671645, 4671783, 4671921, 4672059, 4672198, 4672336, 4672474, 4672612, 4672750, 4672888, 4673026, 4673165, 4673303, 4673441, 4673579, 4673717, 4673855, 4673993, 4674132, 4674270, 4674408, 4674546, 4674684, 4674822, 4674961, 4675099, 4675237, 4675375, 4675513, 4675651, 4675790, 4675928, 4676066, 4676204, 4676342, 4676481, 4676619, 4676757, 4676895, 4677033, 4677171, 4677310, 4677448, 4677586, 4677724, 4677862, 4678001, 4678139, 4678277, 4678415, 4678553, 4678692, 4678830, 4678968, 4679106, 4679244, 4679383, 4679521, 4679659, 4679797, 4679936, 4680074, 4680212, 4680350, 4680488, 4680627, 4680765, 4680903, 4681041, 4681180, 4681318, 4681456, 4681594, 4681733, 4681871, 4682009, 4682147, 4682286, 4682424, 4682562, 4682700, 4682839, 4682977, 4683115, 4683253, 4683392, 4683530, 4683668, 4683806, 4683945, 4684083, 4684221, 4684359, 4684498, 4684636, 4684774, 4684912, 4685051, 4685189, 4685327, 4685466, 4685604, 4685742, 4685880, 4686019, 4686157, 4686295, 4686434, 4686572, 4686710, 4686848, 4686987, 4687125, 4687263, 4687402, 4687540, 4687678, 4687817, 4687955, 4688093, 4688231, 4688370, 4688508, 4688646, 4688785, 4688923, 4689061, 4689200, 4689338, 4689476, 4689615, 4689753, 4689891, 4690030, 4690168, 4690306, 4690445, 4690583, 4690721, 4690860, 4690998, 4691136, 4691275, 4691413, 4691551, 4691690, 4691828, 4691966, 4692105, 4692243, 4692381, 4692520, 4692658, 4692796, 4692935, 4693073, 4693211, 4693350, 4693488, 4693627, 4693765, 4693903, 4694042, 4694180, 4694318, 4694457, 4694595, 4694734, 4694872, 4695010, 4695149, 4695287, 4695425, 4695564, 4695702, 4695841, 4695979, 4696117, 4696256, 4696394, 4696533, 4696671, 4696809, 4696948, 4697086, 4697225, 4697363, 4697501, 4697640, 4697778, 4697917, 4698055, 4698193, 4698332, 4698470, 4698609, 4698747, 4698886, 4699024, 4699162, 4699301, 4699439, 4699578, 4699716, 4699854, 4699993, 4700131, 4700270, 4700408, 4700547, 4700685, 4700824, 4700962, 4701100, 4701239, 4701377, 4701516, 4701654, 4701793, 4701931, 4702070, 4702208, 4702346, 4702485, 4702623, 4702762, 4702900, 4703039, 4703177, 4703316, 4703454, 4703593, 4703731, 4703870, 4704008, 4704147, 4704285, 4704424, 4704562, 4704700, 4704839, 4704977, 4705116, 4705254, 4705393, 4705531, 4705670, 4705808, 4705947, 4706085, 4706224, 4706362, 4706501, 4706639, 4706778, 4706916, 4707055, 4707193, 4707332, 4707470, 4707609, 4707747, 4707886, 4708024, 4708163, 4708302, 4708440, 4708579, 4708717, 4708856, 4708994, 4709133, 4709271, 4709410, 4709548, 4709687, 4709825, 4709964, 4710102, 4710241, 4710379, 4710518, 4710657, 4710795, 4710934, 4711072, 4711211, 4711349, 4711488, 4711626, 4711765, 4711904, 4712042, 4712181, 4712319, 4712458, 4712596, 4712735, 4712874, 4713012, 4713151, 4713289, 4713428, 4713566, 4713705, 4713844, 4713982, 4714121, 4714259, 4714398, 4714536, 4714675, 4714814, 4714952, 4715091, 4715229, 4715368, 4715507, 4715645, 4715784, 4715922, 4716061, 4716200, 4716338, 4716477, 4716615, 4716754, 4716893, 4717031, 4717170, 4717308, 4717447, 4717586, 4717724, 4717863, 4718002, 4718140, 4718279, 4718417, 4718556, 4718695, 4718833, 4718972, 4719111, 4719249, 4719388, 4719526, 4719665, 4719804, 4719942, 4720081, 4720220, 4720358, 4720497, 4720636, 4720774, 4720913, 4721052, 4721190, 4721329, 4721468, 4721606, 4721745, 4721884, 4722022, 4722161, 4722300, 4722438, 4722577, 4722716, 4722854, 4722993, 4723132, 4723270, 4723409, 4723548, 4723686, 4723825, 4723964, 4724102, 4724241, 4724380, 4724518, 4724657, 4724796, 4724935, 4725073, 4725212, 4725351, 4725489, 4725628, 4725767, 4725905, 4726044, 4726183, 4726322, 4726460, 4726599, 4726738, 4726876, 4727015, 4727154, 4727293, 4727431, 4727570, 4727709, 4727847, 4727986, 4728125, 4728264, 4728402, 4728541, 4728680, 4728819, 4728957, 4729096, 4729235, 4729374, 4729512, 4729651, 4729790, 4729929, 4730067, 4730206, 4730345, 4730484, 4730622, 4730761, 4730900, 4731039, 4731177, 4731316, 4731455, 4731594, 4731732, 4731871, 4732010, 4732149, 4732288, 4732426, 4732565, 4732704, 4732843, 4732981, 4733120, 4733259, 4733398, 4733537, 4733675, 4733814, 4733953, 4734092, 4734231, 4734369, 4734508, 4734647, 4734786, 4734925, 4735063, 4735202, 4735341, 4735480, 4735619, 4735757, 4735896, 4736035, 4736174, 4736313, 4736451, 4736590, 4736729, 4736868, 4737007, 4737146, 4737284, 4737423, 4737562, 4737701, 4737840, 4737979, 4738117, 4738256, 4738395, 4738534, 4738673, 4738812, 4738950, 4739089, 4739228, 4739367, 4739506, 4739645, 4739783, 4739922, 4740061, 4740200, 4740339, 4740478, 4740617, 4740755, 4740894, 4741033, 4741172, 4741311, 4741450, 4741589, 4741728, 4741866, 4742005, 4742144, 4742283, 4742422, 4742561, 4742700, 4742839, 4742977, 4743116, 4743255, 4743394, 4743533, 4743672, 4743811, 4743950, 4744089, 4744228, 4744366, 4744505, 4744644, 4744783, 4744922, 4745061, 4745200, 4745339, 4745478, 4745617, 4745756, 4745894, 4746033, 4746172, 4746311, 4746450, 4746589, 4746728, 4746867, 4747006, 4747145, 4747284, 4747423, 4747562, 4747701, 4747839, 4747978, 4748117, 4748256, 4748395, 4748534, 4748673, 4748812, 4748951, 4749090, 4749229, 4749368, 4749507, 4749646, 4749785, 4749924, 4750063, 4750202, 4750341, 4750480, 4750619, 4750757, 4750896, 4751035, 4751174, 4751313, 4751452, 4751591, 4751730, 4751869, 4752008, 4752147, 4752286, 4752425, 4752564, 4752703, 4752842, 4752981, 4753120, 4753259, 4753398, 4753537, 4753676, 4753815, 4753954, 4754093, 4754232, 4754371, 4754510, 4754649, 4754788, 4754927, 4755066, 4755205, 4755344, 4755483, 4755622, 4755761, 4755900, 4756039, 4756178, 4756317, 4756456, 4756596, 4756735, 4756874, 4757013, 4757152, 4757291, 4757430, 4757569, 4757708, 4757847, 4757986, 4758125, 4758264, 4758403, 4758542, 4758681, 4758820, 4758959, 4759098, 4759237, 4759376, 4759515, 4759655, 4759794, 4759933, 4760072, 4760211, 4760350, 4760489, 4760628, 4760767, 4760906, 4761045, 4761184, 4761323, 4761463, 4761602, 4761741, 4761880, 4762019, 4762158, 4762297, 4762436, 4762575, 4762714, 4762853, 4762993, 4763132, 4763271, 4763410, 4763549, 4763688, 4763827, 4763966, 4764105, 4764244, 4764384, 4764523, 4764662, 4764801, 4764940, 4765079, 4765218, 4765357, 4765497, 4765636, 4765775, 4765914, 4766053, 4766192, 4766331, 4766470, 4766610, 4766749, 4766888, 4767027, 4767166, 4767305, 4767444, 4767584, 4767723, 4767862, 4768001, 4768140, 4768279, 4768418, 4768558, 4768697, 4768836, 4768975, 4769114, 4769253, 4769393, 4769532, 4769671, 4769810, 4769949, 4770088, 4770228, 4770367, 4770506, 4770645, 4770784, 4770924, 4771063, 4771202, 4771341, 4771480, 4771619, 4771759, 4771898, 4772037, 4772176, 4772315, 4772455, 4772594, 4772733, 4772872, 4773011, 4773151, 4773290, 4773429, 4773568, 4773708, 4773847, 4773986, 4774125, 4774264, 4774404, 4774543, 4774682, 4774821, 4774960, 4775100, 4775239, 4775378, 4775517, 4775657, 4775796, 4775935, 4776074, 4776214, 4776353, 4776492, 4776631, 4776771, 4776910, 4777049, 4777188, 4777328, 4777467, 4777606, 4777745, 4777885, 4778024, 4778163, 4778302, 4778442, 4778581, 4778720, 4778859, 4778999, 4779138, 4779277, 4779416, 4779556, 4779695, 4779834, 4779974, 4780113, 4780252, 4780391, 4780531, 4780670, 4780809, 4780949, 4781088, 4781227, 4781366, 4781506, 4781645, 4781784, 4781924, 4782063, 4782202, 4782341, 4782481, 4782620, 4782759, 4782899, 4783038, 4783177, 4783317, 4783456, 4783595, 4783735, 4783874, 4784013, 4784153, 4784292, 4784431, 4784571, 4784710, 4784849, 4784989, 4785128, 4785267, 4785407, 4785546, 4785685, 4785825, 4785964, 4786103, 4786243, 4786382, 4786521, 4786661, 4786800, 4786939, 4787079, 4787218, 4787357, 4787497, 4787636, 4787775, 4787915, 4788054, 4788194, 4788333, 4788472, 4788612, 4788751, 4788890, 4789030, 4789169, 4789309, 4789448, 4789587, 4789727, 4789866, 4790005, 4790145, 4790284, 4790424, 4790563, 4790702, 4790842, 4790981, 4791121, 4791260, 4791399, 4791539, 4791678, 4791818, 4791957, 4792096, 4792236, 4792375, 4792515, 4792654, 4792793, 4792933, 4793072, 4793212, 4793351, 4793491, 4793630, 4793769, 4793909, 4794048, 4794188, 4794327, 4794466, 4794606, 4794745, 4794885, 4795024, 4795164, 4795303, 4795443, 4795582, 4795721, 4795861, 4796000, 4796140, 4796279, 4796419, 4796558, 4796698, 4796837, 4796977, 4797116, 4797255, 4797395, 4797534, 4797674, 4797813, 4797953, 4798092, 4798232, 4798371, 4798511, 4798650, 4798790, 4798929, 4799069, 4799208, 4799348, 4799487, 4799626, 4799766, 4799905, 4800045, 4800184, 4800324, 4800463, 4800603, 4800742, 4800882, 4801021, 4801161, 4801300, 4801440, 4801579, 4801719, 4801858, 4801998, 4802137, 4802277, 4802417, 4802556, 4802696, 4802835, 4802975, 4803114, 4803254, 4803393, 4803533, 4803672, 4803812, 4803951, 4804091, 4804230, 4804370, 4804509, 4804649, 4804788, 4804928, 4805068, 4805207, 4805347, 4805486, 4805626, 4805765, 4805905, 4806044, 4806184, 4806324, 4806463, 4806603, 4806742, 4806882, 4807021, 4807161, 4807300, 4807440, 4807580, 4807719, 4807859, 4807998, 4808138, 4808277, 4808417, 4808557, 4808696, 4808836, 4808975, 4809115, 4809255, 4809394, 4809534, 4809673, 4809813, 4809953, 4810092, 4810232, 4810371, 4810511, 4810651, 4810790, 4810930, 4811069, 4811209, 4811349, 4811488, 4811628, 4811767, 4811907, 4812047, 4812186, 4812326, 4812465, 4812605, 4812745, 4812884, 4813024, 4813164, 4813303, 4813443, 4813583, 4813722, 4813862, 4814001, 4814141, 4814281, 4814420, 4814560, 4814700, 4814839, 4814979, 4815119, 4815258, 4815398, 4815538, 4815677, 4815817, 4815957, 4816096, 4816236, 4816375, 4816515, 4816655, 4816794, 4816934, 4817074, 4817214, 4817353, 4817493, 4817633, 4817772, 4817912, 4818052, 4818191, 4818331, 4818471, 4818610, 4818750, 4818890, 4819029, 4819169, 4819309, 4819448, 4819588, 4819728, 4819868, 4820007, 4820147, 4820287, 4820426, 4820566, 4820706, 4820845, 4820985, 4821125, 4821265, 4821404, 4821544, 4821684, 4821824, 4821963, 4822103, 4822243, 4822382, 4822522, 4822662, 4822802, 4822941, 4823081, 4823221, 4823361, 4823500, 4823640, 4823780, 4823919, 4824059, 4824199, 4824339, 4824478, 4824618, 4824758, 4824898, 4825037, 4825177, 4825317, 4825457, 4825597, 4825736, 4825876, 4826016, 4826156, 4826295, 4826435, 4826575, 4826715, 4826854, 4826994, 4827134, 4827274, 4827414, 4827553, 4827693, 4827833, 4827973, 4828112, 4828252, 4828392, 4828532, 4828672, 4828811, 4828951, 4829091, 4829231, 4829371, 4829510, 4829650, 4829790, 4829930, 4830070, 4830209, 4830349, 4830489, 4830629, 4830769, 4830909, 4831048, 4831188, 4831328, 4831468, 4831608, 4831747, 4831887, 4832027, 4832167, 4832307, 4832447, 4832586, 4832726, 4832866, 4833006, 4833146, 4833286, 4833425, 4833565, 4833705, 4833845, 4833985, 4834125, 4834265, 4834404, 4834544, 4834684, 4834824, 4834964, 4835104, 4835244, 4835383, 4835523, 4835663, 4835803, 4835943, 4836083, 4836223, 4836363, 4836502, 4836642, 4836782, 4836922, 4837062, 4837202, 4837342, 4837482, 4837621, 4837761, 4837901, 4838041, 4838181, 4838321, 4838461, 4838601, 4838741, 4838880, 4839020, 4839160, 4839300, 4839440, 4839580, 4839720, 4839860, 4840000, 4840140, 4840280, 4840420, 4840559, 4840699, 4840839, 4840979, 4841119, 4841259, 4841399, 4841539, 4841679, 4841819, 4841959, 4842099, 4842239, 4842379, 4842518, 4842658, 4842798, 4842938, 4843078, 4843218, 4843358, 4843498, 4843638, 4843778, 4843918, 4844058, 4844198, 4844338, 4844478, 4844618, 4844758, 4844898, 4845038, 4845178, 4845318, 4845458, 4845597, 4845737, 4845877, 4846017, 4846157, 4846297, 4846437, 4846577, 4846717, 4846857, 4846997, 4847137, 4847277, 4847417, 4847557, 4847697, 4847837, 4847977, 4848117, 4848257, 4848397, 4848537, 4848677, 4848817, 4848957, 4849097, 4849237, 4849377, 4849517, 4849657, 4849797, 4849937, 4850077, 4850217, 4850357, 4850497, 4850637, 4850777, 4850918, 4851058, 4851198, 4851338, 4851478, 4851618, 4851758, 4851898, 4852038, 4852178, 4852318, 4852458, 4852598, 4852738, 4852878, 4853018, 4853158, 4853298, 4853438, 4853578, 4853718, 4853858, 4853999, 4854139, 4854279, 4854419, 4854559, 4854699, 4854839, 4854979, 4855119, 4855259, 4855399, 4855539, 4855679, 4855819, 4855960, 4856100, 4856240, 4856380, 4856520, 4856660, 4856800, 4856940, 4857080, 4857220, 4857360, 4857501, 4857641, 4857781, 4857921, 4858061, 4858201, 4858341, 4858481, 4858621, 4858761, 4858902, 4859042, 4859182, 4859322, 4859462, 4859602, 4859742, 4859882, 4860023, 4860163, 4860303, 4860443, 4860583, 4860723, 4860863, 4861003, 4861144, 4861284, 4861424, 4861564, 4861704, 4861844, 4861984, 4862125, 4862265, 4862405, 4862545, 4862685, 4862825, 4862965, 4863106, 4863246, 4863386, 4863526, 4863666, 4863806, 4863947, 4864087, 4864227, 4864367, 4864507, 4864647, 4864788, 4864928, 4865068, 4865208, 4865348, 4865489, 4865629, 4865769, 4865909, 4866049, 4866189, 4866330, 4866470, 4866610, 4866750, 4866890, 4867031, 4867171, 4867311, 4867451, 4867591, 4867732, 4867872, 4868012, 4868152, 4868293, 4868433, 4868573, 4868713, 4868853, 4868994, 4869134, 4869274, 4869414, 4869554, 4869695, 4869835, 4869975, 4870115, 4870256, 4870396, 4870536, 4870676, 4870817, 4870957, 4871097, 4871237, 4871378, 4871518, 4871658, 4871798, 4871939, 4872079, 4872219, 4872359, 4872500, 4872640, 4872780, 4872920, 4873061, 4873201, 4873341, 4873481, 4873622, 4873762, 4873902, 4874042, 4874183, 4874323, 4874463, 4874604, 4874744, 4874884, 4875024, 4875165, 4875305, 4875445, 4875586, 4875726, 4875866, 4876006, 4876147, 4876287, 4876427, 4876568, 4876708, 4876848, 4876989, 4877129, 4877269, 4877409, 4877550, 4877690, 4877830, 4877971, 4878111, 4878251, 4878392, 4878532, 4878672, 4878813, 4878953, 4879093, 4879234, 4879374, 4879514, 4879655, 4879795, 4879935, 4880076, 4880216, 4880356, 4880497, 4880637, 4880777, 4880918, 4881058, 4881198, 4881339, 4881479, 4881619, 4881760, 4881900, 4882040, 4882181, 4882321, 4882462, 4882602, 4882742, 4882883, 4883023, 4883163, 4883304, 4883444, 4883585, 4883725, 4883865, 4884006, 4884146, 4884286, 4884427, 4884567, 4884708, 4884848, 4884988, 4885129, 4885269, 4885410, 4885550, 4885690, 4885831, 4885971, 4886111, 4886252, 4886392, 4886533, 4886673, 4886814, 4886954, 4887094, 4887235, 4887375, 4887516, 4887656, 4887796, 4887937, 4888077, 4888218, 4888358, 4888499, 4888639, 4888779, 4888920, 4889060, 4889201, 4889341, 4889482, 4889622, 4889762, 4889903, 4890043, 4890184, 4890324, 4890465, 4890605, 4890746, 4890886, 4891026, 4891167, 4891307, 4891448, 4891588, 4891729, 4891869, 4892010, 4892150, 4892291, 4892431, 4892572, 4892712, 4892852, 4892993, 4893133, 4893274, 4893414, 4893555, 4893695, 4893836, 4893976, 4894117, 4894257, 4894398, 4894538, 4894679, 4894819, 4894960, 4895100, 4895241, 4895381, 4895522, 4895662, 4895803, 4895943, 4896084, 4896224, 4896365, 4896505, 4896646, 4896786, 4896927, 4897067, 4897208, 4897348, 4897489, 4897629, 4897770, 4897910, 4898051, 4898191, 4898332, 4898473, 4898613, 4898754, 4898894, 4899035, 4899175, 4899316, 4899456, 4899597, 4899737, 4899878, 4900018, 4900159, 4900300, 4900440, 4900581, 4900721, 4900862, 4901002, 4901143, 4901283, 4901424, 4901565, 4901705, 4901846, 4901986, 4902127, 4902267, 4902408, 4902549, 4902689, 4902830, 4902970, 4903111, 4903251, 4903392, 4903533, 4903673, 4903814, 4903954, 4904095, 4904236, 4904376, 4904517, 4904657, 4904798, 4904939, 4905079, 4905220, 4905360, 4905501, 4905642, 4905782, 4905923, 4906063, 4906204, 4906345, 4906485, 4906626, 4906767, 4906907, 4907048, 4907188, 4907329, 4907470, 4907610, 4907751, 4907892, 4908032, 4908173, 4908313, 4908454, 4908595, 4908735, 4908876, 4909017, 4909157, 4909298, 4909439, 4909579, 4909720, 4909861, 4910001, 4910142, 4910282, 4910423, 4910564, 4910704, 4910845, 4910986, 4911126, 4911267, 4911408, 4911548, 4911689, 4911830, 4911970, 4912111, 4912252, 4912392, 4912533, 4912674, 4912815, 4912955, 4913096, 4913237, 4913377, 4913518, 4913659, 4913799, 4913940, 4914081, 4914221, 4914362, 4914503, 4914644, 4914784, 4914925, 4915066, 4915206, 4915347, 4915488, 4915629, 4915769, 4915910, 4916051, 4916191, 4916332, 4916473, 4916614, 4916754, 4916895, 4917036, 4917176, 4917317, 4917458, 4917599, 4917739, 4917880, 4918021, 4918162, 4918302, 4918443, 4918584, 4918725, 4918865, 4919006, 4919147, 4919288, 4919428, 4919569, 4919710, 4919851, 4919991, 4920132, 4920273, 4920414, 4920554, 4920695, 4920836, 4920977, 4921117, 4921258, 4921399, 4921540, 4921681, 4921821, 4921962, 4922103, 4922244, 4922384, 4922525, 4922666, 4922807, 4922948, 4923088, 4923229, 4923370, 4923511, 4923652, 4923792, 4923933, 4924074, 4924215, 4924356, 4924496, 4924637, 4924778, 4924919, 4925060, 4925200, 4925341, 4925482, 4925623, 4925764, 4925905, 4926045, 4926186, 4926327, 4926468, 4926609, 4926750, 4926890, 4927031, 4927172, 4927313, 4927454, 4927595, 4927735, 4927876, 4928017, 4928158, 4928299, 4928440, 4928580, 4928721, 4928862, 4929003, 4929144, 4929285, 4929426, 4929566, 4929707, 4929848, 4929989, 4930130, 4930271, 4930412, 4930552, 4930693, 4930834, 4930975, 4931116, 4931257, 4931398, 4931539, 4931680, 4931820, 4931961, 4932102, 4932243, 4932384, 4932525, 4932666, 4932807, 4932948, 4933088, 4933229, 4933370, 4933511, 4933652, 4933793, 4933934, 4934075, 4934216, 4934357, 4934497, 4934638, 4934779, 4934920, 4935061, 4935202, 4935343, 4935484, 4935625, 4935766, 4935907, 4936048, 4936189, 4936329, 4936470, 4936611, 4936752, 4936893, 4937034, 4937175, 4937316, 4937457, 4937598, 4937739, 4937880, 4938021, 4938162, 4938303, 4938444, 4938585, 4938726, 4938866, 4939007, 4939148, 4939289, 4939430, 4939571, 4939712, 4939853, 4939994, 4940135, 4940276, 4940417, 4940558, 4940699, 4940840, 4940981, 4941122, 4941263, 4941404, 4941545, 4941686, 4941827, 4941968, 4942109, 4942250, 4942391, 4942532, 4942673, 4942814, 4942955, 4943096, 4943237, 4943378, 4943519, 4943660, 4943801, 4943942, 4944083, 4944224, 4944365, 4944506, 4944647, 4944788, 4944929, 4945070, 4945211, 4945352, 4945493, 4945634, 4945775, 4945916, 4946057, 4946198, 4946339, 4946480, 4946622, 4946763, 4946904, 4947045, 4947186, 4947327, 4947468, 4947609, 4947750, 4947891, 4948032, 4948173, 4948314, 4948455, 4948596, 4948737, 4948878, 4949019, 4949160, 4949302, 4949443, 4949584, 4949725, 4949866, 4950007, 4950148, 4950289, 4950430, 4950571, 4950712, 4950853, 4950995, 4951136, 4951277, 4951418, 4951559, 4951700, 4951841, 4951982, 4952123, 4952264, 4952405, 4952547, 4952688, 4952829, 4952970, 4953111, 4953252, 4953393, 4953534, 4953675, 4953817, 4953958, 4954099, 4954240, 4954381, 4954522, 4954663, 4954804, 4954946, 4955087, 4955228, 4955369, 4955510, 4955651, 4955792, 4955933, 4956075, 4956216, 4956357, 4956498, 4956639, 4956780, 4956921, 4957063, 4957204, 4957345, 4957486, 4957627, 4957768, 4957910, 4958051, 4958192, 4958333, 4958474, 4958615, 4958757, 4958898, 4959039, 4959180, 4959321, 4959462, 4959604, 4959745, 4959886, 4960027, 4960168, 4960310, 4960451, 4960592, 4960733, 4960874, 4961015, 4961157, 4961298, 4961439, 4961580, 4961721, 4961863, 4962004, 4962145, 4962286, 4962427, 4962569, 4962710, 4962851, 4962992, 4963134, 4963275, 4963416, 4963557, 4963698, 4963840, 4963981, 4964122, 4964263, 4964405, 4964546, 4964687, 4964828, 4964969, 4965111, 4965252, 4965393, 4965534, 4965676, 4965817, 4965958, 4966099, 4966241, 4966382, 4966523, 4966664, 4966806, 4966947, 4967088, 4967229, 4967371, 4967512, 4967653, 4967794, 4967936, 4968077, 4968218, 4968360, 4968501, 4968642, 4968783, 4968925, 4969066, 4969207, 4969348, 4969490, 4969631, 4969772, 4969914, 4970055, 4970196, 4970337, 4970479, 4970620, 4970761, 4970903, 4971044, 4971185, 4971327, 4971468, 4971609, 4971750, 4971892, 4972033, 4972174, 4972316, 4972457, 4972598, 4972740, 4972881, 4973022, 4973164, 4973305, 4973446, 4973588, 4973729, 4973870, 4974012, 4974153, 4974294, 4974436, 4974577, 4974718, 4974860, 4975001, 4975142, 4975284, 4975425, 4975566, 4975708, 4975849, 4975990, 4976132, 4976273, 4976414, 4976556, 4976697, 4976839, 4976980, 4977121, 4977263, 4977404, 4977545, 4977687, 4977828, 4977969, 4978111, 4978252, 4978394, 4978535, 4978676, 4978818, 4978959, 4979100, 4979242, 4979383, 4979525, 4979666, 4979807, 4979949, 4980090, 4980232, 4980373, 4980514, 4980656, 4980797, 4980939, 4981080, 4981221, 4981363, 4981504, 4981646, 4981787, 4981928, 4982070, 4982211, 4982353, 4982494, 4982636, 4982777, 4982918, 4983060, 4983201, 4983343, 4983484, 4983626, 4983767, 4983908, 4984050, 4984191, 4984333, 4984474, 4984616, 4984757, 4984899, 4985040, 4985181, 4985323, 4985464, 4985606, 4985747, 4985889, 4986030, 4986172, 4986313, 4986455, 4986596, 4986737, 4986879, 4987020, 4987162, 4987303, 4987445, 4987586, 4987728, 4987869, 4988011, 4988152, 4988294, 4988435, 4988577, 4988718, 4988860, 4989001, 4989143, 4989284, 4989426, 4989567, 4989709, 4989850, 4989992, 4990133, 4990275, 4990416, 4990558, 4990699, 4990841, 4990982, 4991124, 4991265, 4991407, 4991548, 4991690, 4991831, 4991973, 4992114, 4992256, 4992397, 4992539, 4992680, 4992822, 4992963, 4993105, 4993246, 4993388, 4993529, 4993671, 4993813, 4993954, 4994096, 4994237, 4994379, 4994520, 4994662, 4994803, 4994945, 4995086, 4995228, 4995370, 4995511, 4995653, 4995794, 4995936, 4996077, 4996219, 4996361, 4996502, 4996644, 4996785, 4996927, 4997068, 4997210, 4997352, 4997493, 4997635, 4997776, 4997918, 4998059, 4998201, 4998343, 4998484, 4998626, 4998767, 4998909, 4999051, 4999192, 4999334, 4999475, 4999617, 4999759, 4999900, 5000042, 5000183, 5000325, 5000467, 5000608, 5000750, 5000891, 5001033, 5001175, 5001316, 5001458, 5001600, 5001741, 5001883, 5002024, 5002166, 5002308, 5002449, 5002591, 5002733, 5002874, 5003016, 5003157, 5003299, 5003441, 5003582, 5003724, 5003866, 5004007, 5004149, 5004291, 5004432, 5004574, 5004716, 5004857, 5004999, 5005141, 5005282, 5005424, 5005566, 5005707, 5005849, 5005991, 5006132, 5006274, 5006416, 5006557, 5006699, 5006841, 5006982, 5007124, 5007266, 5007407, 5007549, 5007691, 5007832, 5007974, 5008116, 5008257, 5008399, 5008541, 5008683, 5008824, 5008966, 5009108, 5009249, 5009391, 5009533, 5009674, 5009816, 5009958, 5010100, 5010241, 5010383, 5010525, 5010666, 5010808, 5010950, 5011092, 5011233, 5011375, 5011517, 5011659, 5011800, 5011942, 5012084, 5012225, 5012367, 5012509, 5012651, 5012792, 5012934, 5013076, 5013218, 5013359, 5013501, 5013643, 5013785, 5013926, 5014068, 5014210, 5014352, 5014493, 5014635, 5014777, 5014919, 5015060, 5015202, 5015344, 5015486, 5015628, 5015769, 5015911, 5016053, 5016195, 5016336, 5016478, 5016620, 5016762, 5016904, 5017045, 5017187, 5017329, 5017471, 5017612, 5017754, 5017896, 5018038, 5018180, 5018321, 5018463, 5018605, 5018747, 5018889, 5019030, 5019172, 5019314, 5019456, 5019598, 5019740, 5019881, 5020023, 5020165, 5020307, 5020449, 5020590, 5020732, 5020874, 5021016, 5021158, 5021300, 5021441, 5021583, 5021725, 5021867, 5022009, 5022151, 5022292, 5022434, 5022576, 5022718, 5022860, 5023002, 5023144, 5023285, 5023427, 5023569, 5023711, 5023853, 5023995, 5024137, 5024278, 5024420, 5024562, 5024704, 5024846, 5024988, 5025130, 5025271, 5025413, 5025555, 5025697, 5025839, 5025981, 5026123, 5026265, 5026406, 5026548, 5026690, 5026832, 5026974, 5027116, 5027258, 5027400, 5027542, 5027684, 5027825, 5027967, 5028109, 5028251, 5028393, 5028535, 5028677, 5028819, 5028961, 5029103, 5029244, 5029386, 5029528, 5029670, 5029812, 5029954, 5030096, 5030238, 5030380, 5030522, 5030664, 5030806, 5030948, 5031090, 5031231, 5031373, 5031515, 5031657, 5031799, 5031941, 5032083, 5032225, 5032367, 5032509, 5032651, 5032793, 5032935, 5033077, 5033219, 5033361, 5033503, 5033645, 5033787, 5033928, 5034070, 5034212, 5034354, 5034496, 5034638, 5034780, 5034922, 5035064, 5035206, 5035348, 5035490, 5035632, 5035774, 5035916, 5036058, 5036200, 5036342, 5036484, 5036626, 5036768, 5036910, 5037052, 5037194, 5037336, 5037478, 5037620, 5037762, 5037904, 5038046, 5038188, 5038330, 5038472, 5038614, 5038756, 5038898, 5039040, 5039182, 5039324, 5039466, 5039608, 5039750, 5039892, 5040034, 5040176, 5040318, 5040460, 5040602, 5040745, 5040887, 5041029, 5041171, 5041313, 5041455, 5041597, 5041739, 5041881, 5042023, 5042165, 5042307, 5042449, 5042591, 5042733, 5042875, 5043017, 5043159, 5043301, 5043443, 5043586, 5043728, 5043870, 5044012, 5044154, 5044296, 5044438, 5044580, 5044722, 5044864, 5045006, 5045148, 5045290, 5045433, 5045575, 5045717, 5045859, 5046001, 5046143, 5046285, 5046427, 5046569, 5046711, 5046853, 5046996, 5047138, 5047280, 5047422, 5047564, 5047706, 5047848, 5047990, 5048132, 5048275, 5048417, 5048559, 5048701, 5048843, 5048985, 5049127, 5049269, 5049412, 5049554, 5049696, 5049838, 5049980, 5050122, 5050264, 5050406, 5050549, 5050691, 5050833, 5050975, 5051117, 5051259, 5051402, 5051544, 5051686, 5051828, 5051970, 5052112, 5052254, 5052397, 5052539, 5052681, 5052823, 5052965, 5053107, 5053250, 5053392, 5053534, 5053676, 5053818, 5053960, 5054103, 5054245, 5054387, 5054529, 5054671, 5054814, 5054956, 5055098, 5055240, 5055382, 5055524, 5055667, 5055809, 5055951, 5056093, 5056235, 5056378, 5056520, 5056662, 5056804, 5056946, 5057089, 5057231, 5057373, 5057515, 5057658, 5057800, 5057942, 5058084, 5058226, 5058369, 5058511, 5058653, 5058795, 5058938, 5059080, 5059222, 5059364, 5059506, 5059649, 5059791, 5059933, 5060075, 5060218, 5060360, 5060502, 5060644, 5060787, 5060929, 5061071, 5061213, 5061356, 5061498, 5061640, 5061782, 5061925, 5062067, 5062209, 5062351, 5062494, 5062636, 5062778, 5062921, 5063063, 5063205, 5063347, 5063490, 5063632, 5063774, 5063916, 5064059, 5064201, 5064343, 5064486, 5064628, 5064770, 5064912, 5065055, 5065197, 5065339, 5065482, 5065624, 5065766, 5065909, 5066051, 5066193, 5066335, 5066478, 5066620, 5066762, 5066905, 5067047, 5067189, 5067332, 5067474, 5067616, 5067759, 5067901, 5068043, 5068186, 5068328, 5068470, 5068613, 5068755, 5068897, 5069040, 5069182, 5069324, 5069467, 5069609, 5069751, 5069894, 5070036, 5070178, 5070321, 5070463, 5070605, 5070748, 5070890, 5071032, 5071175, 5071317, 5071460, 5071602, 5071744, 5071887, 5072029, 5072171, 5072314, 5072456, 5072598, 5072741, 5072883, 5073026, 5073168, 5073310, 5073453, 5073595, 5073738, 5073880, 5074022, 5074165, 5074307, 5074449, 5074592, 5074734, 5074877, 5075019, 5075161, 5075304, 5075446, 5075589, 5075731, 5075873, 5076016, 5076158, 5076301, 5076443, 5076586, 5076728, 5076870, 5077013, 5077155, 5077298, 5077440, 5077582, 5077725, 5077867, 5078010, 5078152, 5078295, 5078437, 5078579, 5078722, 5078864, 5079007, 5079149, 5079292, 5079434, 5079577, 5079719, 5079861, 5080004, 5080146, 5080289, 5080431, 5080574, 5080716, 5080859, 5081001, 5081144, 5081286, 5081429, 5081571, 5081713, 5081856, 5081998, 5082141, 5082283, 5082426, 5082568, 5082711, 5082853, 5082996, 5083138, 5083281, 5083423, 5083566, 5083708, 5083851, 5083993, 5084136, 5084278, 5084421, 5084563, 5084706, 5084848, 5084991, 5085133, 5085276, 5085418, 5085561, 5085703, 5085846, 5085988, 5086131, 5086273, 5086416, 5086558, 5086701, 5086843, 5086986, 5087128, 5087271, 5087413, 5087556, 5087699, 5087841, 5087984, 5088126, 5088269, 5088411, 5088554, 5088696, 5088839, 5088981, 5089124, 5089266, 5089409, 5089552, 5089694, 5089837, 5089979, 5090122, 5090264, 5090407, 5090550, 5090692, 5090835, 5090977, 5091120, 5091262, 5091405, 5091547, 5091690, 5091833, 5091975, 5092118, 5092260, 5092403, 5092546, 5092688, 5092831, 5092973, 5093116, 5093258, 5093401, 5093544, 5093686, 5093829, 5093971, 5094114, 5094257, 5094399, 5094542, 5094684, 5094827, 5094970, 5095112, 5095255, 5095398, 5095540, 5095683, 5095825, 5095968, 5096111, 5096253, 5096396, 5096538, 5096681, 5096824, 5096966, 5097109, 5097252, 5097394, 5097537, 5097680, 5097822, 5097965, 5098107, 5098250, 5098393, 5098535, 5098678, 5098821, 5098963, 5099106, 5099249, 5099391, 5099534, 5099677, 5099819, 5099962, 5100105, 5100247, 5100390, 5100533, 5100675, 5100818, 5100961, 5101103, 5101246, 5101389, 5101531, 5101674, 5101817, 5101959, 5102102, 5102245, 5102387, 5102530, 5102673, 5102816, 5102958, 5103101, 5103244, 5103386, 5103529, 5103672, 5103814, 5103957, 5104100, 5104243, 5104385, 5104528, 5104671, 5104813, 5104956, 5105099, 5105242, 5105384, 5105527, 5105670, 5105812, 5105955, 5106098, 5106241, 5106383, 5106526, 5106669, 5106812, 5106954, 5107097, 5107240, 5107382, 5107525, 5107668, 5107811, 5107953, 5108096, 5108239, 5108382, 5108524, 5108667, 5108810, 5108953, 5109096, 5109238, 5109381, 5109524, 5109667, 5109809, 5109952, 5110095, 5110238, 5110380, 5110523, 5110666, 5110809, 5110952, 5111094, 5111237, 5111380, 5111523, 5111665, 5111808, 5111951, 5112094, 5112237, 5112379, 5112522, 5112665, 5112808, 5112951, 5113093, 5113236, 5113379, 5113522, 5113665, 5113807, 5113950, 5114093, 5114236, 5114379, 5114521, 5114664, 5114807, 5114950, 5115093, 5115236, 5115378, 5115521, 5115664, 5115807, 5115950, 5116093, 5116235, 5116378, 5116521, 5116664, 5116807, 5116950, 5117092, 5117235, 5117378, 5117521, 5117664, 5117807, 5117950, 5118092, 5118235, 5118378, 5118521, 5118664, 5118807, 5118950, 5119092, 5119235, 5119378, 5119521, 5119664, 5119807, 5119950, 5120092, 5120235, 5120378, 5120521, 5120664, 5120807, 5120950, 5121093, 5121236, 5121378, 5121521, 5121664, 5121807, 5121950, 5122093, 5122236, 5122379, 5122522, 5122664, 5122807, 5122950, 5123093, 5123236, 5123379, 5123522, 5123665, 5123808, 5123951, 5124094, 5124237, 5124379, 5124522, 5124665, 5124808, 5124951, 5125094, 5125237, 5125380, 5125523, 5125666, 5125809, 5125952, 5126095, 5126238, 5126380, 5126523, 5126666, 5126809, 5126952, 5127095, 5127238, 5127381, 5127524, 5127667, 5127810, 5127953, 5128096, 5128239, 5128382, 5128525, 5128668, 5128811, 5128954, 5129097, 5129240, 5129383, 5129526, 5129669, 5129812, 5129955, 5130097, 5130240, 5130383, 5130526, 5130669, 5130812, 5130955, 5131098, 5131241, 5131384, 5131527, 5131670, 5131813, 5131956, 5132099, 5132242, 5132385, 5132528, 5132671, 5132814, 5132957, 5133100, 5133243, 5133386, 5133529, 5133673, 5133816, 5133959, 5134102, 5134245, 5134388, 5134531, 5134674, 5134817, 5134960, 5135103, 5135246, 5135389, 5135532, 5135675, 5135818, 5135961, 5136104, 5136247, 5136390, 5136533, 5136676, 5136819, 5136962, 5137105, 5137248, 5137392, 5137535, 5137678, 5137821, 5137964, 5138107, 5138250, 5138393, 5138536, 5138679, 5138822, 5138965, 5139108, 5139251, 5139394, 5139538, 5139681, 5139824, 5139967, 5140110, 5140253, 5140396, 5140539, 5140682, 5140825, 5140968, 5141112, 5141255, 5141398, 5141541, 5141684, 5141827, 5141970, 5142113, 5142256, 5142400, 5142543, 5142686, 5142829, 5142972, 5143115, 5143258, 5143401, 5143544, 5143688, 5143831, 5143974, 5144117, 5144260, 5144403, 5144546, 5144689, 5144833, 5144976, 5145119, 5145262, 5145405, 5145548, 5145691, 5145835, 5145978, 5146121, 5146264, 5146407, 5146550, 5146694, 5146837, 5146980, 5147123, 5147266, 5147409, 5147553, 5147696, 5147839, 5147982, 5148125, 5148268, 5148412, 5148555, 5148698, 5148841, 5148984, 5149127, 5149271, 5149414, 5149557, 5149700, 5149843, 5149987, 5150130, 5150273, 5150416, 5150559, 5150703, 5150846, 5150989, 5151132, 5151275, 5151419, 5151562, 5151705, 5151848, 5151991, 5152135, 5152278, 5152421, 5152564, 5152707, 5152851, 5152994, 5153137, 5153280, 5153424, 5153567, 5153710, 5153853, 5153997, 5154140, 5154283, 5154426, 5154569, 5154713, 5154856, 5154999, 5155142, 5155286, 5155429, 5155572, 5155715, 5155859, 5156002, 5156145, 5156288, 5156432, 5156575, 5156718, 5156862, 5157005, 5157148, 5157291, 5157435, 5157578, 5157721, 5157864, 5158008, 5158151, 5158294, 5158438, 5158581, 5158724, 5158867, 5159011, 5159154, 5159297, 5159441, 5159584, 5159727, 5159870, 5160014, 5160157, 5160300, 5160444, 5160587, 5160730, 5160874, 5161017, 5161160, 5161303, 5161447, 5161590, 5161733, 5161877, 5162020, 5162163, 5162307, 5162450, 5162593, 5162737, 5162880, 5163023, 5163167, 5163310, 5163453, 5163597, 5163740, 5163883, 5164027, 5164170, 5164313, 5164457, 5164600, 5164743, 5164887, 5165030, 5165173, 5165317, 5165460, 5165604, 5165747, 5165890, 5166034, 5166177, 5166320, 5166464, 5166607, 5166750, 5166894, 5167037, 5167181, 5167324, 5167467, 5167611, 5167754, 5167897, 5168041, 5168184, 5168328, 5168471, 5168614, 5168758, 5168901, 5169045, 5169188, 5169331, 5169475, 5169618, 5169762, 5169905, 5170048, 5170192, 5170335, 5170479, 5170622, 5170765, 5170909, 5171052, 5171196, 5171339, 5171482, 5171626, 5171769, 5171913, 5172056, 5172200, 5172343, 5172486, 5172630, 5172773, 5172917, 5173060, 5173204, 5173347, 5173490, 5173634, 5173777, 5173921, 5174064, 5174208, 5174351, 5174495, 5174638, 5174781, 5174925, 5175068, 5175212, 5175355, 5175499, 5175642, 5175786, 5175929, 5176073, 5176216, 5176360, 5176503, 5176647, 5176790, 5176933, 5177077, 5177220, 5177364, 5177507, 5177651, 5177794, 5177938, 5178081, 5178225, 5178368, 5178512, 5178655, 5178799, 5178942, 5179086, 5179229, 5179373, 5179516, 5179660, 5179803, 5179947, 5180090, 5180234, 5180377, 5180521, 5180664, 5180808, 5180951, 5181095, 5181238, 5181382, 5181526, 5181669, 5181813, 5181956, 5182100, 5182243, 5182387, 5182530, 5182674, 5182817, 5182961, 5183104, 5183248, 5183391, 5183535, 5183679, 5183822, 5183966, 5184109, 5184253, 5184396, 5184540, 5184683, 5184827, 5184971, 5185114, 5185258, 5185401, 5185545, 5185688, 5185832, 5185976, 5186119, 5186263, 5186406, 5186550, 5186693, 5186837, 5186981, 5187124, 5187268, 5187411, 5187555, 5187699, 5187842, 5187986, 5188129, 5188273, 5188416, 5188560, 5188704, 5188847, 5188991, 5189135, 5189278, 5189422, 5189565, 5189709, 5189853, 5189996, 5190140, 5190283, 5190427, 5190571, 5190714, 5190858, 5191002, 5191145, 5191289, 5191432, 5191576, 5191720, 5191863, 5192007, 5192151, 5192294, 5192438, 5192581, 5192725, 5192869, 5193012, 5193156, 5193300, 5193443, 5193587, 5193731, 5193874, 5194018, 5194162, 5194305, 5194449, 5194593, 5194736, 5194880, 5195024, 5195167, 5195311, 5195455, 5195598, 5195742, 5195886, 5196029, 5196173, 5196317, 5196460, 5196604, 5196748, 5196891, 5197035, 5197179, 5197323, 5197466, 5197610, 5197754, 5197897, 5198041, 5198185, 5198328, 5198472, 5198616, 5198760, 5198903, 5199047, 5199191, 5199334, 5199478, 5199622, 5199766, 5199909, 5200053, 5200197, 5200340, 5200484, 5200628, 5200772, 5200915, 5201059, 5201203, 5201347, 5201490, 5201634, 5201778, 5201921, 5202065, 5202209, 5202353, 5202496, 5202640, 5202784, 5202928, 5203071, 5203215, 5203359, 5203503, 5203646, 5203790, 5203934, 5204078, 5204222, 5204365, 5204509, 5204653, 5204797, 5204940, 5205084, 5205228, 5205372, 5205515, 5205659, 5205803, 5205947, 5206091, 5206234, 5206378, 5206522, 5206666, 5206810, 5206953, 5207097, 5207241, 5207385, 5207529, 5207672, 5207816, 5207960, 5208104, 5208248, 5208391, 5208535, 5208679, 5208823, 5208967, 5209110, 5209254, 5209398, 5209542, 5209686, 5209830, 5209973, 5210117, 5210261, 5210405, 5210549, 5210693, 5210836, 5210980, 5211124, 5211268, 5211412, 5211556, 5211699, 5211843, 5211987, 5212131, 5212275, 5212419, 5212563, 5212706, 5212850, 5212994, 5213138, 5213282, 5213426, 5213570, 5213713, 5213857, 5214001, 5214145, 5214289, 5214433, 5214577, 5214720, 5214864, 5215008, 5215152, 5215296, 5215440, 5215584, 5215728, 5215872, 5216015, 5216159, 5216303, 5216447, 5216591, 5216735, 5216879, 5217023, 5217167, 5217311, 5217454, 5217598, 5217742, 5217886, 5218030, 5218174, 5218318, 5218462, 5218606, 5218750, 5218894, 5219037, 5219181, 5219325, 5219469, 5219613, 5219757, 5219901, 5220045, 5220189, 5220333, 5220477, 5220621, 5220765, 5220909, 5221053, 5221196, 5221340, 5221484, 5221628, 5221772, 5221916, 5222060, 5222204, 5222348, 5222492, 5222636, 5222780, 5222924, 5223068, 5223212, 5223356, 5223500, 5223644, 5223788, 5223932, 5224076, 5224220, 5224364, 5224508, 5224652, 5224796, 5224940, 5225084, 5225228, 5225372, 5225516, 5225660, 5225804, 5225948, 5226092, 5226235, 5226379, 5226523, 5226668, 5226812, 5226956, 5227100, 5227244, 5227388, 5227532, 5227676, 5227820, 5227964, 5228108, 5228252, 5228396, 5228540, 5228684, 5228828, 5228972, 5229116, 5229260, 5229404, 5229548, 5229692, 5229836, 5229980, 5230124, 5230268, 5230412, 5230556, 5230700, 5230844, 5230988, 5231132, 5231276, 5231420, 5231564, 5231709, 5231853, 5231997, 5232141, 5232285, 5232429, 5232573, 5232717, 5232861, 5233005, 5233149, 5233293, 5233437, 5233581, 5233725, 5233870, 5234014, 5234158, 5234302, 5234446, 5234590, 5234734, 5234878, 5235022, 5235166, 5235310, 5235455, 5235599, 5235743, 5235887, 5236031, 5236175, 5236319, 5236463, 5236607, 5236751, 5236896, 5237040, 5237184, 5237328, 5237472, 5237616, 5237760, 5237904, 5238049, 5238193, 5238337, 5238481, 5238625, 5238769, 5238913, 5239057, 5239202, 5239346, 5239490, 5239634, 5239778, 5239922, 5240066, 5240211, 5240355, 5240499, 5240643, 5240787, 5240931, 5241075, 5241220, 5241364, 5241508, 5241652, 5241796, 5241940, 5242085, 5242229, 5242373, 5242517, 5242661, 5242805, 5242950, 5243094, 5243238, 5243382, 5243526, 5243670, 5243815, 5243959, 5244103, 5244247, 5244391, 5244536, 5244680, 5244824, 5244968, 5245112, 5245257, 5245401, 5245545, 5245689, 5245833, 5245978, 5246122, 5246266, 5246410, 5246554, 5246699, 5246843, 5246987, 5247131, 5247276, 5247420, 5247564, 5247708, 5247852, 5247997, 5248141, 5248285, 5248429, 5248574, 5248718, 5248862, 5249006, 5249151, 5249295, 5249439, 5249583, 5249728, 5249872, 5250016, 5250160, 5250305, 5250449, 5250593, 5250737, 5250882, 5251026, 5251170, 5251314, 5251459, 5251603, 5251747, 5251891, 5252036, 5252180, 5252324, 5252468, 5252613, 5252757, 5252901, 5253046, 5253190, 5253334, 5253478, 5253623, 5253767, 5253911, 5254056, 5254200, 5254344, 5254488, 5254633, 5254777, 5254921, 5255066, 5255210, 5255354, 5255499, 5255643, 5255787, 5255932, 5256076, 5256220, 5256364, 5256509, 5256653, 5256797, 5256942, 5257086, 5257230, 5257375, 5257519, 5257663, 5257808, 5257952, 5258096, 5258241, 5258385, 5258529, 5258674, 5258818, 5258962, 5259107, 5259251, 5259395, 5259540, 5259684, 5259829, 5259973, 5260117, 5260262, 5260406, 5260550, 5260695, 5260839, 5260983, 5261128, 5261272, 5261417, 5261561, 5261705, 5261850, 5261994, 5262138, 5262283, 5262427, 5262572, 5262716, 5262860, 5263005, 5263149, 5263293, 5263438, 5263582, 5263727, 5263871, 5264015, 5264160, 5264304, 5264449, 5264593, 5264737, 5264882, 5265026, 5265171, 5265315, 5265460, 5265604, 5265748, 5265893, 5266037, 5266182, 5266326, 5266470, 5266615, 5266759, 5266904, 5267048, 5267193, 5267337, 5267481, 5267626, 5267770, 5267915, 5268059, 5268204, 5268348, 5268493, 5268637, 5268781, 5268926, 5269070, 5269215, 5269359, 5269504, 5269648, 5269793, 5269937, 5270082, 5270226, 5270370, 5270515, 5270659, 5270804, 5270948, 5271093, 5271237, 5271382, 5271526, 5271671, 5271815, 5271960, 5272104, 5272249, 5272393, 5272538, 5272682, 5272827, 5272971, 5273116, 5273260, 5273405, 5273549, 5273694, 5273838, 5273983, 5274127, 5274272, 5274416, 5274561, 5274705, 5274850, 5274994, 5275139, 5275283, 5275428, 5275572, 5275717, 5275861, 5276006, 5276150, 5276295, 5276439, 5276584, 5276728, 5276873, 5277017, 5277162, 5277307, 5277451, 5277596, 5277740, 5277885, 5278029, 5278174, 5278318, 5278463, 5278607, 5278752, 5278897, 5279041, 5279186, 5279330, 5279475, 5279619, 5279764, 5279908, 5280053, 5280198, 5280342, 5280487, 5280631, 5280776, 5280920, 5281065, 5281210, 5281354, 5281499, 5281643, 5281788, 5281933, 5282077, 5282222, 5282366, 5282511, 5282656, 5282800, 5282945, 5283089, 5283234, 5283379, 5283523, 5283668, 5283812, 5283957, 5284102, 5284246, 5284391, 5284535, 5284680, 5284825, 5284969, 5285114, 5285258, 5285403, 5285548, 5285692, 5285837, 5285982, 5286126, 5286271, 5286416, 5286560, 5286705, 5286849, 5286994, 5287139, 5287283, 5287428, 5287573, 5287717, 5287862, 5288007, 5288151, 5288296, 5288441, 5288585, 5288730, 5288875, 5289019, 5289164, 5289309, 5289453, 5289598, 5289743, 5289887, 5290032, 5290177, 5290321, 5290466, 5290611, 5290755, 5290900, 5291045, 5291189, 5291334, 5291479, 5291623, 5291768, 5291913, 5292057, 5292202, 5292347, 5292492, 5292636, 5292781, 5292926, 5293070, 5293215, 5293360, 5293504, 5293649, 5293794, 5293939, 5294083, 5294228, 5294373, 5294517, 5294662, 5294807, 5294952, 5295096, 5295241, 5295386, 5295531, 5295675, 5295820, 5295965, 5296109, 5296254, 5296399, 5296544, 5296688, 5296833, 5296978, 5297123, 5297267, 5297412, 5297557, 5297702, 5297846, 5297991, 5298136, 5298281, 5298425, 5298570, 5298715, 5298860, 5299005, 5299149, 5299294, 5299439, 5299584, 5299728, 5299873, 5300018, 5300163, 5300308, 5300452, 5300597, 5300742, 5300887, 5301031, 5301176, 5301321, 5301466, 5301611, 5301755, 5301900, 5302045, 5302190, 5302335, 5302479, 5302624, 5302769, 5302914, 5303059, 5303203, 5303348, 5303493, 5303638, 5303783, 5303928, 5304072, 5304217, 5304362, 5304507, 5304652, 5304797, 5304941, 5305086, 5305231, 5305376, 5305521, 5305666, 5305810, 5305955, 5306100, 5306245, 5306390, 5306535, 5306679, 5306824, 5306969, 5307114, 5307259, 5307404, 5307549, 5307693, 5307838, 5307983, 5308128, 5308273, 5308418, 5308563, 5308707, 5308852, 5308997, 5309142, 5309287, 5309432, 5309577, 5309722, 5309866, 5310011, 5310156, 5310301, 5310446, 5310591, 5310736, 5310881, 5311026, 5311170, 5311315, 5311460, 5311605, 5311750, 5311895, 5312040, 5312185, 5312330, 5312475, 5312620, 5312764, 5312909, 5313054, 5313199, 5313344, 5313489, 5313634, 5313779, 5313924, 5314069, 5314214, 5314359, 5314504, 5314648, 5314793, 5314938, 5315083, 5315228, 5315373, 5315518, 5315663, 5315808, 5315953, 5316098, 5316243, 5316388, 5316533, 5316678, 5316823, 5316968, 5317113, 5317258, 5317402, 5317547, 5317692, 5317837, 5317982, 5318127, 5318272, 5318417, 5318562, 5318707, 5318852, 5318997, 5319142, 5319287, 5319432, 5319577, 5319722, 5319867, 5320012, 5320157, 5320302, 5320447, 5320592, 5320737, 5320882, 5321027, 5321172, 5321317, 5321462, 5321607, 5321752, 5321897, 5322042, 5322187, 5322332, 5322477, 5322622, 5322767, 5322912, 5323057, 5323202, 5323347, 5323492, 5323637, 5323782, 5323927, 5324072, 5324217, 5324362, 5324507, 5324653, 5324798, 5324943, 5325088, 5325233, 5325378, 5325523, 5325668, 5325813, 5325958, 5326103, 5326248, 5326393, 5326538, 5326683, 5326828, 5326973, 5327118, 5327263, 5327409, 5327554, 5327699, 5327844, 5327989, 5328134, 5328279, 5328424, 5328569, 5328714, 5328859, 5329004, 5329149, 5329295, 5329440, 5329585, 5329730, 5329875, 5330020, 5330165, 5330310, 5330455, 5330600, 5330746, 5330891, 5331036, 5331181, 5331326, 5331471, 5331616, 5331761, 5331906, 5332052, 5332197, 5332342, 5332487, 5332632, 5332777, 5332922, 5333067, 5333213, 5333358, 5333503, 5333648, 5333793, 5333938, 5334083, 5334228, 5334374, 5334519, 5334664, 5334809, 5334954, 5335099, 5335245, 5335390, 5335535, 5335680, 5335825, 5335970, 5336115, 5336261, 5336406, 5336551, 5336696, 5336841, 5336986, 5337132, 5337277, 5337422, 5337567, 5337712, 5337857, 5338003, 5338148, 5338293, 5338438, 5338583, 5338729, 5338874, 5339019, 5339164, 5339309, 5339455, 5339600, 5339745, 5339890, 5340035, 5340181, 5340326, 5340471, 5340616, 5340761, 5340907, 5341052, 5341197, 5341342, 5341487, 5341633, 5341778, 5341923, 5342068, 5342214, 5342359, 5342504, 5342649, 5342794, 5342940, 5343085, 5343230, 5343375, 5343521, 5343666, 5343811, 5343956, 5344102, 5344247, 5344392, 5344537, 5344683, 5344828, 5344973, 5345118, 5345264, 5345409, 5345554, 5345699, 5345845, 5345990, 5346135, 5346280, 5346426, 5346571, 5346716, 5346862, 5347007, 5347152, 5347297, 5347443, 5347588, 5347733, 5347878, 5348024, 5348169, 5348314, 5348460, 5348605, 5348750, 5348896, 5349041, 5349186, 5349331, 5349477, 5349622, 5349767, 5349913, 5350058, 5350203, 5350349, 5350494, 5350639, 5350785, 5350930, 5351075, 5351220, 5351366, 5351511, 5351656, 5351802, 5351947, 5352092, 5352238, 5352383, 5352528, 5352674, 5352819, 5352964, 5353110, 5353255, 5353400, 5353546, 5353691, 5353836, 5353982, 5354127, 5354273, 5354418, 5354563, 5354709, 5354854, 5354999, 5355145, 5355290, 5355435, 5355581, 5355726, 5355872, 5356017, 5356162, 5356308, 5356453, 5356598, 5356744, 5356889, 5357035, 5357180, 5357325, 5357471, 5357616, 5357761, 5357907, 5358052, 5358198, 5358343, 5358488, 5358634, 5358779, 5358925, 5359070, 5359215, 5359361, 5359506, 5359652, 5359797, 5359942, 5360088, 5360233, 5360379, 5360524, 5360670, 5360815, 5360960, 5361106, 5361251, 5361397, 5361542, 5361688, 5361833, 5361978, 5362124, 5362269, 5362415, 5362560, 5362706, 5362851, 5362996, 5363142, 5363287, 5363433, 5363578, 5363724, 5363869, 5364015, 5364160, 5364306, 5364451, 5364596, 5364742, 5364887, 5365033, 5365178, 5365324, 5365469, 5365615, 5365760, 5365906, 5366051, 5366197, 5366342, 5366488, 5366633, 5366779, 5366924, 5367070, 5367215, 5367361, 5367506, 5367651, 5367797, 5367942, 5368088, 5368233, 5368379, 5368524, 5368670, 5368815, 5368961, 5369107, 5369252, 5369398, 5369543, 5369689, 5369834, 5369980, 5370125, 5370271, 5370416, 5370562, 5370707, 5370853, 5370998, 5371144, 5371289, 5371435, 5371580, 5371726, 5371871, 5372017, 5372163, 5372308, 5372454, 5372599, 5372745, 5372890, 5373036, 5373181, 5373327, 5373472, 5373618, 5373764, 5373909, 5374055, 5374200, 5374346, 5374491, 5374637, 5374783, 5374928, 5375074, 5375219, 5375365, 5375510, 5375656, 5375802, 5375947, 5376093, 5376238, 5376384, 5376530, 5376675, 5376821, 5376966, 5377112, 5377257, 5377403, 5377549, 5377694, 5377840, 5377985, 5378131, 5378277, 5378422, 5378568, 5378714, 5378859, 5379005, 5379150, 5379296, 5379442, 5379587, 5379733, 5379878, 5380024, 5380170, 5380315, 5380461, 5380607, 5380752, 5380898, 5381043, 5381189, 5381335, 5381480, 5381626, 5381772, 5381917, 5382063, 5382209, 5382354, 5382500, 5382646, 5382791, 5382937, 5383083, 5383228, 5383374, 5383520, 5383665, 5383811, 5383957, 5384102, 5384248, 5384394, 5384539, 5384685, 5384831, 5384976, 5385122, 5385268, 5385413, 5385559, 5385705, 5385850, 5385996, 5386142, 5386287, 5386433, 5386579, 5386724, 5386870, 5387016, 5387162, 5387307, 5387453, 5387599, 5387744, 5387890, 5388036, 5388181, 5388327, 5388473, 5388619, 5388764, 5388910, 5389056, 5389202, 5389347, 5389493, 5389639, 5389784, 5389930, 5390076, 5390222, 5390367, 5390513, 5390659, 5390805, 5390950, 5391096, 5391242, 5391388, 5391533, 5391679, 5391825, 5391971, 5392116, 5392262, 5392408, 5392554, 5392699, 5392845, 5392991, 5393137, 5393282, 5393428, 5393574, 5393720, 5393865, 5394011, 5394157, 5394303, 5394449, 5394594, 5394740, 5394886, 5395032, 5395177, 5395323, 5395469, 5395615, 5395761, 5395906, 5396052, 5396198, 5396344, 5396490, 5396635, 5396781, 5396927, 5397073, 5397219, 5397364, 5397510, 5397656, 5397802, 5397948, 5398093, 5398239, 5398385, 5398531, 5398677, 5398823, 5398968, 5399114, 5399260, 5399406, 5399552, 5399698, 5399843, 5399989, 5400135, 5400281, 5400427, 5400573, 5400718, 5400864, 5401010, 5401156, 5401302, 5401448, 5401593, 5401739, 5401885, 5402031, 5402177, 5402323, 5402469, 5402614, 5402760, 5402906, 5403052, 5403198, 5403344, 5403490, 5403636, 5403781, 5403927, 5404073, 5404219, 5404365, 5404511, 5404657, 5404803, 5404948, 5405094, 5405240, 5405386, 5405532, 5405678, 5405824, 5405970, 5406116, 5406262, 5406407, 5406553, 5406699, 5406845, 5406991, 5407137, 5407283, 5407429, 5407575, 5407721, 5407867, 5408012, 5408158, 5408304, 5408450, 5408596, 5408742, 5408888, 5409034, 5409180, 5409326, 5409472, 5409618, 5409764, 5409910, 5410056, 5410201, 5410347, 5410493, 5410639, 5410785, 5410931, 5411077, 5411223, 5411369, 5411515, 5411661, 5411807, 5411953, 5412099, 5412245, 5412391, 5412537, 5412683, 5412829, 5412975, 5413121, 5413267, 5413413, 5413559, 5413705, 5413851, 5413997, 5414143, 5414289, 5414435, 5414581, 5414727, 5414872, 5415018, 5415164, 5415310, 5415456, 5415602, 5415748, 5415894, 5416040, 5416187, 5416333, 5416479, 5416625, 5416771, 5416917, 5417063, 5417209, 5417355, 5417501, 5417647, 5417793, 5417939, 5418085, 5418231, 5418377, 5418523, 5418669, 5418815, 5418961, 5419107, 5419253, 5419399, 5419545, 5419691, 5419837, 5419983, 5420129, 5420275, 5420421, 5420567, 5420713, 5420860, 5421006, 5421152, 5421298, 5421444, 5421590, 5421736, 5421882, 5422028, 5422174, 5422320, 5422466, 5422612, 5422758, 5422904, 5423051, 5423197, 5423343, 5423489, 5423635, 5423781, 5423927, 5424073, 5424219, 5424365, 5424511, 5424658, 5424804, 5424950, 5425096, 5425242, 5425388, 5425534, 5425680, 5425826, 5425972, 5426119, 5426265, 5426411, 5426557, 5426703, 5426849, 5426995, 5427141, 5427288, 5427434, 5427580, 5427726, 5427872, 5428018, 5428164, 5428310, 5428457, 5428603, 5428749, 5428895, 5429041, 5429187, 5429333, 5429480, 5429626, 5429772, 5429918, 5430064, 5430210, 5430357, 5430503, 5430649, 5430795, 5430941, 5431087, 5431233, 5431380, 5431526, 5431672, 5431818, 5431964, 5432111, 5432257, 5432403, 5432549, 5432695, 5432841, 5432988, 5433134, 5433280, 5433426, 5433572, 5433719, 5433865, 5434011, 5434157, 5434303, 5434450, 5434596, 5434742, 5434888, 5435034, 5435181, 5435327, 5435473, 5435619, 5435765, 5435912, 5436058, 5436204, 5436350, 5436496, 5436643, 5436789, 5436935, 5437081, 5437228, 5437374, 5437520, 5437666, 5437813, 5437959, 5438105, 5438251, 5438398, 5438544, 5438690, 5438836, 5438982, 5439129, 5439275, 5439421, 5439567, 5439714, 5439860, 5440006, 5440153, 5440299, 5440445, 5440591, 5440738, 5440884, 5441030, 5441176, 5441323, 5441469, 5441615, 5441761, 5441908, 5442054, 5442200, 5442347, 5442493, 5442639, 5442785, 5442932, 5443078, 5443224, 5443371, 5443517, 5443663, 5443810, 5443956, 5444102, 5444248, 5444395, 5444541, 5444687, 5444834, 5444980, 5445126, 5445273, 5445419, 5445565, 5445712, 5445858, 5446004, 5446151, 5446297, 5446443, 5446590, 5446736, 5446882, 5447029, 5447175, 5447321, 5447468, 5447614, 5447760, 5447907, 5448053, 5448199, 5448346, 5448492, 5448638, 5448785, 5448931, 5449077, 5449224, 5449370, 5449516, 5449663, 5449809, 5449955, 5450102, 5450248, 5450395, 5450541, 5450687, 5450834, 5450980, 5451126, 5451273, 5451419, 5451566, 5451712, 5451858, 5452005, 5452151, 5452298, 5452444, 5452590, 5452737, 5452883, 5453029, 5453176, 5453322, 5453469, 5453615, 5453762, 5453908, 5454054, 5454201, 5454347, 5454494, 5454640, 5454786, 5454933, 5455079, 5455226, 5455372, 5455518, 5455665, 5455811, 5455958, 5456104, 5456251, 5456397, 5456543, 5456690, 5456836, 5456983, 5457129, 5457276, 5457422, 5457569, 5457715, 5457861, 5458008, 5458154, 5458301, 5458447, 5458594, 5458740, 5458887, 5459033, 5459180, 5459326, 5459472, 5459619, 5459765, 5459912, 5460058, 5460205, 5460351, 5460498, 5460644, 5460791, 5460937, 5461084, 5461230, 5461377, 5461523, 5461670, 5461816, 5461963, 5462109, 5462256, 5462402, 5462549, 5462695, 5462842, 5462988, 5463135, 5463281, 5463428, 5463574, 5463721, 5463867, 5464014, 5464160, 5464307, 5464453, 5464600, 5464746, 5464893, 5465039, 5465186, 5465332, 5465479, 5465625, 5465772, 5465918, 5466065, 5466212, 5466358, 5466505, 5466651, 5466798, 5466944, 5467091, 5467237, 5467384, 5467530, 5467677, 5467824, 5467970, 5468117, 5468263, 5468410, 5468556, 5468703, 5468849, 5468996, 5469143, 5469289, 5469436, 5469582, 5469729, 5469875, 5470022, 5470169, 5470315, 5470462, 5470608, 5470755, 5470901, 5471048, 5471195, 5471341, 5471488, 5471634, 5471781, 5471928, 5472074, 5472221, 5472367, 5472514, 5472661, 5472807, 5472954, 5473100, 5473247, 5473394, 5473540, 5473687, 5473834, 5473980, 5474127, 5474273, 5474420, 5474567, 5474713, 5474860, 5475007, 5475153, 5475300, 5475446, 5475593, 5475740, 5475886, 5476033, 5476180, 5476326, 5476473, 5476620, 5476766, 5476913, 5477059, 5477206, 5477353, 5477499, 5477646, 5477793, 5477939, 5478086, 5478233, 5478379, 5478526, 5478673, 5478819, 5478966, 5479113, 5479259, 5479406, 5479553, 5479699, 5479846, 5479993, 5480140, 5480286, 5480433, 5480580, 5480726, 5480873, 5481020, 5481166, 5481313, 5481460, 5481606, 5481753, 5481900, 5482047, 5482193, 5482340, 5482487, 5482633, 5482780, 5482927, 5483073, 5483220, 5483367, 5483514, 5483660, 5483807, 5483954, 5484101, 5484247, 5484394, 5484541, 5484687, 5484834, 5484981, 5485128, 5485274, 5485421, 5485568, 5485715, 5485861, 5486008, 5486155, 5486302, 5486448, 5486595, 5486742, 5486889, 5487035, 5487182, 5487329, 5487476, 5487622, 5487769, 5487916, 5488063, 5488209, 5488356, 5488503, 5488650, 5488797, 5488943, 5489090, 5489237, 5489384, 5489530, 5489677, 5489824, 5489971, 5490118, 5490264, 5490411, 5490558, 5490705, 5490852, 5490998, 5491145, 5491292, 5491439, 5491586, 5491732, 5491879, 5492026, 5492173, 5492320, 5492466, 5492613, 5492760, 5492907, 5493054, 5493201, 5493347, 5493494, 5493641, 5493788, 5493935, 5494081, 5494228, 5494375, 5494522, 5494669, 5494816, 5494963, 5495109, 5495256, 5495403, 5495550, 5495697, 5495844, 5495990, 5496137, 5496284, 5496431, 5496578, 5496725, 5496872, 5497018, 5497165, 5497312, 5497459, 5497606, 5497753, 5497900, 5498047, 5498193, 5498340, 5498487, 5498634, 5498781, 5498928, 5499075, 5499222, 5499368, 5499515, 5499662, 5499809, 5499956, 5500103, 5500250, 5500397, 5500544, 5500690, 5500837, 5500984, 5501131, 5501278, 5501425, 5501572, 5501719, 5501866, 5502013, 5502160, 5502306, 5502453, 5502600, 5502747, 5502894, 5503041, 5503188, 5503335, 5503482, 5503629, 5503776, 5503923, 5504070, 5504217, 5504364, 5504510, 5504657, 5504804, 5504951, 5505098, 5505245, 5505392, 5505539, 5505686, 5505833, 5505980, 5506127, 5506274, 5506421, 5506568, 5506715, 5506862, 5507009, 5507156, 5507303, 5507450, 5507597, 5507744, 5507891, 5508037, 5508184, 5508331, 5508478, 5508625, 5508772, 5508919, 5509066, 5509213, 5509360, 5509507, 5509654, 5509801, 5509948, 5510095, 5510242, 5510389, 5510536, 5510683, 5510830, 5510977, 5511124, 5511271, 5511418, 5511565, 5511712, 5511859, 5512006, 5512154, 5512301, 5512448, 5512595, 5512742, 5512889, 5513036, 5513183, 5513330, 5513477, 5513624, 5513771, 5513918, 5514065, 5514212, 5514359, 5514506, 5514653, 5514800, 5514947, 5515094, 5515241, 5515388, 5515535, 5515683, 5515830, 5515977, 5516124, 5516271, 5516418, 5516565, 5516712, 5516859, 5517006, 5517153, 5517300, 5517447, 5517594, 5517741, 5517889, 5518036, 5518183, 5518330, 5518477, 5518624, 5518771, 5518918, 5519065, 5519212, 5519359, 5519507, 5519654, 5519801, 5519948, 5520095, 5520242, 5520389, 5520536, 5520683, 5520831, 5520978, 5521125, 5521272, 5521419, 5521566, 5521713, 5521860, 5522008, 5522155, 5522302, 5522449, 5522596, 5522743, 5522890, 5523037, 5523185, 5523332, 5523479, 5523626, 5523773, 5523920, 5524067, 5524215, 5524362, 5524509, 5524656, 5524803, 5524950, 5525098, 5525245, 5525392, 5525539, 5525686, 5525833, 5525981, 5526128, 5526275, 5526422, 5526569, 5526716, 5526864, 5527011, 5527158, 5527305, 5527452, 5527599, 5527747, 5527894, 5528041, 5528188, 5528335, 5528483, 5528630, 5528777, 5528924, 5529071, 5529219, 5529366, 5529513, 5529660, 5529807, 5529955, 5530102, 5530249, 5530396, 5530543, 5530691, 5530838, 5530985, 5531132, 5531280, 5531427, 5531574, 5531721, 5531869, 5532016, 5532163, 5532310, 5532457, 5532605, 5532752, 5532899, 5533046, 5533194, 5533341, 5533488, 5533635, 5533783, 5533930, 5534077, 5534224, 5534372, 5534519, 5534666, 5534813, 5534961, 5535108, 5535255, 5535403, 5535550, 5535697, 5535844, 5535992, 5536139, 5536286, 5536433, 5536581, 5536728, 5536875, 5537023, 5537170, 5537317, 5537464, 5537612, 5537759, 5537906, 5538054, 5538201, 5538348, 5538495, 5538643, 5538790, 5538937, 5539085, 5539232, 5539379, 5539527, 5539674, 5539821, 5539969, 5540116, 5540263, 5540411, 5540558, 5540705, 5540853, 5541000, 5541147, 5541294, 5541442, 5541589, 5541736, 5541884, 5542031, 5542179, 5542326, 5542473, 5542621, 5542768, 5542915, 5543063, 5543210, 5543357, 5543505, 5543652, 5543799, 5543947, 5544094, 5544241, 5544389, 5544536, 5544684, 5544831, 5544978, 5545126, 5545273, 5545420, 5545568, 5545715, 5545862, 5546010, 5546157, 5546305, 5546452, 5546599, 5546747, 5546894, 5547042, 5547189, 5547336, 5547484, 5547631, 5547779, 5547926, 5548073, 5548221, 5548368, 5548516, 5548663, 5548810, 5548958, 5549105, 5549253, 5549400, 5549547, 5549695, 5549842, 5549990, 5550137, 5550285, 5550432, 5550579, 5550727, 5550874, 5551022, 5551169, 5551317, 5551464, 5551611, 5551759, 5551906, 5552054, 5552201, 5552349, 5552496, 5552644, 5552791, 5552938, 5553086, 5553233, 5553381, 5553528, 5553676, 5553823, 5553971, 5554118, 5554266, 5554413, 5554561, 5554708, 5554856, 5555003, 5555150, 5555298, 5555445, 5555593, 5555740, 5555888, 5556035, 5556183, 5556330, 5556478, 5556625, 5556773, 5556920, 5557068, 5557215, 5557363, 5557510, 5557658, 5557805, 5557953, 5558100, 5558248, 5558395, 5558543, 5558690, 5558838, 5558985, 5559133, 5559280, 5559428, 5559576, 5559723, 5559871, 5560018, 5560166, 5560313, 5560461, 5560608, 5560756, 5560903, 5561051, 5561198, 5561346, 5561493, 5561641, 5561789, 5561936, 5562084, 5562231, 5562379, 5562526, 5562674, 5562821, 5562969, 5563117, 5563264, 5563412, 5563559, 5563707, 5563854, 5564002, 5564150, 5564297, 5564445, 5564592, 5564740, 5564887, 5565035, 5565183, 5565330, 5565478, 5565625, 5565773, 5565920, 5566068, 5566216, 5566363, 5566511, 5566658, 5566806, 5566954, 5567101, 5567249, 5567396, 5567544, 5567692, 5567839, 5567987, 5568135, 5568282, 5568430, 5568577, 5568725, 5568873, 5569020, 5569168, 5569315, 5569463, 5569611, 5569758, 5569906, 5570054, 5570201, 5570349, 5570497, 5570644, 5570792, 5570939, 5571087, 5571235, 5571382, 5571530, 5571678, 5571825, 5571973, 5572121, 5572268, 5572416, 5572564, 5572711, 5572859, 5573007, 5573154, 5573302, 5573450, 5573597, 5573745, 5573893, 5574040, 5574188, 5574336, 5574483, 5574631, 5574779, 5574926, 5575074, 5575222, 5575370, 5575517, 5575665, 5575813, 5575960, 5576108, 5576256, 5576403, 5576551, 5576699, 5576847, 5576994, 5577142, 5577290, 5577437, 5577585, 5577733, 5577880, 5578028, 5578176, 5578324, 5578471, 5578619, 5578767, 5578915, 5579062, 5579210, 5579358, 5579505, 5579653, 5579801, 5579949, 5580096, 5580244, 5580392, 5580540, 5580687, 5580835, 5580983, 5581131, 5581278, 5581426, 5581574, 5581722, 5581869, 5582017, 5582165, 5582313, 5582461, 5582608, 5582756, 5582904, 5583052, 5583199, 5583347, 5583495, 5583643, 5583790, 5583938, 5584086, 5584234, 5584382, 5584529, 5584677, 5584825, 5584973, 5585121, 5585268, 5585416, 5585564, 5585712, 5585860, 5586007, 5586155, 5586303, 5586451, 5586599, 5586746, 5586894, 5587042, 5587190, 5587338, 5587485, 5587633, 5587781, 5587929, 5588077, 5588225, 5588372, 5588520, 5588668, 5588816, 5588964, 5589112, 5589259, 5589407, 5589555, 5589703, 5589851, 5589999, 5590146, 5590294, 5590442, 5590590, 5590738, 5590886, 5591034, 5591181, 5591329, 5591477, 5591625, 5591773, 5591921, 5592069, 5592216, 5592364, 5592512, 5592660, 5592808, 5592956, 5593104, 5593252, 5593399, 5593547, 5593695, 5593843, 5593991, 5594139, 5594287, 5594435, 5594583, 5594730, 5594878, 5595026, 5595174, 5595322, 5595470, 5595618, 5595766, 5595914, 5596062, 5596210, 5596357, 5596505, 5596653, 5596801, 5596949, 5597097, 5597245, 5597393, 5597541, 5597689, 5597837, 5597985, 5598133, 5598280, 5598428, 5598576, 5598724, 5598872, 5599020, 5599168, 5599316, 5599464, 5599612, 5599760, 5599908, 5600056, 5600204, 5600352, 5600500, 5600648, 5600796, 5600943, 5601091, 5601239, 5601387, 5601535, 5601683, 5601831, 5601979, 5602127, 5602275, 5602423, 5602571, 5602719, 5602867, 5603015, 5603163, 5603311, 5603459, 5603607, 5603755, 5603903, 5604051, 5604199, 5604347, 5604495, 5604643, 5604791, 5604939, 5605087, 5605235, 5605383, 5605531, 5605679, 5605827, 5605975, 5606123, 5606271, 5606419, 5606567, 5606715, 5606863, 5607011, 5607159, 5607307, 5607455, 5607603, 5607751, 5607899, 5608047, 5608195, 5608344, 5608492, 5608640, 5608788, 5608936, 5609084, 5609232, 5609380, 5609528, 5609676, 5609824, 5609972, 5610120, 5610268, 5610416, 5610564, 5610712, 5610860, 5611009, 5611157, 5611305, 5611453, 5611601, 5611749, 5611897, 5612045, 5612193, 5612341, 5612489, 5612637, 5612785, 5612934, 5613082, 5613230, 5613378, 5613526, 5613674, 5613822, 5613970, 5614118, 5614266, 5614414, 5614563, 5614711, 5614859, 5615007, 5615155, 5615303, 5615451, 5615599, 5615747, 5615896, 5616044, 5616192, 5616340, 5616488, 5616636, 5616784, 5616932, 5617081, 5617229, 5617377, 5617525, 5617673, 5617821, 5617969, 5618118, 5618266, 5618414, 5618562, 5618710, 5618858, 5619006, 5619155, 5619303, 5619451, 5619599, 5619747, 5619895, 5620044, 5620192, 5620340, 5620488, 5620636, 5620784, 5620933, 5621081, 5621229, 5621377, 5621525, 5621673, 5621822, 5621970, 5622118, 5622266, 5622414, 5622563, 5622711, 5622859, 5623007, 5623155, 5623304, 5623452, 5623600, 5623748, 5623896, 5624045, 5624193, 5624341, 5624489, 5624637, 5624786, 5624934, 5625082, 5625230, 5625378, 5625527, 5625675, 5625823, 5625971, 5626120, 5626268, 5626416, 5626564, 5626713, 5626861, 5627009, 5627157, 5627305, 5627454, 5627602, 5627750, 5627898, 5628047, 5628195, 5628343, 5628491, 5628640, 5628788, 5628936, 5629084, 5629233, 5629381, 5629529, 5629678, 5629826, 5629974, 5630122, 5630271, 5630419, 5630567, 5630715, 5630864, 5631012, 5631160, 5631309, 5631457, 5631605, 5631753, 5631902, 5632050, 5632198, 5632347, 5632495, 5632643, 5632791, 5632940, 5633088, 5633236, 5633385, 5633533, 5633681, 5633830, 5633978, 5634126, 5634275, 5634423, 5634571, 5634719, 5634868, 5635016, 5635164, 5635313, 5635461, 5635609, 5635758, 5635906, 5636054, 5636203, 5636351, 5636499, 5636648, 5636796, 5636944, 5637093, 5637241, 5637389, 5637538, 5637686, 5637835, 5637983, 5638131, 5638280, 5638428, 5638576, 5638725, 5638873, 5639021, 5639170, 5639318, 5639466, 5639615, 5639763, 5639912, 5640060, 5640208, 5640357, 5640505, 5640653, 5640802, 5640950, 5641099, 5641247, 5641395, 5641544, 5641692, 5641841, 5641989, 5642137, 5642286, 5642434, 5642583, 5642731, 5642879, 5643028, 5643176, 5643325, 5643473, 5643621, 5643770, 5643918, 5644067, 5644215, 5644364, 5644512, 5644660, 5644809, 5644957, 5645106, 5645254, 5645403, 5645551, 5645699, 5645848, 5645996, 5646145, 5646293, 5646442, 5646590, 5646738, 5646887, 5647035, 5647184, 5647332, 5647481, 5647629, 5647778, 5647926, 5648075, 5648223, 5648371, 5648520, 5648668, 5648817, 5648965, 5649114, 5649262, 5649411, 5649559, 5649708, 5649856, 5650005, 5650153, 5650302, 5650450, 5650599, 5650747, 5650896, 5651044, 5651193, 5651341, 5651490, 5651638, 5651787, 5651935, 5652084, 5652232, 5652381, 5652529, 5652678, 5652826, 5652975, 5653123, 5653272, 5653420, 5653569, 5653717, 5653866, 5654014, 5654163, 5654311, 5654460, 5654608, 5654757, 5654905, 5655054, 5655202, 5655351, 5655500, 5655648, 5655797, 5655945, 5656094, 5656242, 5656391, 5656539, 5656688, 5656836, 5656985, 5657134, 5657282, 5657431, 5657579, 5657728, 5657876, 5658025, 5658173, 5658322, 5658471, 5658619, 5658768, 5658916, 5659065, 5659213, 5659362, 5659511, 5659659, 5659808, 5659956, 5660105, 5660254, 5660402, 5660551, 5660699, 5660848, 5660997, 5661145, 5661294, 5661442, 5661591, 5661740, 5661888, 5662037, 5662185, 5662334, 5662483, 5662631, 5662780, 5662928, 5663077, 5663226, 5663374, 5663523, 5663672, 5663820, 5663969, 5664117, 5664266, 5664415, 5664563, 5664712, 5664861, 5665009, 5665158, 5665306, 5665455, 5665604, 5665752, 5665901, 5666050, 5666198, 5666347, 5666496, 5666644, 5666793, 5666942, 5667090, 5667239, 5667388, 5667536, 5667685, 5667834, 5667982, 5668131, 5668280, 5668428, 5668577, 5668726, 5668874, 5669023, 5669172, 5669320, 5669469, 5669618, 5669766, 5669915, 5670064, 5670213, 5670361, 5670510, 5670659, 5670807, 5670956, 5671105, 5671253, 5671402, 5671551, 5671700, 5671848, 5671997, 5672146, 5672294, 5672443, 5672592, 5672741, 5672889, 5673038, 5673187, 5673335, 5673484, 5673633, 5673782, 5673930, 5674079, 5674228, 5674377, 5674525, 5674674, 5674823, 5674972, 5675120, 5675269, 5675418, 5675567, 5675715, 5675864, 5676013, 5676162, 5676310, 5676459, 5676608, 5676757, 5676905, 5677054, 5677203, 5677352, 5677500, 5677649, 5677798, 5677947, 5678096, 5678244, 5678393, 5678542, 5678691, 5678839, 5678988, 5679137, 5679286, 5679435, 5679583, 5679732, 5679881, 5680030, 5680179, 5680327, 5680476, 5680625, 5680774, 5680923, 5681071, 5681220, 5681369, 5681518, 5681667, 5681815, 5681964, 5682113, 5682262, 5682411, 5682560, 5682708, 5682857, 5683006, 5683155, 5683304, 5683453, 5683601, 5683750, 5683899, 5684048, 5684197, 5684346, 5684494, 5684643, 5684792, 5684941, 5685090, 5685239, 5685388, 5685536, 5685685, 5685834, 5685983, 5686132, 5686281, 5686430, 5686578, 5686727, 5686876, 5687025, 5687174, 5687323, 5687472, 5687621, 5687769, 5687918, 5688067, 5688216, 5688365, 5688514, 5688663, 5688812, 5688961, 5689109, 5689258, 5689407, 5689556, 5689705, 5689854, 5690003, 5690152, 5690301, 5690450, 5690598, 5690747, 5690896, 5691045, 5691194, 5691343, 5691492, 5691641, 5691790, 5691939, 5692088, 5692237, 5692385, 5692534, 5692683, 5692832, 5692981, 5693130, 5693279, 5693428, 5693577, 5693726, 5693875, 5694024, 5694173, 5694322, 5694471, 5694620, 5694769, 5694917, 5695066, 5695215, 5695364, 5695513, 5695662, 5695811, 5695960, 5696109, 5696258, 5696407, 5696556, 5696705, 5696854, 5697003, 5697152, 5697301, 5697450, 5697599, 5697748, 5697897, 5698046, 5698195, 5698344, 5698493, 5698642, 5698791, 5698940, 5699089, 5699238, 5699387, 5699536, 5699685, 5699834, 5699983, 5700132, 5700281, 5700430, 5700579, 5700728, 5700877, 5701026, 5701175, 5701324, 5701473, 5701622, 5701771, 5701920, 5702069, 5702218, 5702367, 5702516, 5702665, 5702814, 5702963, 5703112, 5703261, 5703411, 5703560, 5703709, 5703858, 5704007, 5704156, 5704305, 5704454, 5704603, 5704752, 5704901, 5705050, 5705199, 5705348, 5705497, 5705646, 5705795, 5705945, 5706094, 5706243, 5706392, 5706541, 5706690, 5706839, 5706988, 5707137, 5707286, 5707435, 5707584, 5707733, 5707883, 5708032, 5708181, 5708330, 5708479, 5708628, 5708777, 5708926, 5709075, 5709224, 5709374, 5709523, 5709672, 5709821, 5709970, 5710119, 5710268, 5710417, 5710567, 5710716, 5710865, 5711014, 5711163, 5711312, 5711461, 5711610, 5711760, 5711909, 5712058, 5712207, 5712356, 5712505, 5712654, 5712804, 5712953, 5713102, 5713251, 5713400, 5713549, 5713698, 5713848, 5713997, 5714146, 5714295, 5714444, 5714593, 5714743, 5714892, 5715041, 5715190, 5715339, 5715488, 5715638, 5715787, 5715936, 5716085, 5716234, 5716383, 5716533, 5716682, 5716831, 5716980, 5717129, 5717279, 5717428, 5717577, 5717726, 5717875, 5718025, 5718174, 5718323, 5718472, 5718621, 5718771, 5718920, 5719069, 5719218, 5719367, 5719517, 5719666, 5719815, 5719964, 5720113, 5720263, 5720412, 5720561, 5720710, 5720860, 5721009, 5721158, 5721307, 5721457, 5721606, 5721755, 5721904, 5722054, 5722203, 5722352, 5722501, 5722650, 5722800, 5722949, 5723098, 5723248, 5723397, 5723546, 5723695, 5723845, 5723994, 5724143, 5724292, 5724442, 5724591, 5724740, 5724889, 5725039, 5725188, 5725337, 5725487, 5725636, 5725785, 5725934, 5726084, 5726233, 5726382, 5726532, 5726681, 5726830, 5726979, 5727129, 5727278, 5727427, 5727577, 5727726, 5727875, 5728024, 5728174, 5728323, 5728472, 5728622, 5728771, 5728920, 5729070, 5729219, 5729368, 5729518, 5729667, 5729816, 5729966, 5730115, 5730264, 5730414, 5730563, 5730712, 5730862, 5731011, 5731160, 5731310, 5731459, 5731608, 5731758, 5731907, 5732056, 5732206, 5732355, 5732504, 5732654, 5732803, 5732952, 5733102, 5733251, 5733401, 5733550, 5733699, 5733849, 5733998, 5734147, 5734297, 5734446, 5734595, 5734745, 5734894, 5735044, 5735193, 5735342, 5735492, 5735641, 5735791, 5735940, 5736089, 5736239, 5736388, 5736537, 5736687, 5736836, 5736986, 5737135, 5737284, 5737434, 5737583, 5737733, 5737882, 5738032, 5738181, 5738330, 5738480, 5738629, 5738779, 5738928, 5739077, 5739227, 5739376, 5739526, 5739675, 5739825, 5739974, 5740123, 5740273, 5740422, 5740572, 5740721, 5740871, 5741020, 5741170, 5741319, 5741468, 5741618, 5741767, 5741917, 5742066, 5742216, 5742365, 5742515, 5742664, 5742813, 5742963, 5743112, 5743262, 5743411, 5743561, 5743710, 5743860, 5744009, 5744159, 5744308, 5744458, 5744607, 5744757, 5744906, 5745056, 5745205, 5745355, 5745504, 5745654, 5745803, 5745953, 5746102, 5746252, 5746401, 5746551, 5746700, 5746850, 5746999, 5747149, 5747298, 5747448, 5747597, 5747747, 5747896, 5748046, 5748195, 5748345, 5748494, 5748644, 5748793, 5748943, 5749092, 5749242, 5749391, 5749541, 5749690, 5749840, 5749990, 5750139, 5750289, 5750438, 5750588, 5750737, 5750887, 5751036, 5751186, 5751335, 5751485, 5751635, 5751784, 5751934, 5752083, 5752233, 5752382, 5752532, 5752681, 5752831, 5752981, 5753130, 5753280, 5753429, 5753579, 5753728, 5753878, 5754028, 5754177, 5754327, 5754476, 5754626, 5754776, 5754925, 5755075, 5755224, 5755374, 5755523, 5755673, 5755823, 5755972, 5756122, 5756271, 5756421, 5756571, 5756720, 5756870, 5757020, 5757169, 5757319, 5757468, 5757618, 5757768, 5757917, 5758067, 5758216, 5758366, 5758516, 5758665, 5758815, 5758965, 5759114, 5759264, 5759414, 5759563, 5759713, 5759862, 5760012, 5760162, 5760311, 5760461, 5760611, 5760760, 5760910, 5761060, 5761209, 5761359, 5761509, 5761658, 5761808, 5761958, 5762107, 5762257, 5762407, 5762556, 5762706, 5762856, 5763005, 5763155, 5763305, 5763454, 5763604, 5763754, 5763903, 5764053, 5764203, 5764352, 5764502, 5764652, 5764802, 5764951, 5765101, 5765251, 5765400, 5765550, 5765700, 5765849, 5765999, 5766149, 5766299, 5766448, 5766598, 5766748, 5766897, 5767047, 5767197, 5767347, 5767496, 5767646, 5767796, 5767945, 5768095, 5768245, 5768395, 5768544, 5768694, 5768844, 5768994, 5769143, 5769293, 5769443, 5769593, 5769742, 5769892, 5770042, 5770192, 5770341, 5770491, 5770641, 5770791, 5770940, 5771090, 5771240, 5771390, 5771539, 5771689, 5771839, 5771989, 5772138, 5772288, 5772438, 5772588, 5772738, 5772887, 5773037, 5773187, 5773337, 5773486, 5773636, 5773786, 5773936, 5774086, 5774235, 5774385, 5774535, 5774685, 5774835, 5774984, 5775134, 5775284, 5775434, 5775584, 5775733, 5775883, 5776033, 5776183, 5776333, 5776483, 5776632, 5776782, 5776932, 5777082, 5777232, 5777381, 5777531, 5777681, 5777831, 5777981, 5778131, 5778280, 5778430, 5778580, 5778730, 5778880, 5779030, 5779180, 5779329, 5779479, 5779629, 5779779, 5779929, 5780079, 5780228, 5780378, 5780528, 5780678, 5780828, 5780978, 5781128, 5781278, 5781427, 5781577, 5781727, 5781877, 5782027, 5782177, 5782327, 5782477, 5782626, 5782776, 5782926, 5783076, 5783226, 5783376, 5783526, 5783676, 5783826, 5783975, 5784125, 5784275, 5784425, 5784575, 5784725, 5784875, 5785025, 5785175, 5785325, 5785474, 5785624, 5785774, 5785924, 5786074, 5786224, 5786374, 5786524, 5786674, 5786824, 5786974, 5787124, 5787274, 5787423, 5787573, 5787723, 5787873, 5788023, 5788173, 5788323, 5788473, 5788623, 5788773, 5788923, 5789073, 5789223, 5789373, 5789523, 5789673, 5789823, 5789973, 5790123, 5790273, 5790422, 5790572, 5790722, 5790872, 5791022, 5791172, 5791322, 5791472, 5791622, 5791772, 5791922, 5792072, 5792222, 5792372, 5792522, 5792672, 5792822, 5792972, 5793122, 5793272, 5793422, 5793572, 5793722, 5793872, 5794022, 5794172, 5794322, 5794472, 5794622, 5794772, 5794922, 5795072, 5795222, 5795372, 5795522, 5795672, 5795822, 5795972, 5796122, 5796272, 5796422, 5796572, 5796722, 5796872, 5797023, 5797173, 5797323, 5797473, 5797623, 5797773, 5797923, 5798073, 5798223, 5798373, 5798523, 5798673, 5798823, 5798973, 5799123, 5799273, 5799423, 5799573, 5799723, 5799873, 5800024, 5800174, 5800324, 5800474, 5800624, 5800774, 5800924, 5801074, 5801224, 5801374, 5801524, 5801674, 5801824, 5801975, 5802125, 5802275, 5802425, 5802575, 5802725, 5802875, 5803025, 5803175, 5803325, 5803476, 5803626, 5803776, 5803926, 5804076, 5804226, 5804376, 5804526, 5804676, 5804827, 5804977, 5805127, 5805277, 5805427, 5805577, 5805727, 5805877, 5806028, 5806178, 5806328, 5806478, 5806628, 5806778, 5806928, 5807078, 5807229, 5807379, 5807529, 5807679, 5807829, 5807979, 5808129, 5808280, 5808430, 5808580, 5808730, 5808880, 5809030, 5809181, 5809331, 5809481, 5809631, 5809781, 5809931, 5810082, 5810232, 5810382, 5810532, 5810682, 5810833, 5810983, 5811133, 5811283, 5811433, 5811583, 5811734, 5811884, 5812034, 5812184, 5812334, 5812485, 5812635, 5812785, 5812935, 5813085, 5813236, 5813386, 5813536, 5813686, 5813836, 5813987, 5814137, 5814287, 5814437, 5814588, 5814738, 5814888, 5815038, 5815188, 5815339, 5815489, 5815639, 5815789, 5815940, 5816090, 5816240, 5816390, 5816541, 5816691, 5816841, 5816991, 5817142, 5817292, 5817442, 5817592, 5817743, 5817893, 5818043, 5818193, 5818344, 5818494, 5818644, 5818794, 5818945, 5819095, 5819245, 5819395, 5819546, 5819696, 5819846, 5819997, 5820147, 5820297, 5820447, 5820598, 5820748, 5820898, 5821049, 5821199, 5821349, 5821499, 5821650, 5821800, 5821950, 5822101, 5822251, 5822401, 5822552, 5822702, 5822852, 5823002, 5823153, 5823303, 5823453, 5823604, 5823754, 5823904, 5824055, 5824205, 5824355, 5824506, 5824656, 5824806, 5824957, 5825107, 5825257, 5825408, 5825558, 5825708, 5825859, 5826009, 5826159, 5826310, 5826460, 5826610, 5826761, 5826911, 5827061, 5827212, 5827362, 5827512, 5827663, 5827813, 5827964, 5828114, 5828264, 5828415, 5828565, 5828715, 5828866, 5829016, 5829166, 5829317, 5829467, 5829618, 5829768, 5829918, 5830069, 5830219, 5830370, 5830520, 5830670, 5830821, 5830971, 5831122, 5831272, 5831422, 5831573, 5831723, 5831874, 5832024, 5832174, 5832325, 5832475, 5832626, 5832776, 5832926, 5833077, 5833227, 5833378, 5833528, 5833678, 5833829, 5833979, 5834130, 5834280, 5834431, 5834581, 5834731, 5834882, 5835032, 5835183, 5835333, 5835484, 5835634, 5835785, 5835935, 5836085, 5836236, 5836386, 5836537, 5836687, 5836838, 5836988, 5837139, 5837289, 5837440, 5837590, 5837740, 5837891, 5838041, 5838192, 5838342, 5838493, 5838643, 5838794, 5838944, 5839095, 5839245, 5839396, 5839546, 5839697, 5839847, 5839998, 5840148, 5840299, 5840449, 5840600, 5840750, 5840901, 5841051, 5841202, 5841352, 5841503, 5841653, 5841804, 5841954, 5842105, 5842255, 5842406, 5842556, 5842707, 5842857, 5843008, 5843158, 5843309, 5843459, 5843610, 5843760, 5843911, 5844061, 5844212, 5844363, 5844513, 5844664, 5844814, 5844965, 5845115, 5845266, 5845416, 5845567, 5845717, 5845868, 5846019, 5846169, 5846320, 5846470, 5846621, 5846771, 5846922, 5847072, 5847223, 5847374, 5847524, 5847675, 5847825, 5847976, 5848126, 5848277, 5848428, 5848578, 5848729, 5848879, 5849030, 5849181, 5849331, 5849482, 5849632, 5849783, 5849933, 5850084, 5850235, 5850385, 5850536, 5850686, 5850837, 5850988, 5851138, 5851289, 5851439, 5851590, 5851741, 5851891, 5852042, 5852193, 5852343, 5852494, 5852644, 5852795, 5852946, 5853096, 5853247, 5853398, 5853548, 5853699, 5853849, 5854000, 5854151, 5854301, 5854452, 5854603, 5854753, 5854904, 5855055, 5855205, 5855356, 5855507, 5855657, 5855808, 5855959, 5856109, 5856260, 5856411, 5856561, 5856712, 5856863, 5857013, 5857164, 5857315, 5857465, 5857616, 5857767, 5857917, 5858068, 5858219, 5858369, 5858520, 5858671, 5858821, 5858972, 5859123, 5859273, 5859424, 5859575, 5859726, 5859876, 5860027, 5860178, 5860328, 5860479, 5860630, 5860780, 5860931, 5861082, 5861233, 5861383, 5861534, 5861685, 5861835, 5861986, 5862137, 5862288, 5862438, 5862589, 5862740, 5862891, 5863041, 5863192, 5863343, 5863493, 5863644, 5863795, 5863946, 5864096, 5864247, 5864398, 5864549, 5864699, 5864850, 5865001, 5865152, 5865302, 5865453, 5865604, 5865755, 5865906, 5866056, 5866207, 5866358, 5866509, 5866659, 5866810, 5866961, 5867112, 5867262, 5867413, 5867564, 5867715, 5867866, 5868016, 5868167, 5868318, 5868469, 5868620, 5868770, 5868921, 5869072, 5869223, 5869374, 5869524, 5869675, 5869826, 5869977, 5870128, 5870278, 5870429, 5870580, 5870731, 5870882, 5871032, 5871183, 5871334, 5871485, 5871636, 5871787, 5871937, 5872088, 5872239, 5872390, 5872541, 5872692, 5872842, 5872993, 5873144, 5873295, 5873446, 5873597, 5873747, 5873898, 5874049, 5874200, 5874351, 5874502, 5874653, 5874803, 5874954, 5875105, 5875256, 5875407, 5875558, 5875709, 5875859, 5876010, 5876161, 5876312, 5876463, 5876614, 5876765, 5876916, 5877066, 5877217, 5877368, 5877519, 5877670, 5877821, 5877972, 5878123, 5878274, 5878424, 5878575, 5878726, 5878877, 5879028, 5879179, 5879330, 5879481, 5879632, 5879783, 5879933, 5880084, 5880235, 5880386, 5880537, 5880688, 5880839, 5880990, 5881141, 5881292, 5881443, 5881594, 5881745, 5881895, 5882046, 5882197, 5882348, 5882499, 5882650, 5882801, 5882952, 5883103, 5883254, 5883405, 5883556, 5883707, 5883858, 5884009, 5884160, 5884311, 5884462, 5884613, 5884763, 5884914, 5885065, 5885216, 5885367, 5885518, 5885669, 5885820, 5885971, 5886122, 5886273, 5886424, 5886575, 5886726, 5886877, 5887028, 5887179, 5887330, 5887481, 5887632, 5887783, 5887934, 5888085, 5888236, 5888387, 5888538, 5888689, 5888840, 5888991, 5889142, 5889293, 5889444, 5889595, 5889746, 5889897, 5890048, 5890199, 5890350, 5890501, 5890652, 5890803, 5890954, 5891105, 5891256, 5891407, 5891558, 5891709, 5891861, 5892012, 5892163, 5892314, 5892465, 5892616, 5892767, 5892918, 5893069, 5893220, 5893371, 5893522, 5893673, 5893824, 5893975, 5894126, 5894277, 5894428, 5894579, 5894731, 5894882, 5895033, 5895184, 5895335, 5895486, 5895637, 5895788, 5895939, 5896090, 5896241, 5896392, 5896543, 5896695, 5896846, 5896997, 5897148, 5897299, 5897450, 5897601, 5897752, 5897903, 5898054, 5898206, 5898357, 5898508, 5898659, 5898810, 5898961, 5899112, 5899263, 5899414, 5899566, 5899717, 5899868, 5900019, 5900170, 5900321, 5900472, 5900623, 5900775, 5900926, 5901077, 5901228, 5901379, 5901530, 5901681, 5901833, 5901984, 5902135, 5902286, 5902437, 5902588, 5902739, 5902891, 5903042, 5903193, 5903344, 5903495, 5903646, 5903798, 5903949, 5904100, 5904251, 5904402, 5904553, 5904705, 5904856, 5905007, 5905158, 5905309, 5905460, 5905612, 5905763, 5905914, 5906065, 5906216, 5906368, 5906519, 5906670, 5906821, 5906972, 5907124, 5907275, 5907426, 5907577, 5907728, 5907880, 5908031, 5908182, 5908333, 5908484, 5908636, 5908787, 5908938, 5909089, 5909241, 5909392, 5909543, 5909694, 5909845, 5909997, 5910148, 5910299, 5910450, 5910602, 5910753, 5910904, 5911055, 5911207, 5911358, 5911509, 5911660, 5911812, 5911963, 5912114, 5912265, 5912417, 5912568, 5912719, 5912870, 5913022, 5913173, 5913324, 5913475, 5913627, 5913778, 5913929, 5914080, 5914232, 5914383, 5914534, 5914686, 5914837, 5914988, 5915139, 5915291, 5915442, 5915593, 5915745, 5915896, 5916047, 5916198, 5916350, 5916501, 5916652, 5916804, 5916955, 5917106, 5917258, 5917409, 5917560, 5917712, 5917863, 5918014, 5918165, 5918317, 5918468, 5918619, 5918771, 5918922, 5919073, 5919225, 5919376, 5919527, 5919679, 5919830, 5919981, 5920133, 5920284, 5920435, 5920587, 5920738, 5920889, 5921041, 5921192, 5921343, 5921495, 5921646, 5921798, 5921949, 5922100, 5922252, 5922403, 5922554, 5922706, 5922857, 5923008, 5923160, 5923311, 5923463, 5923614, 5923765, 5923917, 5924068, 5924219, 5924371, 5924522, 5924674, 5924825, 5924976, 5925128, 5925279, 5925430, 5925582, 5925733, 5925885, 5926036, 5926187, 5926339, 5926490, 5926642, 5926793, 5926945, 5927096, 5927247, 5927399, 5927550, 5927702, 5927853, 5928004, 5928156, 5928307, 5928459, 5928610, 5928762, 5928913, 5929064, 5929216, 5929367, 5929519, 5929670, 5929822, 5929973, 5930124, 5930276, 5930427, 5930579, 5930730, 5930882, 5931033, 5931185, 5931336, 5931488, 5931639, 5931790, 5931942, 5932093, 5932245, 5932396, 5932548, 5932699, 5932851, 5933002, 5933154, 5933305, 5933457, 5933608, 5933760, 5933911, 5934063, 5934214, 5934366, 5934517, 5934668, 5934820, 5934971, 5935123, 5935274, 5935426, 5935577, 5935729, 5935880, 5936032, 5936183, 5936335, 5936487, 5936638, 5936790, 5936941, 5937093, 5937244, 5937396, 5937547, 5937699, 5937850, 5938002, 5938153, 5938305, 5938456, 5938608, 5938759, 5938911, 5939062, 5939214, 5939365, 5939517, 5939669, 5939820, 5939972, 5940123, 5940275, 5940426, 5940578, 5940729, 5940881, 5941033, 5941184, 5941336, 5941487, 5941639, 5941790, 5941942, 5942093, 5942245, 5942397, 5942548, 5942700, 5942851, 5943003, 5943155, 5943306, 5943458, 5943609, 5943761, 5943912, 5944064, 5944216, 5944367, 5944519, 5944670, 5944822, 5944974, 5945125, 5945277, 5945428, 5945580, 5945732, 5945883, 5946035, 5946186, 5946338, 5946490, 5946641, 5946793, 5946945, 5947096, 5947248, 5947399, 5947551, 5947703, 5947854, 5948006, 5948158, 5948309, 5948461, 5948612, 5948764, 5948916, 5949067, 5949219, 5949371, 5949522, 5949674, 5949826, 5949977, 5950129, 5950281, 5950432, 5950584, 5950736, 5950887, 5951039, 5951191, 5951342, 5951494, 5951646, 5951797, 5951949, 5952101, 5952252, 5952404, 5952556, 5952707, 5952859, 5953011, 5953162, 5953314, 5953466, 5953617, 5953769, 5953921, 5954073, 5954224, 5954376, 5954528, 5954679, 5954831, 5954983, 5955134, 5955286, 5955438, 5955590, 5955741, 5955893, 5956045, 5956196, 5956348, 5956500, 5956652, 5956803, 5956955, 5957107, 5957259, 5957410, 5957562, 5957714, 5957865, 5958017, 5958169, 5958321, 5958472, 5958624, 5958776, 5958928, 5959079, 5959231, 5959383, 5959535, 5959686, 5959838, 5959990, 5960142, 5960293, 5960445, 5960597, 5960749, 5960900, 5961052, 5961204, 5961356, 5961508, 5961659, 5961811, 5961963, 5962115, 5962266, 5962418, 5962570, 5962722, 5962874, 5963025, 5963177, 5963329, 5963481, 5963633, 5963784, 5963936, 5964088, 5964240, 5964392, 5964543, 5964695, 5964847, 5964999, 5965151, 5965302, 5965454, 5965606, 5965758, 5965910, 5966062, 5966213, 5966365, 5966517, 5966669, 5966821, 5966973, 5967124, 5967276, 5967428, 5967580, 5967732, 5967884, 5968035, 5968187, 5968339, 5968491, 5968643, 5968795, 5968946, 5969098, 5969250, 5969402, 5969554, 5969706, 5969858, 5970010, 5970161, 5970313, 5970465, 5970617, 5970769, 5970921, 5971073, 5971224, 5971376, 5971528, 5971680, 5971832, 5971984, 5972136, 5972288, 5972440, 5972591, 5972743, 5972895, 5973047, 5973199, 5973351, 5973503, 5973655, 5973807, 5973959, 5974110, 5974262, 5974414, 5974566, 5974718, 5974870, 5975022, 5975174, 5975326, 5975478, 5975630, 5975782, 5975933, 5976085, 5976237, 5976389, 5976541, 5976693, 5976845, 5976997, 5977149, 5977301, 5977453, 5977605, 5977757, 5977909, 5978061, 5978213, 5978365, 5978516, 5978668, 5978820, 5978972, 5979124, 5979276, 5979428, 5979580, 5979732, 5979884, 5980036, 5980188, 5980340, 5980492, 5980644, 5980796, 5980948, 5981100, 5981252, 5981404, 5981556, 5981708, 5981860, 5982012, 5982164, 5982316, 5982468, 5982620, 5982772, 5982924, 5983076, 5983228, 5983380, 5983532, 5983684, 5983836, 5983988, 5984140, 5984292, 5984444, 5984596, 5984748, 5984900, 5985052, 5985204, 5985356, 5985508, 5985660, 5985812, 5985964, 5986116, 5986268, 5986420, 5986572, 5986724, 5986876, 5987028, 5987181, 5987333, 5987485, 5987637, 5987789, 5987941, 5988093, 5988245, 5988397, 5988549, 5988701, 5988853, 5989005, 5989157, 5989309, 5989461, 5989613, 5989766, 5989918, 5990070, 5990222, 5990374, 5990526, 5990678, 5990830, 5990982, 5991134, 5991286, 5991438, 5991591, 5991743, 5991895, 5992047, 5992199, 5992351, 5992503, 5992655, 5992807, 5992959, 5993112, 5993264, 5993416, 5993568, 5993720, 5993872, 5994024, 5994176, 5994329, 5994481, 5994633, 5994785, 5994937, 5995089, 5995241, 5995393, 5995546, 5995698, 5995850, 5996002, 5996154, 5996306, 5996458, 5996611, 5996763, 5996915, 5997067, 5997219, 5997371, 5997523, 5997676, 5997828, 5997980, 5998132, 5998284, 5998436, 5998589, 5998741, 5998893, 5999045, 5999197, 5999349, 5999502, 5999654, 5999806, 5999958, 6000110, 6000263, 6000415, 6000567, 6000719, 6000871, 6001023, 6001176, 6001328, 6001480, 6001632, 6001784, 6001937, 6002089, 6002241, 6002393, 6002545, 6002698, 6002850, 6003002, 6003154, 6003307, 6003459, 6003611, 6003763, 6003915, 6004068, 6004220, 6004372, 6004524, 6004677, 6004829, 6004981, 6005133, 6005285, 6005438, 6005590, 6005742, 6005894, 6006047, 6006199, 6006351, 6006503, 6006656, 6006808, 6006960, 6007112, 6007265, 6007417, 6007569, 6007722, 6007874, 6008026, 6008178, 6008331, 6008483, 6008635, 6008787, 6008940, 6009092, 6009244, 6009397, 6009549, 6009701, 6009853, 6010006, 6010158, 6010310, 6010463, 6010615, 6010767, 6010919, 6011072, 6011224, 6011376, 6011529, 6011681, 6011833, 6011986, 6012138, 6012290, 6012442, 6012595, 6012747, 6012899, 6013052, 6013204, 6013356, 6013509, 6013661, 6013813, 6013966, 6014118, 6014270, 6014423, 6014575, 6014727, 6014880, 6015032, 6015184, 6015337, 6015489, 6015641, 6015794, 6015946, 6016098, 6016251, 6016403, 6016556, 6016708, 6016860, 6017013, 6017165, 6017317, 6017470, 6017622, 6017774, 6017927, 6018079, 6018232, 6018384, 6018536, 6018689, 6018841, 6018993, 6019146, 6019298, 6019451, 6019603, 6019755, 6019908, 6020060, 6020213, 6020365, 6020517, 6020670, 6020822, 6020975, 6021127, 6021279, 6021432, 6021584, 6021737, 6021889, 6022041, 6022194, 6022346, 6022499, 6022651, 6022804, 6022956, 6023108, 6023261, 6023413, 6023566, 6023718, 6023871, 6024023, 6024175, 6024328, 6024480, 6024633, 6024785, 6024938, 6025090, 6025243, 6025395, 6025547, 6025700, 6025852, 6026005, 6026157, 6026310, 6026462, 6026615, 6026767, 6026920, 6027072, 6027225, 6027377, 6027529, 6027682, 6027834, 6027987, 6028139, 6028292, 6028444, 6028597, 6028749, 6028902, 6029054, 6029207, 6029359, 6029512, 6029664, 6029817, 6029969, 6030122, 6030274, 6030427, 6030579, 6030732, 6030884, 6031037, 6031189, 6031342, 6031494, 6031647, 6031799, 6031952, 6032104, 6032257, 6032409, 6032562, 6032714, 6032867, 6033020, 6033172, 6033325, 6033477, 6033630, 6033782, 6033935, 6034087, 6034240, 6034392, 6034545, 6034697, 6034850, 6035003, 6035155, 6035308, 6035460, 6035613, 6035765, 6035918, 6036070, 6036223, 6036376, 6036528, 6036681, 6036833, 6036986, 6037138, 6037291, 6037444, 6037596, 6037749, 6037901, 6038054, 6038207, 6038359, 6038512, 6038664, 6038817, 6038969, 6039122, 6039275, 6039427, 6039580, 6039732, 6039885, 6040038, 6040190, 6040343, 6040496, 6040648, 6040801, 6040953, 6041106, 6041259, 6041411, 6041564, 6041716, 6041869, 6042022, 6042174, 6042327, 6042480, 6042632, 6042785, 6042938, 6043090, 6043243, 6043395, 6043548, 6043701, 6043853, 6044006, 6044159, 6044311, 6044464, 6044617, 6044769, 6044922, 6045075, 6045227, 6045380, 6045533, 6045685, 6045838, 6045991, 6046143, 6046296, 6046449, 6046601, 6046754, 6046907, 6047059, 6047212, 6047365, 6047517, 6047670, 6047823, 6047975, 6048128, 6048281, 6048433, 6048586, 6048739, 6048892, 6049044, 6049197, 6049350, 6049502, 6049655, 6049808, 6049960, 6050113, 6050266, 6050419, 6050571, 6050724, 6050877, 6051030, 6051182, 6051335, 6051488, 6051640, 6051793, 6051946, 6052099, 6052251, 6052404, 6052557, 6052710, 6052862, 6053015, 6053168, 6053321, 6053473, 6053626, 6053779, 6053932, 6054084, 6054237, 6054390, 6054543, 6054695, 6054848, 6055001, 6055154, 6055306, 6055459, 6055612, 6055765, 6055917, 6056070, 6056223, 6056376, 6056529, 6056681, 6056834, 6056987, 6057140, 6057292, 6057445, 6057598, 6057751, 6057904, 6058056, 6058209, 6058362, 6058515, 6058668, 6058820, 6058973, 6059126, 6059279, 6059432, 6059584, 6059737, 6059890, 6060043, 6060196, 6060349, 6060501, 6060654, 6060807, 6060960, 6061113, 6061266, 6061418, 6061571, 6061724, 6061877, 6062030, 6062183, 6062335, 6062488, 6062641, 6062794, 6062947, 6063100, 6063252, 6063405, 6063558, 6063711, 6063864, 6064017, 6064170, 6064322, 6064475, 6064628, 6064781, 6064934, 6065087, 6065240, 6065393, 6065545, 6065698, 6065851, 6066004, 6066157, 6066310, 6066463, 6066616, 6066768, 6066921, 6067074, 6067227, 6067380, 6067533, 6067686, 6067839, 6067992, 6068145, 6068297, 6068450, 6068603, 6068756, 6068909, 6069062, 6069215, 6069368, 6069521, 6069674, 6069827, 6069979, 6070132, 6070285, 6070438, 6070591, 6070744, 6070897, 6071050, 6071203, 6071356, 6071509, 6071662, 6071815, 6071968, 6072121, 6072273, 6072426, 6072579, 6072732, 6072885, 6073038, 6073191, 6073344, 6073497, 6073650, 6073803, 6073956, 6074109, 6074262, 6074415, 6074568, 6074721, 6074874, 6075027, 6075180, 6075333, 6075486, 6075639, 6075792, 6075945, 6076098, 6076251, 6076404, 6076557, 6076710, 6076863, 6077016, 6077169, 6077322, 6077475, 6077628, 6077781, 6077934, 6078087, 6078240, 6078393, 6078546, 6078699, 6078852, 6079005, 6079158, 6079311, 6079464, 6079617, 6079770, 6079923, 6080076, 6080229, 6080382, 6080535, 6080688, 6080841, 6080994, 6081147, 6081300, 6081453, 6081606, 6081759, 6081912, 6082065, 6082218, 6082371, 6082525, 6082678, 6082831, 6082984, 6083137, 6083290, 6083443, 6083596, 6083749, 6083902, 6084055, 6084208, 6084361, 6084514, 6084667, 6084821, 6084974, 6085127, 6085280, 6085433, 6085586, 6085739, 6085892, 6086045, 6086198, 6086351, 6086505, 6086658, 6086811, 6086964, 6087117, 6087270, 6087423, 6087576, 6087729, 6087882, 6088036, 6088189, 6088342, 6088495, 6088648, 6088801, 6088954, 6089107, 6089261, 6089414, 6089567, 6089720, 6089873, 6090026, 6090179, 6090332, 6090486, 6090639, 6090792, 6090945, 6091098, 6091251, 6091404, 6091558, 6091711, 6091864, 6092017, 6092170, 6092323, 6092477, 6092630, 6092783, 6092936, 6093089, 6093242, 6093396, 6093549, 6093702, 6093855, 6094008, 6094161, 6094315, 6094468, 6094621, 6094774, 6094927, 6095081, 6095234, 6095387, 6095540, 6095693, 6095846, 6096000, 6096153, 6096306, 6096459, 6096612, 6096766, 6096919, 6097072, 6097225, 6097379, 6097532, 6097685, 6097838, 6097991, 6098145, 6098298, 6098451, 6098604, 6098757, 6098911, 6099064, 6099217, 6099370, 6099524, 6099677, 6099830, 6099983, 6100137, 6100290, 6100443, 6100596, 6100750, 6100903, 6101056, 6101209, 6101363, 6101516, 6101669, 6101822, 6101976, 6102129, 6102282, 6102435, 6102589, 6102742, 6102895, 6103048, 6103202, 6103355, 6103508, 6103662, 6103815, 6103968, 6104121, 6104275, 6104428, 6104581, 6104735, 6104888, 6105041, 6105194, 6105348, 6105501, 6105654, 6105808, 6105961, 6106114, 6106268, 6106421, 6106574, 6106727, 6106881, 6107034, 6107187, 6107341, 6107494, 6107647, 6107801, 6107954, 6108107, 6108261, 6108414, 6108567, 6108721, 6108874, 6109027, 6109181, 6109334, 6109487, 6109641, 6109794, 6109947, 6110101, 6110254, 6110407, 6110561, 6110714, 6110867, 6111021, 6111174, 6111328, 6111481, 6111634, 6111788, 6111941, 6112094, 6112248, 6112401, 6112554, 6112708, 6112861, 6113015, 6113168, 6113321, 6113475, 6113628, 6113782, 6113935, 6114088, 6114242, 6114395, 6114548, 6114702, 6114855, 6115009, 6115162, 6115315, 6115469, 6115622, 6115776, 6115929, 6116082, 6116236, 6116389, 6116543, 6116696, 6116850, 6117003, 6117156, 6117310, 6117463, 6117617, 6117770, 6117924, 6118077, 6118230, 6118384, 6118537, 6118691, 6118844, 6118998, 6119151, 6119304, 6119458, 6119611, 6119765, 6119918, 6120072, 6120225, 6120379, 6120532, 6120686, 6120839, 6120992, 6121146, 6121299, 6121453, 6121606, 6121760, 6121913, 6122067, 6122220, 6122374, 6122527, 6122681, 6122834, 6122988, 6123141, 6123295, 6123448, 6123602, 6123755, 6123909, 6124062, 6124215, 6124369, 6124522, 6124676, 6124829, 6124983, 6125137, 6125290, 6125444, 6125597, 6125751, 6125904, 6126058, 6126211, 6126365, 6126518, 6126672, 6126825, 6126979, 6127132, 6127286, 6127439, 6127593, 6127746, 6127900, 6128053, 6128207, 6128360, 6128514, 6128668, 6128821, 6128975, 6129128, 6129282, 6129435, 6129589, 6129742, 6129896, 6130050, 6130203, 6130357, 6130510, 6130664, 6130817, 6130971, 6131124, 6131278, 6131432, 6131585, 6131739, 6131892, 6132046, 6132199, 6132353, 6132507, 6132660, 6132814, 6132967, 6133121, 6133275, 6133428, 6133582, 6133735, 6133889, 6134043, 6134196, 6134350, 6134503, 6134657, 6134811, 6134964, 6135118, 6135271, 6135425, 6135579, 6135732, 6135886, 6136040, 6136193, 6136347, 6136500, 6136654, 6136808, 6136961, 6137115, 6137269, 6137422, 6137576, 6137729, 6137883, 6138037, 6138190, 6138344, 6138498, 6138651, 6138805, 6138959, 6139112, 6139266, 6139420, 6139573, 6139727, 6139881, 6140034, 6140188, 6140342, 6140495, 6140649, 6140803, 6140956, 6141110, 6141264, 6141417, 6141571, 6141725, 6141878, 6142032, 6142186, 6142339, 6142493, 6142647, 6142800, 6142954, 6143108, 6143262, 6143415, 6143569, 6143723, 6143876, 6144030, 6144184, 6144337, 6144491, 6144645, 6144799, 6144952, 6145106, 6145260, 6145413, 6145567, 6145721, 6145875, 6146028, 6146182, 6146336, 6146490, 6146643, 6146797, 6146951, 6147104, 6147258, 6147412, 6147566, 6147719, 6147873, 6148027, 6148181, 6148334, 6148488, 6148642, 6148796, 6148949, 6149103, 6149257, 6149411, 6149564, 6149718, 6149872, 6150026, 6150180, 6150333, 6150487, 6150641, 6150795, 6150948, 6151102, 6151256, 6151410, 6151564, 6151717, 6151871, 6152025, 6152179, 6152332, 6152486, 6152640, 6152794, 6152948, 6153101, 6153255, 6153409, 6153563, 6153717, 6153871, 6154024, 6154178, 6154332, 6154486, 6154640, 6154793, 6154947, 6155101, 6155255, 6155409, 6155563, 6155716, 6155870, 6156024, 6156178, 6156332, 6156486, 6156639, 6156793, 6156947, 6157101, 6157255, 6157409, 6157562, 6157716, 6157870, 6158024, 6158178, 6158332, 6158486, 6158639, 6158793, 6158947, 6159101, 6159255, 6159409, 6159563, 6159716, 6159870, 6160024, 6160178, 6160332, 6160486, 6160640, 6160794, 6160947, 6161101, 6161255, 6161409, 6161563, 6161717, 6161871, 6162025, 6162179, 6162333, 6162486, 6162640, 6162794, 6162948, 6163102, 6163256, 6163410, 6163564, 6163718, 6163872, 6164025, 6164179, 6164333, 6164487, 6164641, 6164795, 6164949, 6165103, 6165257, 6165411, 6165565, 6165719, 6165873, 6166027, 6166180, 6166334, 6166488, 6166642, 6166796, 6166950, 6167104, 6167258, 6167412, 6167566, 6167720, 6167874, 6168028, 6168182, 6168336, 6168490, 6168644, 6168798, 6168952, 6169106, 6169260, 6169414, 6169568, 6169722, 6169876, 6170030, 6170183, 6170337, 6170491, 6170645, 6170799, 6170953, 6171107, 6171261, 6171415, 6171569, 6171723, 6171877, 6172031, 6172185, 6172339, 6172493, 6172647, 6172801, 6172955, 6173109, 6173263, 6173417, 6173571, 6173726, 6173880, 6174034, 6174188, 6174342, 6174496, 6174650, 6174804, 6174958, 6175112, 6175266, 6175420, 6175574, 6175728, 6175882, 6176036, 6176190, 6176344, 6176498, 6176652, 6176806, 6176960, 6177114, 6177268, 6177422, 6177577, 6177731, 6177885, 6178039, 6178193, 6178347, 6178501, 6178655, 6178809, 6178963, 6179117, 6179271, 6179425, 6179579, 6179734, 6179888, 6180042, 6180196, 6180350, 6180504, 6180658, 6180812, 6180966, 6181120, 6181274, 6181429, 6181583, 6181737, 6181891, 6182045, 6182199, 6182353, 6182507, 6182661, 6182816, 6182970, 6183124, 6183278, 6183432, 6183586, 6183740, 6183894, 6184048, 6184203, 6184357, 6184511, 6184665, 6184819, 6184973, 6185127, 6185282, 6185436, 6185590, 6185744, 6185898, 6186052, 6186206, 6186361, 6186515, 6186669, 6186823, 6186977, 6187131, 6187286, 6187440, 6187594, 6187748, 6187902, 6188056, 6188211, 6188365, 6188519, 6188673, 6188827, 6188981, 6189136, 6189290, 6189444, 6189598, 6189752, 6189907, 6190061, 6190215, 6190369, 6190523, 6190678, 6190832, 6190986, 6191140, 6191294, 6191449, 6191603, 6191757, 6191911, 6192065, 6192220, 6192374, 6192528, 6192682, 6192836, 6192991, 6193145, 6193299, 6193453, 6193608, 6193762, 6193916, 6194070, 6194225, 6194379, 6194533, 6194687, 6194842, 6194996, 6195150, 6195304, 6195459, 6195613, 6195767, 6195921, 6196076, 6196230, 6196384, 6196538, 6196693, 6196847, 6197001, 6197155, 6197310, 6197464, 6197618, 6197772, 6197927, 6198081, 6198235, 6198390, 6198544, 6198698, 6198852, 6199007, 6199161, 6199315, 6199470, 6199624, 6199778, 6199932, 6200087, 6200241, 6200395, 6200550, 6200704, 6200858, 6201013, 6201167, 6201321, 6201475, 6201630, 6201784, 6201938, 6202093, 6202247, 6202401, 6202556, 6202710, 6202864, 6203019, 6203173, 6203327, 6203482, 6203636, 6203790, 6203945, 6204099, 6204253, 6204408, 6204562, 6204716, 6204871, 6205025, 6205179, 6205334, 6205488, 6205643, 6205797, 6205951, 6206106, 6206260, 6206414, 6206569, 6206723, 6206877, 6207032, 6207186, 6207341, 6207495, 6207649, 6207804, 6207958, 6208112, 6208267, 6208421, 6208576, 6208730, 6208884, 6209039, 6209193, 6209348, 6209502, 6209656, 6209811, 6209965, 6210120, 6210274, 6210428, 6210583, 6210737, 6210892, 6211046, 6211200, 6211355, 6211509, 6211664, 6211818, 6211973, 6212127, 6212281, 6212436, 6212590, 6212745, 6212899, 6213054, 6213208, 6213362, 6213517, 6213671, 6213826, 6213980, 6214135, 6214289, 6214444, 6214598, 6214752, 6214907, 6215061, 6215216, 6215370, 6215525, 6215679, 6215834, 6215988, 6216143, 6216297, 6216452, 6216606, 6216760, 6216915, 6217069, 6217224, 6217378, 6217533, 6217687, 6217842, 6217996, 6218151, 6218305, 6218460, 6218614, 6218769, 6218923, 6219078, 6219232, 6219387, 6219541, 6219696, 6219850, 6220005, 6220159, 6220314, 6220468, 6220623, 6220777, 6220932, 6221086, 6221241, 6221395, 6221550, 6221705, 6221859, 6222014, 6222168, 6222323, 6222477, 6222632, 6222786, 6222941, 6223095, 6223250, 6223404, 6223559, 6223714, 6223868, 6224023, 6224177, 6224332, 6224486, 6224641, 6224795, 6224950, 6225105, 6225259, 6225414, 6225568, 6225723, 6225877, 6226032, 6226187, 6226341, 6226496, 6226650, 6226805, 6226959, 6227114, 6227269, 6227423, 6227578, 6227732, 6227887, 6228042, 6228196, 6228351, 6228505, 6228660, 6228815, 6228969, 6229124, 6229278, 6229433, 6229588, 6229742, 6229897, 6230051, 6230206, 6230361, 6230515, 6230670, 6230824, 6230979, 6231134, 6231288, 6231443, 6231598, 6231752, 6231907, 6232062, 6232216, 6232371, 6232525, 6232680, 6232835, 6232989, 6233144, 6233299, 6233453, 6233608, 6233763, 6233917, 6234072, 6234227, 6234381, 6234536, 6234691, 6234845, 6235000, 6235155, 6235309, 6235464, 6235619, 6235773, 6235928, 6236083, 6236237, 6236392, 6236547, 6236701, 6236856, 6237011, 6237165, 6237320, 6237475, 6237630, 6237784, 6237939, 6238094, 6238248, 6238403, 6238558, 6238712, 6238867, 6239022, 6239177, 6239331, 6239486, 6239641, 6239795, 6239950, 6240105, 6240260, 6240414, 6240569, 6240724, 6240878, 6241033, 6241188, 6241343, 6241497, 6241652, 6241807, 6241962, 6242116, 6242271, 6242426, 6242581, 6242735, 6242890, 6243045, 6243200, 6243354, 6243509, 6243664, 6243819, 6243973, 6244128, 6244283, 6244438, 6244592, 6244747, 6244902, 6245057, 6245212, 6245366, 6245521, 6245676, 6245831, 6245985, 6246140, 6246295, 6246450, 6246605, 6246759, 6246914, 6247069, 6247224, 6247379, 6247533, 6247688, 6247843, 6247998, 6248153, 6248307, 6248462, 6248617, 6248772, 6248927, 6249081, 6249236, 6249391, 6249546, 6249701, 6249856, 6250010, 6250165, 6250320, 6250475, 6250630, 6250785, 6250939, 6251094, 6251249, 6251404, 6251559, 6251714, 6251868, 6252023, 6252178, 6252333, 6252488, 6252643, 6252798, 6252952, 6253107, 6253262, 6253417, 6253572, 6253727, 6253882, 6254036, 6254191, 6254346, 6254501, 6254656, 6254811, 6254966, 6255121, 6255275, 6255430, 6255585, 6255740, 6255895, 6256050, 6256205, 6256360, 6256515, 6256669, 6256824, 6256979, 6257134, 6257289, 6257444, 6257599, 6257754, 6257909, 6258064, 6258219, 6258373, 6258528, 6258683, 6258838, 6258993, 6259148, 6259303, 6259458, 6259613, 6259768, 6259923, 6260078, 6260233, 6260387, 6260542, 6260697, 6260852, 6261007, 6261162, 6261317, 6261472, 6261627, 6261782, 6261937, 6262092, 6262247, 6262402, 6262557, 6262712, 6262867, 6263022, 6263177, 6263332, 6263487, 6263641, 6263796, 6263951, 6264106, 6264261, 6264416, 6264571, 6264726, 6264881, 6265036, 6265191, 6265346, 6265501, 6265656, 6265811, 6265966, 6266121, 6266276, 6266431, 6266586, 6266741, 6266896, 6267051, 6267206, 6267361, 6267516, 6267671, 6267826, 6267981, 6268136, 6268291, 6268446, 6268601, 6268756, 6268911, 6269066, 6269221, 6269377, 6269532, 6269687, 6269842, 6269997, 6270152, 6270307, 6270462, 6270617, 6270772, 6270927, 6271082, 6271237, 6271392, 6271547, 6271702, 6271857, 6272012, 6272167, 6272322, 6272477, 6272633, 6272788, 6272943, 6273098, 6273253, 6273408, 6273563, 6273718, 6273873, 6274028, 6274183, 6274338, 6274493, 6274649, 6274804, 6274959, 6275114, 6275269, 6275424, 6275579, 6275734, 6275889, 6276044, 6276199, 6276355, 6276510, 6276665, 6276820, 6276975, 6277130, 6277285, 6277440, 6277595, 6277751, 6277906, 6278061, 6278216, 6278371, 6278526, 6278681, 6278836, 6278992, 6279147, 6279302, 6279457, 6279612, 6279767, 6279922, 6280078, 6280233, 6280388, 6280543, 6280698, 6280853, 6281008, 6281164, 6281319, 6281474, 6281629, 6281784, 6281939, 6282095, 6282250, 6282405, 6282560, 6282715, 6282870, 6283026, 6283181, 6283336, 6283491, 6283646, 6283802, 6283957, 6284112, 6284267, 6284422, 6284577, 6284733, 6284888, 6285043, 6285198, 6285353, 6285509, 6285664, 6285819, 6285974, 6286129, 6286285, 6286440, 6286595, 6286750, 6286906, 6287061, 6287216, 6287371, 6287526, 6287682, 6287837, 6287992, 6288147, 6288303, 6288458, 6288613, 6288768, 6288924, 6289079, 6289234, 6289389, 6289544, 6289700, 6289855, 6290010, 6290165, 6290321, 6290476, 6290631, 6290786, 6290942, 6291097, 6291252, 6291408, 6291563, 6291718, 6291873, 6292029, 6292184, 6292339, 6292494, 6292650, 6292805, 6292960, 6293116, 6293271, 6293426, 6293581, 6293737, 6293892, 6294047, 6294203, 6294358, 6294513, 6294668, 6294824, 6294979, 6295134, 6295290, 6295445, 6295600, 6295756, 6295911, 6296066, 6296222, 6296377, 6296532, 6296687, 6296843, 6296998, 6297153, 6297309, 6297464, 6297619, 6297775, 6297930, 6298085, 6298241, 6298396, 6298551, 6298707, 6298862, 6299017, 6299173, 6299328, 6299484, 6299639, 6299794, 6299950, 6300105, 6300260, 6300416, 6300571, 6300726, 6300882, 6301037, 6301192, 6301348, 6301503, 6301659, 6301814, 6301969, 6302125, 6302280, 6302435, 6302591, 6302746, 6302902, 6303057, 6303212, 6303368, 6303523, 6303679, 6303834, 6303989, 6304145, 6304300, 6304456, 6304611, 6304766, 6304922, 6305077, 6305233, 6305388, 6305543, 6305699, 6305854, 6306010, 6306165, 6306320, 6306476, 6306631, 6306787, 6306942, 6307098, 6307253, 6307408, 6307564, 6307719, 6307875, 6308030, 6308186, 6308341, 6308497, 6308652, 6308807, 6308963, 6309118, 6309274, 6309429, 6309585, 6309740, 6309896, 6310051, 6310207, 6310362, 6310517, 6310673, 6310828, 6310984, 6311139, 6311295, 6311450, 6311606, 6311761, 6311917, 6312072, 6312228, 6312383, 6312539, 6312694, 6312850, 6313005, 6313161, 6313316, 6313472, 6313627, 6313783, 6313938, 6314094, 6314249, 6314405, 6314560, 6314716, 6314871, 6315027, 6315182, 6315338, 6315493, 6315649, 6315804, 6315960, 6316115, 6316271, 6316426, 6316582, 6316737, 6316893, 6317049, 6317204, 6317360, 6317515, 6317671, 6317826, 6317982, 6318137, 6318293, 6318448, 6318604, 6318760, 6318915, 6319071, 6319226, 6319382, 6319537, 6319693, 6319848, 6320004, 6320160, 6320315, 6320471, 6320626, 6320782, 6320937, 6321093, 6321249, 6321404, 6321560, 6321715, 6321871, 6322027, 6322182, 6322338, 6322493, 6322649, 6322804, 6322960, 6323116, 6323271, 6323427, 6323582, 6323738, 6323894, 6324049, 6324205, 6324361, 6324516, 6324672, 6324827, 6324983, 6325139, 6325294, 6325450, 6325605, 6325761, 6325917, 6326072, 6326228, 6326384, 6326539, 6326695, 6326851, 6327006, 6327162, 6327317, 6327473, 6327629, 6327784, 6327940, 6328096, 6328251, 6328407, 6328563, 6328718, 6328874, 6329030, 6329185, 6329341, 6329497, 6329652, 6329808, 6329964, 6330119, 6330275, 6330431, 6330586, 6330742, 6330898, 6331053, 6331209, 6331365, 6331520, 6331676, 6331832, 6331988, 6332143, 6332299, 6332455, 6332610, 6332766, 6332922, 6333077, 6333233, 6333389, 6333545, 6333700, 6333856, 6334012, 6334167, 6334323, 6334479, 6334635, 6334790, 6334946, 6335102, 6335257, 6335413, 6335569, 6335725, 6335880, 6336036, 6336192, 6336348, 6336503, 6336659, 6336815, 6336971, 6337126, 6337282, 6337438, 6337594, 6337749, 6337905, 6338061, 6338217, 6338372, 6338528, 6338684, 6338840, 6338995, 6339151, 6339307, 6339463, 6339619, 6339774, 6339930, 6340086, 6340242, 6340397, 6340553, 6340709, 6340865, 6341021, 6341176, 6341332, 6341488, 6341644, 6341800, 6341955, 6342111, 6342267, 6342423, 6342579, 6342734, 6342890, 6343046, 6343202, 6343358, 6343513, 6343669, 6343825, 6343981, 6344137, 6344292, 6344448, 6344604, 6344760, 6344916, 6345072, 6345227, 6345383, 6345539, 6345695, 6345851, 6346007, 6346162, 6346318, 6346474, 6346630, 6346786, 6346942, 6347098, 6347253, 6347409, 6347565, 6347721, 6347877, 6348033, 6348189, 6348344, 6348500, 6348656, 6348812, 6348968, 6349124, 6349280, 6349436, 6349591, 6349747, 6349903, 6350059, 6350215, 6350371, 6350527, 6350683, 6350839, 6350994, 6351150, 6351306, 6351462, 6351618, 6351774, 6351930, 6352086, 6352242, 6352398, 6352553, 6352709, 6352865, 6353021, 6353177, 6353333, 6353489, 6353645, 6353801, 6353957, 6354113, 6354269, 6354425, 6354580, 6354736, 6354892, 6355048, 6355204, 6355360, 6355516, 6355672, 6355828, 6355984, 6356140, 6356296, 6356452, 6356608, 6356764, 6356920, 6357076, 6357232, 6357387, 6357543, 6357699, 6357855, 6358011, 6358167, 6358323, 6358479, 6358635, 6358791, 6358947, 6359103, 6359259, 6359415, 6359571, 6359727, 6359883, 6360039, 6360195, 6360351, 6360507, 6360663, 6360819, 6360975, 6361131, 6361287, 6361443, 6361599, 6361755, 6361911, 6362067, 6362223, 6362379, 6362535, 6362691, 6362847, 6363003, 6363159, 6363315, 6363471, 6363627, 6363783, 6363939, 6364095, 6364251, 6364407, 6364564, 6364720, 6364876, 6365032, 6365188, 6365344, 6365500, 6365656, 6365812, 6365968, 6366124, 6366280, 6366436, 6366592, 6366748, 6366904, 6367060, 6367216, 6367372, 6367529, 6367685, 6367841, 6367997, 6368153, 6368309, 6368465, 6368621, 6368777, 6368933, 6369089, 6369245, 6369401, 6369558, 6369714, 6369870, 6370026, 6370182, 6370338, 6370494, 6370650, 6370806, 6370962, 6371119, 6371275, 6371431, 6371587, 6371743, 6371899, 6372055, 6372211, 6372367, 6372524, 6372680, 6372836, 6372992, 6373148, 6373304, 6373460, 6373616, 6373773, 6373929, 6374085, 6374241, 6374397, 6374553, 6374709, 6374866, 6375022, 6375178, 6375334, 6375490, 6375646, 6375803, 6375959, 6376115, 6376271, 6376427, 6376583, 6376740, 6376896, 6377052, 6377208, 6377364, 6377520, 6377677, 6377833, 6377989, 6378145, 6378301, 6378457, 6378614, 6378770, 6378926, 6379082, 6379238, 6379395, 6379551, 6379707, 6379863, 6380019, 6380176, 6380332, 6380488, 6380644, 6380800, 6380957, 6381113, 6381269, 6381425, 6381581, 6381738, 6381894, 6382050, 6382206, 6382363, 6382519, 6382675, 6382831, 6382988, 6383144, 6383300, 6383456, 6383612, 6383769, 6383925, 6384081, 6384237, 6384394, 6384550, 6384706, 6384862, 6385019, 6385175, 6385331, 6385487, 6385644, 6385800, 6385956, 6386112, 6386269, 6386425, 6386581, 6386738, 6386894, 6387050, 6387206, 6387363, 6387519, 6387675, 6387832, 6387988, 6388144, 6388300, 6388457, 6388613, 6388769, 6388926, 6389082, 6389238, 6389394, 6389551, 6389707, 6389863, 6390020, 6390176, 6390332, 6390489, 6390645, 6390801, 6390958, 6391114, 6391270, 6391426, 6391583, 6391739, 6391895, 6392052, 6392208, 6392364, 6392521, 6392677, 6392833, 6392990, 6393146, 6393302, 6393459, 6393615, 6393772, 6393928, 6394084, 6394241, 6394397, 6394553, 6394710, 6394866, 6395022, 6395179, 6395335, 6395491, 6395648, 6395804, 6395961, 6396117, 6396273, 6396430, 6396586, 6396742, 6396899, 6397055, 6397212, 6397368, 6397524, 6397681, 6397837, 6397993, 6398150, 6398306, 6398463, 6398619, 6398775, 6398932, 6399088, 6399245, 6399401, 6399557, 6399714, 6399870, 6400027, 6400183, 6400340, 6400496, 6400652, 6400809, 6400965, 6401122, 6401278, 6401435, 6401591, 6401747, 6401904, 6402060, 6402217, 6402373, 6402530, 6402686, 6402842, 6402999, 6403155, 6403312, 6403468, 6403625, 6403781, 6403938, 6404094, 6404250, 6404407, 6404563, 6404720, 6404876, 6405033, 6405189, 6405346, 6405502, 6405659, 6405815, 6405972, 6406128, 6406285, 6406441, 6406598, 6406754, 6406911, 6407067, 6407223, 6407380, 6407536, 6407693, 6407849, 6408006, 6408162, 6408319, 6408475, 6408632, 6408788, 6408945, 6409101, 6409258, 6409415, 6409571, 6409728, 6409884, 6410041, 6410197, 6410354, 6410510, 6410667, 6410823, 6410980, 6411136, 6411293, 6411449, 6411606, 6411762, 6411919, 6412075, 6412232, 6412389, 6412545, 6412702, 6412858, 6413015, 6413171, 6413328, 6413484, 6413641, 6413798, 6413954, 6414111, 6414267, 6414424, 6414580, 6414737, 6414893, 6415050, 6415207, 6415363, 6415520, 6415676, 6415833, 6415989, 6416146, 6416303, 6416459, 6416616, 6416772, 6416929, 6417086, 6417242, 6417399, 6417555, 6417712, 6417869, 6418025, 6418182, 6418338, 6418495, 6418652, 6418808, 6418965, 6419121, 6419278, 6419435, 6419591, 6419748, 6419905, 6420061, 6420218, 6420374, 6420531, 6420688, 6420844, 6421001, 6421158, 6421314, 6421471, 6421628, 6421784, 6421941, 6422097, 6422254, 6422411, 6422567, 6422724, 6422881, 6423037, 6423194, 6423351, 6423507, 6423664, 6423821, 6423977, 6424134, 6424291, 6424447, 6424604, 6424761, 6424917, 6425074, 6425231, 6425387, 6425544, 6425701, 6425857, 6426014, 6426171, 6426328, 6426484, 6426641, 6426798, 6426954, 6427111, 6427268, 6427424, 6427581, 6427738, 6427895, 6428051, 6428208, 6428365, 6428521, 6428678, 6428835, 6428992, 6429148, 6429305, 6429462, 6429618, 6429775, 6429932, 6430089, 6430245, 6430402, 6430559, 6430716, 6430872, 6431029, 6431186, 6431342, 6431499, 6431656, 6431813, 6431969, 6432126, 6432283, 6432440, 6432597, 6432753, 6432910, 6433067, 6433224, 6433380, 6433537, 6433694, 6433851, 6434007, 6434164, 6434321, 6434478, 6434634, 6434791, 6434948, 6435105, 6435262, 6435418, 6435575, 6435732, 6435889, 6436046, 6436202, 6436359, 6436516, 6436673, 6436830, 6436986, 6437143, 6437300, 6437457, 6437614, 6437770, 6437927, 6438084, 6438241, 6438398, 6438554, 6438711, 6438868, 6439025, 6439182, 6439339, 6439495, 6439652, 6439809, 6439966, 6440123, 6440280, 6440436, 6440593, 6440750, 6440907, 6441064, 6441221, 6441378, 6441534, 6441691, 6441848, 6442005, 6442162, 6442319, 6442476, 6442632, 6442789, 6442946, 6443103, 6443260, 6443417, 6443574, 6443730, 6443887, 6444044, 6444201, 6444358, 6444515, 6444672, 6444829, 6444986, 6445142, 6445299, 6445456, 6445613, 6445770, 6445927, 6446084, 6446241, 6446398, 6446555, 6446711, 6446868, 6447025, 6447182, 6447339, 6447496, 6447653, 6447810, 6447967, 6448124, 6448281, 6448437, 6448594, 6448751, 6448908, 6449065, 6449222, 6449379, 6449536, 6449693, 6449850, 6450007, 6450164, 6450321, 6450478, 6450635, 6450792, 6450949, 6451105, 6451262, 6451419, 6451576, 6451733, 6451890, 6452047, 6452204, 6452361, 6452518, 6452675, 6452832, 6452989, 6453146, 6453303, 6453460, 6453617, 6453774, 6453931, 6454088, 6454245, 6454402, 6454559, 6454716, 6454873, 6455030, 6455187, 6455344, 6455501, 6455658, 6455815, 6455972, 6456129, 6456286, 6456443, 6456600, 6456757, 6456914, 6457071, 6457228, 6457385, 6457542, 6457699, 6457856, 6458013, 6458170, 6458327, 6458484, 6458641, 6458798, 6458955, 6459112, 6459269, 6459426, 6459583, 6459740, 6459897, 6460055, 6460212, 6460369, 6460526, 6460683, 6460840, 6460997, 6461154, 6461311, 6461468, 6461625, 6461782, 6461939, 6462096, 6462253, 6462410, 6462567, 6462725, 6462882, 6463039, 6463196, 6463353, 6463510, 6463667, 6463824, 6463981, 6464138, 6464295, 6464453, 6464610, 6464767, 6464924, 6465081, 6465238, 6465395, 6465552, 6465709, 6465866, 6466024, 6466181, 6466338, 6466495, 6466652, 6466809, 6466966, 6467123, 6467280, 6467438, 6467595, 6467752, 6467909, 6468066, 6468223, 6468380, 6468538, 6468695, 6468852, 6469009, 6469166, 6469323, 6469480, 6469638, 6469795, 6469952, 6470109, 6470266, 6470423, 6470580, 6470738, 6470895, 6471052, 6471209, 6471366, 6471523, 6471681, 6471838, 6471995, 6472152, 6472309, 6472467, 6472624, 6472781, 6472938, 6473095, 6473252, 6473410, 6473567, 6473724, 6473881, 6474038, 6474196, 6474353, 6474510, 6474667, 6474824, 6474982, 6475139, 6475296, 6475453, 6475610, 6475768, 6475925, 6476082, 6476239, 6476397, 6476554, 6476711, 6476868, 6477025, 6477183, 6477340, 6477497, 6477654, 6477812, 6477969, 6478126, 6478283, 6478441, 6478598, 6478755, 6478912, 6479070, 6479227, 6479384, 6479541, 6479699, 6479856, 6480013, 6480170, 6480328, 6480485, 6480642, 6480799, 6480957, 6481114, 6481271, 6481428, 6481586, 6481743, 6481900, 6482058, 6482215, 6482372, 6482529, 6482687, 6482844, 6483001, 6483159, 6483316, 6483473, 6483630, 6483788, 6483945, 6484102, 6484260, 6484417, 6484574, 6484732, 6484889, 6485046, 6485203, 6485361, 6485518, 6485675, 6485833, 6485990, 6486147, 6486305, 6486462, 6486619, 6486777, 6486934, 6487091, 6487249, 6487406, 6487563, 6487721, 6487878, 6488035, 6488193, 6488350, 6488507, 6488665, 6488822, 6488980, 6489137, 6489294, 6489452, 6489609, 6489766, 6489924, 6490081, 6490238, 6490396, 6490553, 6490711, 6490868, 6491025, 6491183, 6491340, 6491497, 6491655, 6491812, 6491970, 6492127, 6492284, 6492442, 6492599, 6492756, 6492914, 6493071, 6493229, 6493386, 6493543, 6493701, 6493858, 6494016, 6494173, 6494331, 6494488, 6494645, 6494803, 6494960, 6495118, 6495275, 6495432, 6495590, 6495747, 6495905, 6496062, 6496220, 6496377, 6496534, 6496692, 6496849, 6497007, 6497164, 6497322, 6497479, 6497637, 6497794, 6497951, 6498109, 6498266, 6498424, 6498581, 6498739, 6498896, 6499054, 6499211, 6499369, 6499526, 6499683, 6499841, 6499998, 6500156, 6500313, 6500471, 6500628, 6500786, 6500943, 6501101, 6501258, 6501416, 6501573, 6501731, 6501888, 6502046, 6502203, 6502361, 6502518, 6502676, 6502833, 6502991, 6503148, 6503306, 6503463, 6503621, 6503778, 6503936, 6504093, 6504251, 6504408, 6504566, 6504723, 6504881, 6505038, 6505196, 6505353, 6505511, 6505668, 6505826, 6505983, 6506141, 6506299, 6506456, 6506614, 6506771, 6506929, 6507086, 6507244, 6507401, 6507559, 6507716, 6507874, 6508032, 6508189, 6508347, 6508504, 6508662, 6508819, 6508977, 6509134, 6509292, 6509450, 6509607, 6509765, 6509922, 6510080, 6510237, 6510395, 6510553, 6510710, 6510868, 6511025, 6511183, 6511341, 6511498, 6511656, 6511813, 6511971, 6512129, 6512286, 6512444, 6512601, 6512759, 6512917, 6513074, 6513232, 6513389, 6513547, 6513705, 6513862, 6514020, 6514177, 6514335, 6514493, 6514650, 6514808, 6514966, 6515123, 6515281, 6515438, 6515596, 6515754, 6515911, 6516069, 6516227, 6516384, 6516542, 6516700, 6516857, 6517015, 6517173, 6517330, 6517488, 6517646, 6517803, 6517961, 6518119, 6518276, 6518434, 6518592, 6518749, 6518907, 6519065, 6519222, 6519380, 6519538, 6519695, 6519853, 6520011, 6520168, 6520326, 6520484, 6520641, 6520799, 6520957, 6521114, 6521272, 6521430, 6521587, 6521745, 6521903, 6522061, 6522218, 6522376, 6522534, 6522691, 6522849, 6523007, 6523165, 6523322, 6523480, 6523638, 6523795, 6523953, 6524111, 6524269, 6524426, 6524584, 6524742, 6524900, 6525057, 6525215, 6525373, 6525530, 6525688, 6525846, 6526004, 6526161, 6526319, 6526477, 6526635, 6526792, 6526950, 6527108, 6527266, 6527423, 6527581, 6527739, 6527897, 6528055, 6528212, 6528370, 6528528, 6528686, 6528843, 6529001, 6529159, 6529317, 6529475, 6529632, 6529790, 6529948, 6530106, 6530263, 6530421, 6530579, 6530737, 6530895, 6531052, 6531210, 6531368, 6531526, 6531684, 6531841, 6531999, 6532157, 6532315, 6532473, 6532631, 6532788, 6532946, 6533104, 6533262, 6533420, 6533577, 6533735, 6533893, 6534051, 6534209, 6534367, 6534524, 6534682, 6534840, 6534998, 6535156, 6535314, 6535471, 6535629, 6535787, 6535945, 6536103, 6536261, 6536419, 6536576, 6536734, 6536892, 6537050, 6537208, 6537366, 6537524, 6537681, 6537839, 6537997, 6538155, 6538313, 6538471, 6538629, 6538787, 6538944, 6539102, 6539260, 6539418, 6539576, 6539734, 6539892, 6540050, 6540208, 6540365, 6540523, 6540681, 6540839, 6540997, 6541155, 6541313, 6541471, 6541629, 6541787, 6541945, 6542102, 6542260, 6542418, 6542576, 6542734, 6542892, 6543050, 6543208, 6543366, 6543524, 6543682, 6543840, 6543998, 6544156, 6544313, 6544471, 6544629, 6544787, 6544945, 6545103, 6545261, 6545419, 6545577, 6545735, 6545893, 6546051, 6546209, 6546367, 6546525, 6546683, 6546841, 6546999, 6547157, 6547315, 6547473, 6547631, 6547789, 6547946, 6548104, 6548262, 6548420, 6548578, 6548736, 6548894, 6549052, 6549210, 6549368, 6549526, 6549684, 6549842, 6550000, 6550158, 6550316, 6550474, 6550632, 6550790, 6550948, 6551106, 6551264, 6551422, 6551580, 6551738, 6551896, 6552054, 6552212, 6552371, 6552529, 6552687, 6552845, 6553003, 6553161, 6553319, 6553477, 6553635, 6553793, 6553951, 6554109, 6554267, 6554425, 6554583, 6554741, 6554899, 6555057, 6555215, 6555373, 6555531, 6555689, 6555847, 6556006, 6556164, 6556322, 6556480, 6556638, 6556796, 6556954, 6557112, 6557270, 6557428, 6557586, 6557744, 6557902, 6558060, 6558219, 6558377, 6558535, 6558693, 6558851, 6559009, 6559167, 6559325, 6559483, 6559641, 6559800, 6559958, 6560116, 6560274, 6560432, 6560590, 6560748, 6560906, 6561064, 6561223, 6561381, 6561539, 6561697, 6561855, 6562013, 6562171, 6562329, 6562488, 6562646, 6562804, 6562962, 6563120, 6563278, 6563436, 6563594, 6563753, 6563911, 6564069, 6564227, 6564385, 6564543, 6564702, 6564860, 6565018, 6565176, 6565334, 6565492, 6565650, 6565809, 6565967, 6566125, 6566283, 6566441, 6566600, 6566758, 6566916, 6567074, 6567232, 6567390, 6567549, 6567707, 6567865, 6568023, 6568181, 6568340, 6568498, 6568656, 6568814, 6568972, 6569131, 6569289, 6569447, 6569605, 6569763, 6569922, 6570080, 6570238, 6570396, 6570554, 6570713, 6570871, 6571029, 6571187, 6571346, 6571504, 6571662, 6571820, 6571978, 6572137, 6572295, 6572453, 6572611, 6572770, 6572928, 6573086, 6573244, 6573403, 6573561, 6573719, 6573877, 6574036, 6574194, 6574352, 6574510, 6574669, 6574827, 6574985, 6575143, 6575302, 6575460, 6575618, 6575776, 6575935, 6576093, 6576251, 6576410, 6576568, 6576726, 6576884, 6577043, 6577201, 6577359, 6577518, 6577676, 6577834, 6577992, 6578151, 6578309, 6578467, 6578626, 6578784, 6578942, 6579101, 6579259, 6579417, 6579575, 6579734, 6579892, 6580050, 6580209, 6580367, 6580525, 6580684, 6580842, 6581000, 6581159, 6581317, 6581475, 6581634, 6581792, 6581950, 6582109, 6582267, 6582425, 6582584, 6582742, 6582900, 6583059, 6583217, 6583375, 6583534, 6583692, 6583851, 6584009, 6584167, 6584326, 6584484, 6584642, 6584801, 6584959, 6585117, 6585276, 6585434, 6585593, 6585751, 6585909, 6586068, 6586226, 6586384, 6586543, 6586701, 6586860, 6587018, 6587176, 6587335, 6587493, 6587652, 6587810, 6587968, 6588127, 6588285, 6588444, 6588602, 6588760, 6588919, 6589077, 6589236, 6589394, 6589552, 6589711, 6589869, 6590028, 6590186, 6590345, 6590503, 6590661, 6590820, 6590978, 6591137, 6591295, 6591454, 6591612, 6591770, 6591929, 6592087, 6592246, 6592404, 6592563, 6592721, 6592880, 6593038, 6593197, 6593355, 6593513, 6593672, 6593830, 6593989, 6594147, 6594306, 6594464, 6594623, 6594781, 6594940, 6595098, 6595257, 6595415, 6595574, 6595732, 6595891, 6596049, 6596208, 6596366, 6596524, 6596683, 6596841, 6597000, 6597158, 6597317, 6597475, 6597634, 6597792, 6597951, 6598109, 6598268, 6598427, 6598585, 6598744, 6598902, 6599061, 6599219, 6599378, 6599536, 6599695, 6599853, 6600012, 6600170, 6600329, 6600487, 6600646, 6600804, 6600963, 6601121, 6601280, 6601439, 6601597, 6601756, 6601914, 6602073, 6602231, 6602390, 6602548, 6602707, 6602865, 6603024, 6603183, 6603341, 6603500, 6603658, 6603817, 6603975, 6604134, 6604293, 6604451, 6604610, 6604768, 6604927, 6605085, 6605244, 6605403, 6605561, 6605720, 6605878, 6606037, 6606196, 6606354, 6606513, 6606671, 6606830, 6606989, 6607147, 6607306, 6607464, 6607623, 6607782, 6607940, 6608099, 6608257, 6608416, 6608575, 6608733, 6608892, 6609051, 6609209, 6609368, 6609526, 6609685, 6609844, 6610002, 6610161, 6610320, 6610478, 6610637, 6610796, 6610954, 6611113, 6611271, 6611430, 6611589, 6611747, 6611906, 6612065, 6612223, 6612382, 6612541, 6612699, 6612858, 6613017, 6613175, 6613334, 6613493, 6613651, 6613810, 6613969, 6614127, 6614286, 6614445, 6614603, 6614762, 6614921, 6615079, 6615238, 6615397, 6615556, 6615714, 6615873, 6616032, 6616190, 6616349, 6616508, 6616666, 6616825, 6616984, 6617143, 6617301, 6617460, 6617619, 6617777, 6617936, 6618095, 6618254, 6618412, 6618571, 6618730, 6618888, 6619047, 6619206, 6619365, 6619523, 6619682, 6619841, 6620000, 6620158, 6620317, 6620476, 6620635, 6620793, 6620952, 6621111, 6621270, 6621428, 6621587, 6621746, 6621905, 6622063, 6622222, 6622381, 6622540, 6622698, 6622857, 6623016, 6623175, 6623334, 6623492, 6623651, 6623810, 6623969, 6624127, 6624286, 6624445, 6624604, 6624763, 6624921, 6625080, 6625239, 6625398, 6625557, 6625715, 6625874, 6626033, 6626192, 6626351, 6626509, 6626668, 6626827, 6626986, 6627145, 6627303, 6627462, 6627621, 6627780, 6627939, 6628098, 6628256, 6628415, 6628574, 6628733, 6628892, 6629051, 6629209, 6629368, 6629527, 6629686, 6629845, 6630004, 6630162, 6630321, 6630480, 6630639, 6630798, 6630957, 6631116, 6631274, 6631433, 6631592, 6631751, 6631910, 6632069, 6632228, 6632386, 6632545, 6632704, 6632863, 6633022, 6633181, 6633340, 6633499, 6633657, 6633816, 6633975, 6634134, 6634293, 6634452, 6634611, 6634770, 6634929, 6635087, 6635246, 6635405, 6635564, 6635723, 6635882, 6636041, 6636200, 6636359, 6636518, 6636677, 6636835, 6636994, 6637153, 6637312, 6637471, 6637630, 6637789, 6637948, 6638107, 6638266, 6638425, 6638584, 6638743, 6638902, 6639060, 6639219, 6639378, 6639537, 6639696, 6639855, 6640014, 6640173, 6640332, 6640491, 6640650, 6640809, 6640968, 6641127, 6641286, 6641445, 6641604, 6641763, 6641922, 6642081, 6642240, 6642399, 6642558, 6642717, 6642876, 6643035, 6643194, 6643353, 6643511, 6643670, 6643829, 6643988, 6644147, 6644306, 6644465, 6644624, 6644783, 6644942, 6645101, 6645260, 6645419, 6645578, 6645738, 6645897, 6646056, 6646215, 6646374, 6646533, 6646692, 6646851, 6647010, 6647169, 6647328, 6647487, 6647646, 6647805, 6647964, 6648123, 6648282, 6648441, 6648600, 6648759, 6648918, 6649077, 6649236, 6649395, 6649554, 6649713, 6649872, 6650031, 6650191, 6650350, 6650509, 6650668, 6650827, 6650986, 6651145, 6651304, 6651463, 6651622, 6651781, 6651940, 6652099, 6652258, 6652417, 6652577, 6652736, 6652895, 6653054, 6653213, 6653372, 6653531, 6653690, 6653849, 6654008, 6654168, 6654327, 6654486, 6654645, 6654804, 6654963, 6655122, 6655281, 6655440, 6655599, 6655759, 6655918, 6656077, 6656236, 6656395, 6656554, 6656713, 6656872, 6657032, 6657191, 6657350, 6657509, 6657668, 6657827, 6657986, 6658146, 6658305, 6658464, 6658623, 6658782, 6658941, 6659100, 6659260, 6659419, 6659578, 6659737, 6659896, 6660055, 6660215, 6660374, 6660533, 6660692, 6660851, 6661010, 6661170, 6661329, 6661488, 6661647, 6661806, 6661965, 6662125, 6662284, 6662443, 6662602, 6662761, 6662921, 6663080, 6663239, 6663398, 6663557, 6663717, 6663876, 6664035, 6664194, 6664353, 6664513, 6664672, 6664831, 6664990, 6665149, 6665309, 6665468, 6665627, 6665786, 6665946, 6666105, 6666264, 6666423, 6666583, 6666742, 6666901, 6667060, 6667219, 6667379, 6667538, 6667697, 6667856, 6668016, 6668175, 6668334, 6668493, 6668653, 6668812, 6668971, 6669130, 6669290, 6669449, 6669608, 6669768, 6669927, 6670086, 6670245, 6670405, 6670564, 6670723, 6670882, 6671042, 6671201, 6671360, 6671520, 6671679, 6671838, 6671997, 6672157, 6672316, 6672475, 6672635, 6672794, 6672953, 6673112, 6673272, 6673431, 6673590, 6673750, 6673909, 6674068, 6674228, 6674387, 6674546, 6674706, 6674865, 6675024, 6675184, 6675343, 6675502, 6675662, 6675821, 6675980, 6676140, 6676299, 6676458, 6676618, 6676777, 6676936, 6677096, 6677255, 6677414, 6677574, 6677733, 6677892, 6678052, 6678211, 6678370, 6678530, 6678689, 6678848, 6679008, 6679167, 6679327, 6679486, 6679645, 6679805, 6679964, 6680123, 6680283, 6680442, 6680602, 6680761, 6680920, 6681080, 6681239, 6681398, 6681558, 6681717, 6681877, 6682036, 6682195, 6682355, 6682514, 6682674, 6682833, 6682992, 6683152, 6683311, 6683471, 6683630, 6683789, 6683949, 6684108, 6684268, 6684427, 6684587, 6684746, 6684905, 6685065, 6685224, 6685384, 6685543, 6685703, 6685862, 6686021, 6686181, 6686340, 6686500, 6686659, 6686819, 6686978, 6687138, 6687297, 6687456, 6687616, 6687775, 6687935, 6688094, 6688254, 6688413, 6688573, 6688732, 6688892, 6689051, 6689211, 6689370, 6689529, 6689689, 6689848, 6690008, 6690167, 6690327, 6690486, 6690646, 6690805, 6690965, 6691124, 6691284, 6691443, 6691603, 6691762, 6691922, 6692081, 6692241, 6692400, 6692560, 6692719, 6692879, 6693038, 6693198, 6693357, 6693517, 6693676, 6693836, 6693995, 6694155, 6694314, 6694474, 6694634, 6694793, 6694953, 6695112, 6695272, 6695431, 6695591, 6695750, 6695910, 6696069, 6696229, 6696388, 6696548, 6696708, 6696867, 6697027, 6697186, 6697346, 6697505, 6697665, 6697824, 6697984, 6698144, 6698303, 6698463, 6698622, 6698782, 6698941, 6699101, 6699261, 6699420, 6699580, 6699739, 6699899, 6700059, 6700218, 6700378, 6700537, 6700697, 6700856, 6701016, 6701176, 6701335, 6701495, 6701654, 6701814, 6701974, 6702133, 6702293, 6702453, 6702612, 6702772, 6702931, 6703091, 6703251, 6703410, 6703570, 6703729, 6703889, 6704049, 6704208, 6704368, 6704528, 6704687, 6704847, 6705007, 6705166, 6705326, 6705485, 6705645, 6705805, 6705964, 6706124, 6706284, 6706443, 6706603, 6706763, 6706922, 6707082, 6707242, 6707401, 6707561, 6707721, 6707880, 6708040, 6708200, 6708359, 6708519, 6708679, 6708838, 6708998, 6709158, 6709317, 6709477, 6709637, 6709796, 6709956, 6710116, 6710276, 6710435, 6710595, 6710755, 6710914, 6711074, 6711234, 6711393, 6711553, 6711713, 6711873, 6712032, 6712192, 6712352, 6712511, 6712671, 6712831, 6712991, 6713150, 6713310, 6713470, 6713629, 6713789, 6713949, 6714109, 6714268, 6714428, 6714588, 6714748, 6714907, 6715067, 6715227, 6715387, 6715546, 6715706, 6715866, 6716026, 6716185, 6716345, 6716505, 6716665, 6716824, 6716984, 6717144, 6717304, 6717463, 6717623, 6717783, 6717943, 6718103, 6718262, 6718422, 6718582, 6718742, 6718901, 6719061, 6719221, 6719381, 6719541, 6719700, 6719860, 6720020, 6720180, 6720340, 6720499, 6720659, 6720819, 6720979, 6721139, 6721298, 6721458, 6721618, 6721778, 6721938, 6722098, 6722257, 6722417, 6722577, 6722737, 6722897, 6723056, 6723216, 6723376, 6723536, 6723696, 6723856, 6724016, 6724175, 6724335, 6724495, 6724655, 6724815, 6724975, 6725134, 6725294, 6725454, 6725614, 6725774, 6725934, 6726094, 6726253, 6726413, 6726573, 6726733, 6726893, 6727053, 6727213, 6727373, 6727532, 6727692, 6727852, 6728012, 6728172, 6728332, 6728492, 6728652, 6728811, 6728971, 6729131, 6729291, 6729451, 6729611, 6729771, 6729931, 6730091, 6730251, 6730410, 6730570, 6730730, 6730890, 6731050, 6731210, 6731370, 6731530, 6731690, 6731850, 6732010, 6732170, 6732329, 6732489, 6732649, 6732809, 6732969, 6733129, 6733289, 6733449, 6733609, 6733769, 6733929, 6734089, 6734249, 6734409, 6734569, 6734729, 6734889, 6735048, 6735208, 6735368, 6735528, 6735688, 6735848, 6736008, 6736168, 6736328, 6736488, 6736648, 6736808, 6736968, 6737128, 6737288, 6737448, 6737608, 6737768, 6737928, 6738088, 6738248, 6738408, 6738568, 6738728, 6738888, 6739048, 6739208, 6739368, 6739528, 6739688, 6739848, 6740008, 6740168, 6740328, 6740488, 6740648, 6740808, 6740968, 6741128, 6741288, 6741448, 6741608, 6741768, 6741928, 6742088, 6742248, 6742408, 6742568, 6742728, 6742888, 6743048, 6743208, 6743369, 6743529, 6743689, 6743849, 6744009, 6744169, 6744329, 6744489, 6744649, 6744809, 6744969, 6745129, 6745289, 6745449, 6745609, 6745769, 6745929, 6746090, 6746250, 6746410, 6746570, 6746730, 6746890, 6747050, 6747210, 6747370, 6747530, 6747690, 6747850, 6748011, 6748171, 6748331, 6748491, 6748651, 6748811, 6748971, 6749131, 6749291, 6749451, 6749612, 6749772, 6749932, 6750092, 6750252, 6750412, 6750572, 6750732, 6750892, 6751053, 6751213, 6751373, 6751533, 6751693, 6751853, 6752013, 6752174, 6752334, 6752494, 6752654, 6752814, 6752974, 6753134, 6753295, 6753455, 6753615, 6753775, 6753935, 6754095, 6754255, 6754416, 6754576, 6754736, 6754896, 6755056, 6755216, 6755377, 6755537, 6755697, 6755857, 6756017, 6756178, 6756338, 6756498, 6756658, 6756818, 6756978, 6757139, 6757299, 6757459, 6757619, 6757779, 6757940, 6758100, 6758260, 6758420, 6758580, 6758741, 6758901, 6759061, 6759221, 6759381, 6759542, 6759702, 6759862, 6760022, 6760183, 6760343, 6760503, 6760663, 6760823, 6760984, 6761144, 6761304, 6761464, 6761625, 6761785, 6761945, 6762105, 6762266, 6762426, 6762586, 6762746, 6762907, 6763067, 6763227, 6763387, 6763548, 6763708, 6763868, 6764028, 6764189, 6764349, 6764509, 6764669, 6764830, 6764990, 6765150, 6765311, 6765471, 6765631, 6765791, 6765952, 6766112, 6766272, 6766433, 6766593, 6766753, 6766913, 6767074, 6767234, 6767394, 6767555, 6767715, 6767875, 6768035, 6768196, 6768356, 6768516, 6768677, 6768837, 6768997, 6769158, 6769318, 6769478, 6769639, 6769799, 6769959, 6770120, 6770280, 6770440, 6770601, 6770761, 6770921, 6771082, 6771242, 6771402, 6771563, 6771723, 6771883, 6772044, 6772204, 6772364, 6772525, 6772685, 6772845, 6773006, 6773166, 6773326, 6773487, 6773647, 6773808, 6773968, 6774128, 6774289, 6774449, 6774609, 6774770, 6774930, 6775091, 6775251, 6775411, 6775572, 6775732, 6775892, 6776053, 6776213, 6776374, 6776534, 6776694, 6776855, 6777015, 6777176, 6777336, 6777496, 6777657, 6777817, 6777978, 6778138, 6778299, 6778459, 6778619, 6778780, 6778940, 6779101, 6779261, 6779421, 6779582, 6779742, 6779903, 6780063, 6780224, 6780384, 6780544, 6780705, 6780865, 6781026, 6781186, 6781347, 6781507, 6781668, 6781828, 6781988, 6782149, 6782309, 6782470, 6782630, 6782791, 6782951, 6783112, 6783272, 6783433, 6783593, 6783754, 6783914, 6784075, 6784235, 6784395, 6784556, 6784716, 6784877, 6785037, 6785198, 6785358, 6785519, 6785679, 6785840, 6786000, 6786161, 6786321, 6786482, 6786642, 6786803, 6786963, 6787124, 6787284, 6787445, 6787605, 6787766, 6787926, 6788087, 6788247, 6788408, 6788568, 6788729, 6788890, 6789050, 6789211, 6789371, 6789532, 6789692, 6789853, 6790013, 6790174, 6790334, 6790495, 6790655, 6790816, 6790977, 6791137, 6791298, 6791458, 6791619, 6791779, 6791940, 6792100, 6792261, 6792422, 6792582, 6792743, 6792903, 6793064, 6793224, 6793385, 6793546, 6793706, 6793867, 6794027, 6794188, 6794348, 6794509, 6794670, 6794830, 6794991, 6795151, 6795312, 6795473, 6795633, 6795794, 6795954, 6796115, 6796276, 6796436, 6796597, 6796757, 6796918, 6797079, 6797239, 6797400, 6797560, 6797721, 6797882, 6798042, 6798203, 6798364, 6798524, 6798685, 6798845, 6799006, 6799167, 6799327, 6799488, 6799649, 6799809, 6799970, 6800131, 6800291, 6800452, 6800612, 6800773, 6800934, 6801094, 6801255, 6801416, 6801576, 6801737, 6801898, 6802058, 6802219, 6802380, 6802540, 6802701, 6802862, 6803022, 6803183, 6803344, 6803504, 6803665, 6803826, 6803986, 6804147, 6804308, 6804469, 6804629, 6804790, 6804951, 6805111, 6805272, 6805433, 6805593, 6805754, 6805915, 6806076, 6806236, 6806397, 6806558, 6806718, 6806879, 6807040, 6807201, 6807361, 6807522, 6807683, 6807843, 6808004, 6808165, 6808326, 6808486, 6808647, 6808808, 6808969, 6809129, 6809290, 6809451, 6809612, 6809772, 6809933, 6810094, 6810255, 6810415, 6810576, 6810737, 6810898, 6811058, 6811219, 6811380, 6811541, 6811701, 6811862, 6812023, 6812184, 6812344, 6812505, 6812666, 6812827, 6812988, 6813148, 6813309, 6813470, 6813631, 6813791, 6813952, 6814113, 6814274, 6814435, 6814595, 6814756, 6814917, 6815078, 6815239, 6815399, 6815560, 6815721, 6815882, 6816043, 6816204, 6816364, 6816525, 6816686, 6816847, 6817008, 6817168, 6817329, 6817490, 6817651, 6817812, 6817973, 6818133, 6818294, 6818455, 6818616, 6818777, 6818938, 6819098, 6819259, 6819420, 6819581, 6819742, 6819903, 6820064, 6820224, 6820385, 6820546, 6820707, 6820868, 6821029, 6821190, 6821350, 6821511, 6821672, 6821833, 6821994, 6822155, 6822316, 6822477, 6822637, 6822798, 6822959, 6823120, 6823281, 6823442, 6823603, 6823764, 6823925, 6824086, 6824246, 6824407, 6824568, 6824729, 6824890, 6825051, 6825212, 6825373, 6825534, 6825695, 6825855, 6826016, 6826177, 6826338, 6826499, 6826660, 6826821, 6826982, 6827143, 6827304, 6827465, 6827626, 6827787, 6827948, 6828108, 6828269, 6828430, 6828591, 6828752, 6828913, 6829074, 6829235, 6829396, 6829557, 6829718, 6829879, 6830040, 6830201, 6830362, 6830523, 6830684, 6830845, 6831006, 6831167, 6831328, 6831489, 6831650, 6831811, 6831972, 6832133, 6832294, 6832455, 6832616, 6832776, 6832937, 6833098, 6833259, 6833420, 6833581, 6833742, 6833903, 6834064, 6834225, 6834386, 6834547, 6834708, 6834870, 6835031, 6835192, 6835353, 6835514, 6835675, 6835836, 6835997, 6836158, 6836319, 6836480, 6836641, 6836802, 6836963, 6837124, 6837285, 6837446, 6837607, 6837768, 6837929, 6838090, 6838251, 6838412, 6838573, 6838734, 6838895, 6839056, 6839217, 6839379, 6839540, 6839701, 6839862, 6840023, 6840184, 6840345, 6840506, 6840667, 6840828, 6840989, 6841150, 6841311, 6841472, 6841634, 6841795, 6841956, 6842117, 6842278, 6842439, 6842600, 6842761, 6842922, 6843083, 6843244, 6843406, 6843567, 6843728, 6843889, 6844050, 6844211, 6844372, 6844533, 6844694, 6844856, 6845017, 6845178, 6845339, 6845500, 6845661, 6845822, 6845983, 6846145, 6846306, 6846467, 6846628, 6846789, 6846950, 6847111, 6847273, 6847434, 6847595, 6847756, 6847917, 6848078, 6848239, 6848401, 6848562, 6848723, 6848884, 6849045, 6849206, 6849368, 6849529, 6849690, 6849851, 6850012, 6850173, 6850335, 6850496, 6850657, 6850818, 6850979, 6851140, 6851302, 6851463, 6851624, 6851785, 6851946, 6852108, 6852269, 6852430, 6852591, 6852752, 6852914, 6853075, 6853236, 6853397, 6853558, 6853720, 6853881, 6854042, 6854203, 6854364, 6854526, 6854687, 6854848, 6855009, 6855171, 6855332, 6855493, 6855654, 6855816, 6855977, 6856138, 6856299, 6856460, 6856622, 6856783, 6856944, 6857105, 6857267, 6857428, 6857589, 6857750, 6857912, 6858073, 6858234, 6858395, 6858557, 6858718, 6858879, 6859041, 6859202, 6859363, 6859524, 6859686, 6859847, 6860008, 6860169, 6860331, 6860492, 6860653, 6860815, 6860976, 6861137, 6861298, 6861460, 6861621, 6861782, 6861944, 6862105, 6862266, 6862428, 6862589, 6862750, 6862911, 6863073, 6863234, 6863395, 6863557, 6863718, 6863879, 6864041, 6864202, 6864363, 6864525, 6864686, 6864847, 6865009, 6865170, 6865331, 6865493, 6865654, 6865815, 6865977, 6866138, 6866299, 6866461, 6866622, 6866783, 6866945, 6867106, 6867267, 6867429, 6867590, 6867752, 6867913, 6868074, 6868236, 6868397, 6868558, 6868720, 6868881, 6869042, 6869204, 6869365, 6869527, 6869688, 6869849, 6870011, 6870172, 6870333, 6870495, 6870656, 6870818, 6870979, 6871140, 6871302, 6871463, 6871625, 6871786, 6871947, 6872109, 6872270, 6872432, 6872593, 6872754, 6872916, 6873077, 6873239, 6873400, 6873562, 6873723, 6873884, 6874046, 6874207, 6874369, 6874530, 6874692, 6874853, 6875014, 6875176, 6875337, 6875499, 6875660, 6875822, 6875983, 6876145, 6876306, 6876467, 6876629, 6876790, 6876952, 6877113, 6877275, 6877436, 6877598, 6877759, 6877921, 6878082, 6878244, 6878405, 6878566, 6878728, 6878889, 6879051, 6879212, 6879374, 6879535, 6879697, 6879858, 6880020, 6880181, 6880343, 6880504, 6880666, 6880827, 6880989, 6881150, 6881312, 6881473, 6881635, 6881796, 6881958, 6882119, 6882281, 6882442, 6882604, 6882765, 6882927, 6883088, 6883250, 6883411, 6883573, 6883735, 6883896, 6884058, 6884219, 6884381, 6884542, 6884704, 6884865, 6885027, 6885188, 6885350, 6885511, 6885673, 6885835, 6885996, 6886158, 6886319, 6886481, 6886642, 6886804, 6886965, 6887127, 6887289, 6887450, 6887612, 6887773, 6887935, 6888096, 6888258, 6888420, 6888581, 6888743, 6888904, 6889066, 6889228, 6889389, 6889551, 6889712, 6889874, 6890035, 6890197, 6890359, 6890520, 6890682, 6890843, 6891005, 6891167, 6891328, 6891490, 6891652, 6891813, 6891975, 6892136, 6892298, 6892460, 6892621, 6892783, 6892944, 6893106, 6893268, 6893429, 6893591, 6893753, 6893914, 6894076, 6894238, 6894399, 6894561, 6894722, 6894884, 6895046, 6895207, 6895369, 6895531, 6895692, 6895854, 6896016, 6896177, 6896339, 6896501, 6896662, 6896824, 6896986, 6897147, 6897309, 6897471, 6897632, 6897794, 6897956, 6898117, 6898279, 6898441, 6898602, 6898764, 6898926, 6899088, 6899249, 6899411, 6899573, 6899734, 6899896, 6900058, 6900219, 6900381, 6900543, 6900705, 6900866, 6901028, 6901190, 6901351, 6901513, 6901675, 6901837, 6901998, 6902160, 6902322, 6902483, 6902645, 6902807, 6902969, 6903130, 6903292, 6903454, 6903616, 6903777, 6903939, 6904101, 6904263, 6904424, 6904586, 6904748, 6904910, 6905071, 6905233, 6905395, 6905557, 6905718, 6905880, 6906042, 6906204, 6906365, 6906527, 6906689, 6906851, 6907012, 6907174, 6907336, 6907498, 6907660, 6907821, 6907983, 6908145, 6908307, 6908469, 6908630, 6908792, 6908954, 6909116, 6909277, 6909439, 6909601, 6909763, 6909925, 6910087, 6910248, 6910410, 6910572, 6910734, 6910896, 6911057, 6911219, 6911381, 6911543, 6911705, 6911867, 6912028, 6912190, 6912352, 6912514, 6912676, 6912837, 6912999, 6913161, 6913323, 6913485, 6913647, 6913809, 6913970, 6914132, 6914294, 6914456, 6914618, 6914780, 6914942, 6915103, 6915265, 6915427, 6915589, 6915751, 6915913, 6916075, 6916236, 6916398, 6916560, 6916722, 6916884, 6917046, 6917208, 6917370, 6917531, 6917693, 6917855, 6918017, 6918179, 6918341, 6918503, 6918665, 6918827, 6918989, 6919150, 6919312, 6919474, 6919636, 6919798, 6919960, 6920122, 6920284, 6920446, 6920608, 6920770, 6920931, 6921093, 6921255, 6921417, 6921579, 6921741, 6921903, 6922065, 6922227, 6922389, 6922551, 6922713, 6922875, 6923037, 6923199, 6923361, 6923522, 6923684, 6923846, 6924008, 6924170, 6924332, 6924494, 6924656, 6924818, 6924980, 6925142, 6925304, 6925466, 6925628, 6925790, 6925952, 6926114, 6926276, 6926438, 6926600, 6926762, 6926924, 6927086, 6927248, 6927410, 6927572, 6927734, 6927896, 6928058, 6928220, 6928382, 6928544, 6928706, 6928868, 6929030, 6929192, 6929354, 6929516, 6929678, 6929840, 6930002, 6930164, 6930326, 6930488, 6930650, 6930812, 6930974, 6931136, 6931298, 6931460, 6931622, 6931784, 6931946, 6932108, 6932270, 6932432, 6932594, 6932756, 6932918, 6933081, 6933243, 6933405, 6933567, 6933729, 6933891, 6934053, 6934215, 6934377, 6934539, 6934701, 6934863, 6935025, 6935187, 6935349, 6935511, 6935674, 6935836, 6935998, 6936160, 6936322, 6936484, 6936646, 6936808, 6936970, 6937132, 6937294, 6937457, 6937619, 6937781, 6937943, 6938105, 6938267, 6938429, 6938591, 6938753, 6938915, 6939078, 6939240, 6939402, 6939564, 6939726, 6939888, 6940050, 6940212, 6940375, 6940537, 6940699, 6940861, 6941023, 6941185, 6941347, 6941509, 6941672, 6941834, 6941996, 6942158, 6942320, 6942482, 6942645, 6942807, 6942969, 6943131, 6943293, 6943455, 6943617, 6943780, 6943942, 6944104, 6944266, 6944428, 6944590, 6944753, 6944915, 6945077, 6945239, 6945401, 6945564, 6945726, 6945888, 6946050, 6946212, 6946374, 6946537, 6946699, 6946861, 6947023, 6947185, 6947348, 6947510, 6947672, 6947834, 6947996, 6948159, 6948321, 6948483, 6948645, 6948808, 6948970, 6949132, 6949294, 6949456, 6949619, 6949781, 6949943, 6950105, 6950268, 6950430, 6950592, 6950754, 6950917, 6951079, 6951241, 6951403, 6951565, 6951728, 6951890, 6952052, 6952214, 6952377, 6952539, 6952701, 6952864, 6953026, 6953188, 6953350, 6953513, 6953675, 6953837, 6953999, 6954162, 6954324, 6954486, 6954648, 6954811, 6954973, 6955135, 6955298, 6955460, 6955622, 6955784, 6955947, 6956109, 6956271, 6956434, 6956596, 6956758, 6956921, 6957083, 6957245, 6957407, 6957570, 6957732, 6957894, 6958057, 6958219, 6958381, 6958544, 6958706, 6958868, 6959031, 6959193, 6959355, 6959518, 6959680, 6959842, 6960005, 6960167, 6960329, 6960492, 6960654, 6960816, 6960979, 6961141, 6961303, 6961466, 6961628, 6961790, 6961953, 6962115, 6962277, 6962440, 6962602, 6962765, 6962927, 6963089, 6963252, 6963414, 6963576, 6963739, 6963901, 6964064, 6964226, 6964388, 6964551, 6964713, 6964875, 6965038, 6965200, 6965363, 6965525, 6965687, 6965850, 6966012, 6966175, 6966337, 6966499, 6966662, 6966824, 6966987, 6967149, 6967311, 6967474, 6967636, 6967799, 6967961, 6968124, 6968286, 6968448, 6968611, 6968773, 6968936, 6969098, 6969261, 6969423, 6969585, 6969748, 6969910, 6970073, 6970235, 6970398, 6970560, 6970723, 6970885, 6971047, 6971210, 6971372, 6971535, 6971697, 6971860, 6972022, 6972185, 6972347, 6972510, 6972672, 6972835, 6972997, 6973159, 6973322, 6973484, 6973647, 6973809, 6973972, 6974134, 6974297, 6974459, 6974622, 6974784, 6974947, 6975109, 6975272, 6975434, 6975597, 6975759, 6975922, 6976084, 6976247, 6976409, 6976572, 6976734, 6976897, 6977059, 6977222, 6977384, 6977547, 6977709, 6977872, 6978034, 6978197, 6978360, 6978522, 6978685, 6978847, 6979010, 6979172, 6979335, 6979497, 6979660, 6979822, 6979985, 6980147, 6980310, 6980473, 6980635, 6980798, 6980960, 6981123, 6981285, 6981448, 6981610, 6981773, 6981936, 6982098, 6982261, 6982423, 6982586, 6982748, 6982911, 6983074, 6983236, 6983399, 6983561, 6983724, 6983887, 6984049, 6984212, 6984374, 6984537, 6984700, 6984862, 6985025, 6985187, 6985350, 6985513, 6985675, 6985838, 6986000, 6986163, 6986326, 6986488, 6986651, 6986813, 6986976, 6987139, 6987301, 6987464, 6987627, 6987789, 6987952, 6988114, 6988277, 6988440, 6988602, 6988765, 6988928, 6989090, 6989253, 6989416, 6989578, 6989741, 6989904, 6990066, 6990229, 6990391, 6990554, 6990717, 6990879, 6991042, 6991205, 6991367, 6991530, 6991693, 6991855, 6992018, 6992181, 6992343, 6992506, 6992669, 6992832, 6992994, 6993157, 6993320, 6993482, 6993645, 6993808, 6993970, 6994133, 6994296, 6994458, 6994621, 6994784, 6994947, 6995109, 6995272, 6995435, 6995597, 6995760, 6995923, 6996086, 6996248, 6996411, 6996574, 6996736, 6996899, 6997062, 6997225, 6997387, 6997550, 6997713, 6997876, 6998038, 6998201, 6998364, 6998527, 6998689, 6998852, 6999015, 6999177, 6999340, 6999503, 6999666, 6999829, 6999991, 7000154, 7000317, 7000480, 7000642, 7000805, 7000968, 7001131, 7001293, 7001456, 7001619, 7001782, 7001944, 7002107, 7002270, 7002433, 7002596, 7002758, 7002921, 7003084, 7003247, 7003410, 7003572, 7003735, 7003898, 7004061, 7004224, 7004386, 7004549, 7004712, 7004875, 7005038, 7005200, 7005363, 7005526, 7005689, 7005852, 7006015, 7006177, 7006340, 7006503, 7006666, 7006829, 7006991, 7007154, 7007317, 7007480, 7007643, 7007806, 7007969, 7008131, 7008294, 7008457, 7008620, 7008783, 7008946, 7009108, 7009271, 7009434, 7009597, 7009760, 7009923, 7010086, 7010248, 7010411, 7010574, 7010737, 7010900, 7011063, 7011226, 7011389, 7011551, 7011714, 7011877, 7012040, 7012203, 7012366, 7012529, 7012692, 7012855, 7013017, 7013180, 7013343, 7013506, 7013669, 7013832, 7013995, 7014158, 7014321, 7014484, 7014647, 7014809, 7014972, 7015135, 7015298, 7015461, 7015624, 7015787, 7015950, 7016113, 7016276, 7016439, 7016602, 7016765, 7016927, 7017090, 7017253, 7017416, 7017579, 7017742, 7017905, 7018068, 7018231, 7018394, 7018557, 7018720, 7018883, 7019046, 7019209, 7019372, 7019535, 7019698, 7019861, 7020024, 7020187, 7020350, 7020513, 7020676, 7020839, 7021001, 7021164, 7021327, 7021490, 7021653, 7021816, 7021979, 7022142, 7022305, 7022468, 7022631, 7022794, 7022957, 7023120, 7023283, 7023446, 7023609, 7023772, 7023935, 7024098, 7024261, 7024424, 7024587, 7024751, 7024914, 7025077, 7025240, 7025403, 7025566, 7025729, 7025892, 7026055, 7026218, 7026381, 7026544, 7026707, 7026870, 7027033, 7027196, 7027359, 7027522, 7027685, 7027848, 7028011, 7028174, 7028337, 7028500, 7028663, 7028827, 7028990, 7029153, 7029316, 7029479, 7029642, 7029805, 7029968, 7030131, 7030294, 7030457, 7030620, 7030783, 7030947, 7031110, 7031273, 7031436, 7031599, 7031762, 7031925, 7032088, 7032251, 7032414, 7032577, 7032741, 7032904, 7033067, 7033230, 7033393, 7033556, 7033719, 7033882, 7034045, 7034209, 7034372, 7034535, 7034698, 7034861, 7035024, 7035187, 7035350, 7035514, 7035677, 7035840, 7036003, 7036166, 7036329, 7036492, 7036656, 7036819, 7036982, 7037145, 7037308, 7037471, 7037635, 7037798, 7037961, 7038124, 7038287, 7038450, 7038613, 7038777, 7038940, 7039103, 7039266, 7039429, 7039593, 7039756, 7039919, 7040082, 7040245, 7040408, 7040572, 7040735, 7040898, 7041061, 7041224, 7041388, 7041551, 7041714, 7041877, 7042040, 7042204, 7042367, 7042530, 7042693, 7042856, 7043020, 7043183, 7043346, 7043509, 7043673, 7043836, 7043999, 7044162, 7044325, 7044489, 7044652, 7044815, 7044978, 7045142, 7045305, 7045468, 7045631, 7045795, 7045958, 7046121, 7046284, 7046448, 7046611, 7046774, 7046937, 7047101, 7047264, 7047427, 7047590, 7047754, 7047917, 7048080, 7048243, 7048407, 7048570, 7048733, 7048896, 7049060, 7049223, 7049386, 7049550, 7049713, 7049876, 7050039, 7050203, 7050366, 7050529, 7050693, 7050856, 7051019, 7051183, 7051346, 7051509, 7051672, 7051836, 7051999, 7052162, 7052326, 7052489, 7052652, 7052816, 7052979, 7053142, 7053306, 7053469, 7053632, 7053796, 7053959, 7054122, 7054286, 7054449, 7054612, 7054776, 7054939, 7055102, 7055266, 7055429, 7055592, 7055756, 7055919, 7056082, 7056246, 7056409, 7056572, 7056736, 7056899, 7057062, 7057226, 7057389, 7057553, 7057716, 7057879, 7058043, 7058206, 7058369, 7058533, 7058696, 7058860, 7059023, 7059186, 7059350, 7059513, 7059676, 7059840, 7060003, 7060167, 7060330, 7060493, 7060657, 7060820, 7060984, 7061147, 7061310, 7061474, 7061637, 7061801, 7061964, 7062127, 7062291, 7062454, 7062618, 7062781, 7062945, 7063108, 7063271, 7063435, 7063598, 7063762, 7063925, 7064089, 7064252, 7064415, 7064579, 7064742, 7064906, 7065069, 7065233, 7065396, 7065560, 7065723, 7065887, 7066050, 7066213, 7066377, 7066540, 7066704, 7066867, 7067031, 7067194, 7067358, 7067521, 7067685, 7067848, 7068012, 7068175, 7068339, 7068502, 7068666, 7068829, 7068992, 7069156, 7069319, 7069483, 7069646, 7069810, 7069973, 7070137, 7070300, 7070464, 7070627, 7070791, 7070954, 7071118, 7071282, 7071445, 7071609, 7071772, 7071936, 7072099, 7072263, 7072426, 7072590, 7072753, 7072917, 7073080, 7073244, 7073407, 7073571, 7073734, 7073898, 7074061, 7074225, 7074389, 7074552, 7074716, 7074879, 7075043, 7075206, 7075370, 7075533, 7075697, 7075861, 7076024, 7076188, 7076351, 7076515, 7076678, 7076842, 7077006, 7077169, 7077333, 7077496, 7077660, 7077823, 7077987, 7078151, 7078314, 7078478, 7078641, 7078805, 7078969, 7079132, 7079296, 7079459, 7079623, 7079787, 7079950, 7080114, 7080277, 7080441, 7080605, 7080768, 7080932, 7081095, 7081259, 7081423, 7081586, 7081750, 7081913, 7082077, 7082241, 7082404, 7082568, 7082732, 7082895, 7083059, 7083223, 7083386, 7083550, 7083713, 7083877, 7084041, 7084204, 7084368, 7084532, 7084695, 7084859, 7085023, 7085186, 7085350, 7085514, 7085677, 7085841, 7086005, 7086168, 7086332, 7086496, 7086659, 7086823, 7086987, 7087150, 7087314, 7087478, 7087641, 7087805, 7087969, 7088133, 7088296, 7088460, 7088624, 7088787, 7088951, 7089115, 7089278, 7089442, 7089606, 7089770, 7089933, 7090097, 7090261, 7090424, 7090588, 7090752, 7090916, 7091079, 7091243, 7091407, 7091570, 7091734, 7091898, 7092062, 7092225, 7092389, 7092553, 7092717, 7092880, 7093044, 7093208, 7093372, 7093535, 7093699, 7093863, 7094027, 7094190, 7094354, 7094518, 7094682, 7094845, 7095009, 7095173, 7095337, 7095500, 7095664, 7095828, 7095992, 7096155, 7096319, 7096483, 7096647, 7096811, 7096974, 7097138, 7097302, 7097466, 7097630, 7097793, 7097957, 7098121, 7098285, 7098448, 7098612, 7098776, 7098940, 7099104, 7099268, 7099431, 7099595, 7099759, 7099923, 7100087, 7100250, 7100414, 7100578, 7100742, 7100906, 7101070, 7101233, 7101397, 7101561, 7101725, 7101889, 7102053, 7102216, 7102380, 7102544, 7102708, 7102872, 7103036, 7103199, 7103363, 7103527, 7103691, 7103855, 7104019, 7104183, 7104346, 7104510, 7104674, 7104838, 7105002, 7105166, 7105330, 7105493, 7105657, 7105821, 7105985, 7106149, 7106313, 7106477, 7106641, 7106805, 7106968, 7107132, 7107296, 7107460, 7107624, 7107788, 7107952, 7108116, 7108280, 7108444, 7108607, 7108771, 7108935, 7109099, 7109263, 7109427, 7109591, 7109755, 7109919, 7110083, 7110247, 7110411, 7110574, 7110738, 7110902, 7111066, 7111230, 7111394, 7111558, 7111722, 7111886, 7112050, 7112214, 7112378, 7112542, 7112706, 7112870, 7113034, 7113198, 7113361, 7113525, 7113689, 7113853, 7114017, 7114181, 7114345, 7114509, 7114673, 7114837, 7115001, 7115165, 7115329, 7115493, 7115657, 7115821, 7115985, 7116149, 7116313, 7116477, 7116641, 7116805, 7116969, 7117133, 7117297, 7117461, 7117625, 7117789, 7117953, 7118117, 7118281, 7118445, 7118609, 7118773, 7118937, 7119101, 7119265, 7119429, 7119593, 7119757, 7119921, 7120085, 7120249, 7120413, 7120577, 7120741, 7120905, 7121069, 7121233, 7121397, 7121562, 7121726, 7121890, 7122054, 7122218, 7122382, 7122546, 7122710, 7122874, 7123038, 7123202, 7123366, 7123530, 7123694, 7123858, 7124022, 7124186, 7124351, 7124515, 7124679, 7124843, 7125007, 7125171, 7125335, 7125499, 7125663, 7125827, 7125991, 7126155, 7126320, 7126484, 7126648, 7126812, 7126976, 7127140, 7127304, 7127468, 7127632, 7127796, 7127961, 7128125, 7128289, 7128453, 7128617, 7128781, 7128945, 7129109, 7129274, 7129438, 7129602, 7129766, 7129930, 7130094, 7130258, 7130422, 7130587, 7130751, 7130915, 7131079, 7131243, 7131407, 7131571, 7131736, 7131900, 7132064, 7132228, 7132392, 7132556, 7132721, 7132885, 7133049, 7133213, 7133377, 7133541, 7133706, 7133870, 7134034, 7134198, 7134362, 7134526, 7134691, 7134855, 7135019, 7135183, 7135347, 7135512, 7135676, 7135840, 7136004, 7136168, 7136333, 7136497, 7136661, 7136825, 7136989, 7137154, 7137318, 7137482, 7137646, 7137810, 7137975, 7138139, 7138303, 7138467, 7138632, 7138796, 7138960, 7139124, 7139288, 7139453, 7139617, 7139781, 7139945, 7140110, 7140274, 7140438, 7140602, 7140767, 7140931, 7141095, 7141259, 7141424, 7141588, 7141752, 7141916, 7142081, 7142245, 7142409, 7142573, 7142738, 7142902, 7143066, 7143231, 7143395, 7143559, 7143723, 7143888, 7144052, 7144216, 7144381, 7144545, 7144709, 7144873, 7145038, 7145202, 7145366, 7145531, 7145695, 7145859, 7146023, 7146188, 7146352, 7146516, 7146681, 7146845, 7147009, 7147174, 7147338, 7147502, 7147667, 7147831, 7147995, 7148160, 7148324, 7148488, 7148653, 7148817, 7148981, 7149146, 7149310, 7149474, 7149639, 7149803, 7149967, 7150132, 7150296, 7150460, 7150625, 7150789, 7150953, 7151118, 7151282, 7151446, 7151611, 7151775, 7151940, 7152104, 7152268, 7152433, 7152597, 7152761, 7152926, 7153090, 7153254, 7153419, 7153583, 7153748, 7153912, 7154076, 7154241, 7154405, 7154570, 7154734, 7154898, 7155063, 7155227, 7155392, 7155556, 7155720, 7155885, 7156049, 7156214, 7156378, 7156542, 7156707, 7156871, 7157036, 7157200, 7157365, 7157529, 7157693, 7157858, 7158022, 7158187, 7158351, 7158516, 7158680, 7158844, 7159009, 7159173, 7159338, 7159502, 7159667, 7159831, 7159996, 7160160, 7160324, 7160489, 7160653, 7160818, 7160982, 7161147, 7161311, 7161476, 7161640, 7161805, 7161969, 7162134, 7162298, 7162462, 7162627, 7162791, 7162956, 7163120, 7163285, 7163449, 7163614, 7163778, 7163943, 7164107, 7164272, 7164436, 7164601, 7164765, 7164930, 7165094, 7165259, 7165423, 7165588, 7165752, 7165917, 7166081, 7166246, 7166410, 7166575, 7166739, 7166904, 7167069, 7167233, 7167398, 7167562, 7167727, 7167891, 7168056, 7168220, 7168385, 7168549, 7168714, 7168878, 7169043, 7169208, 7169372, 7169537, 7169701, 7169866, 7170030, 7170195, 7170359, 7170524, 7170689, 7170853, 7171018, 7171182, 7171347, 7171511, 7171676, 7171841, 7172005, 7172170, 7172334, 7172499, 7172663, 7172828, 7172993, 7173157, 7173322, 7173486, 7173651, 7173816, 7173980, 7174145, 7174309, 7174474, 7174639, 7174803, 7174968, 7175132, 7175297, 7175462, 7175626, 7175791, 7175955, 7176120, 7176285, 7176449, 7176614, 7176779, 7176943, 7177108, 7177272, 7177437, 7177602, 7177766, 7177931, 7178096, 7178260, 7178425, 7178590, 7178754, 7178919, 7179084, 7179248, 7179413, 7179578, 7179742, 7179907, 7180072, 7180236, 7180401, 7180566, 7180730, 7180895, 7181060, 7181224, 7181389, 7181554, 7181718, 7181883, 7182048, 7182212, 7182377, 7182542, 7182706, 7182871, 7183036, 7183200, 7183365, 7183530, 7183695, 7183859, 7184024, 7184189, 7184353, 7184518, 7184683, 7184847, 7185012, 7185177, 7185342, 7185506, 7185671, 7185836, 7186001, 7186165, 7186330, 7186495, 7186659, 7186824, 7186989, 7187154, 7187318, 7187483, 7187648, 7187813, 7187977, 7188142, 7188307, 7188472, 7188636, 7188801, 7188966, 7189131, 7189295, 7189460, 7189625, 7189790, 7189954, 7190119, 7190284, 7190449, 7190614, 7190778, 7190943, 7191108, 7191273, 7191437, 7191602, 7191767, 7191932, 7192097, 7192261, 7192426, 7192591, 7192756, 7192921, 7193085, 7193250, 7193415, 7193580, 7193745, 7193909, 7194074, 7194239, 7194404, 7194569, 7194733, 7194898, 7195063, 7195228, 7195393, 7195558, 7195722, 7195887, 7196052, 7196217, 7196382, 7196547, 7196711, 7196876, 7197041, 7197206, 7197371, 7197536, 7197700, 7197865, 7198030, 7198195, 7198360, 7198525, 7198690, 7198854, 7199019, 7199184, 7199349, 7199514, 7199679, 7199844, 7200009, 7200173, 7200338, 7200503, 7200668, 7200833, 7200998, 7201163, 7201328, 7201492, 7201657, 7201822, 7201987, 7202152, 7202317, 7202482, 7202647, 7202812, 7202977, 7203141, 7203306, 7203471, 7203636, 7203801, 7203966, 7204131, 7204296, 7204461, 7204626, 7204791, 7204956, 7205120, 7205285, 7205450, 7205615, 7205780, 7205945, 7206110, 7206275, 7206440, 7206605, 7206770, 7206935, 7207100, 7207265, 7207430, 7207595, 7207760, 7207925, 7208089, 7208254, 7208419, 7208584, 7208749, 7208914, 7209079, 7209244, 7209409, 7209574, 7209739, 7209904, 7210069, 7210234, 7210399, 7210564, 7210729, 7210894, 7211059, 7211224, 7211389, 7211554, 7211719, 7211884, 7212049, 7212214, 7212379, 7212544, 7212709, 7212874, 7213039, 7213204, 7213369, 7213534, 7213699, 7213864, 7214029, 7214194, 7214359, 7214524, 7214689, 7214854, 7215019, 7215184, 7215349, 7215514, 7215679, 7215845, 7216010, 7216175, 7216340, 7216505, 7216670, 7216835, 7217000, 7217165, 7217330, 7217495, 7217660, 7217825, 7217990, 7218155, 7218320, 7218485, 7218650, 7218816, 7218981, 7219146, 7219311, 7219476, 7219641, 7219806, 7219971, 7220136, 7220301, 7220466, 7220631, 7220797, 7220962, 7221127, 7221292, 7221457, 7221622, 7221787, 7221952, 7222117, 7222282, 7222448, 7222613, 7222778, 7222943, 7223108, 7223273, 7223438, 7223603, 7223769, 7223934, 7224099, 7224264, 7224429, 7224594, 7224759, 7224924, 7225090, 7225255, 7225420, 7225585, 7225750, 7225915, 7226080, 7226246, 7226411, 7226576, 7226741, 7226906, 7227071, 7227237, 7227402, 7227567, 7227732, 7227897, 7228062, 7228228, 7228393, 7228558, 7228723, 7228888, 7229053, 7229219, 7229384, 7229549, 7229714, 7229879, 7230045, 7230210, 7230375, 7230540, 7230705, 7230871, 7231036, 7231201, 7231366, 7231531, 7231697, 7231862, 7232027, 7232192, 7232357, 7232523, 7232688, 7232853, 7233018, 7233184, 7233349, 7233514, 7233679, 7233844, 7234010, 7234175, 7234340, 7234505, 7234671, 7234836, 7235001, 7235166, 7235332, 7235497, 7235662, 7235827, 7235993, 7236158, 7236323, 7236488, 7236654, 7236819, 7236984, 7237149, 7237315, 7237480, 7237645, 7237811, 7237976, 7238141, 7238306, 7238472, 7238637, 7238802, 7238968, 7239133, 7239298, 7239463, 7239629, 7239794, 7239959, 7240125, 7240290, 7240455, 7240620, 7240786, 7240951, 7241116, 7241282, 7241447, 7241612, 7241778, 7241943, 7242108, 7242274, 7242439, 7242604, 7242770, 7242935, 7243100, 7243266, 7243431, 7243596, 7243762, 7243927, 7244092, 7244258, 7244423, 7244588, 7244754, 7244919, 7245084, 7245250, 7245415, 7245580, 7245746, 7245911, 7246076, 7246242, 7246407, 7246573, 7246738, 7246903, 7247069, 7247234, 7247399, 7247565, 7247730, 7247896, 7248061, 7248226, 7248392, 7248557, 7248722, 7248888, 7249053, 7249219, 7249384, 7249549, 7249715, 7249880, 7250046, 7250211, 7250376, 7250542, 7250707, 7250873, 7251038, 7251203, 7251369, 7251534, 7251700, 7251865, 7252031, 7252196, 7252361, 7252527, 7252692, 7252858, 7253023, 7253189, 7253354, 7253519, 7253685, 7253850, 7254016, 7254181, 7254347, 7254512, 7254678, 7254843, 7255009, 7255174, 7255339, 7255505, 7255670, 7255836, 7256001, 7256167, 7256332, 7256498, 7256663, 7256829, 7256994, 7257160, 7257325, 7257491, 7257656, 7257822, 7257987, 7258152, 7258318, 7258483, 7258649, 7258814, 7258980, 7259145, 7259311, 7259476, 7259642, 7259807, 7259973, 7260138, 7260304, 7260470, 7260635, 7260801, 7260966, 7261132, 7261297, 7261463, 7261628, 7261794, 7261959, 7262125, 7262290, 7262456, 7262621, 7262787, 7262952, 7263118, 7263284, 7263449, 7263615, 7263780, 7263946, 7264111, 7264277, 7264442, 7264608, 7264773, 7264939, 7265105, 7265270, 7265436, 7265601, 7265767, 7265932, 7266098, 7266264, 7266429, 7266595, 7266760, 7266926, 7267091, 7267257, 7267423, 7267588, 7267754, 7267919, 7268085, 7268251, 7268416, 7268582, 7268747, 7268913, 7269079, 7269244, 7269410, 7269575, 7269741, 7269907, 7270072, 7270238, 7270403, 7270569, 7270735, 7270900, 7271066, 7271232, 7271397, 7271563, 7271729, 7271894, 7272060, 7272225, 7272391, 7272557, 7272722, 7272888, 7273054, 7273219, 7273385, 7273551, 7273716, 7273882, 7274048, 7274213, 7274379, 7274545, 7274710, 7274876, 7275042, 7275207, 7275373, 7275539, 7275704, 7275870, 7276036, 7276201, 7276367, 7276533, 7276698, 7276864, 7277030, 7277195, 7277361, 7277527, 7277692, 7277858, 7278024, 7278190, 7278355, 7278521, 7278687, 7278852, 7279018, 7279184, 7279349, 7279515, 7279681, 7279847, 7280012, 7280178, 7280344, 7280510, 7280675, 7280841, 7281007, 7281172, 7281338, 7281504, 7281670, 7281835, 7282001, 7282167, 7282333, 7282498, 7282664, 7282830, 7282996, 7283161, 7283327, 7283493, 7283659, 7283824, 7283990, 7284156, 7284322, 7284487, 7284653, 7284819, 7284985, 7285151, 7285316, 7285482, 7285648, 7285814, 7285979, 7286145, 7286311, 7286477, 7286643, 7286808, 7286974, 7287140, 7287306, 7287472, 7287637, 7287803, 7287969, 7288135, 7288301, 7288466, 7288632, 7288798, 7288964, 7289130, 7289295, 7289461, 7289627, 7289793, 7289959, 7290125, 7290290, 7290456, 7290622, 7290788, 7290954, 7291120, 7291285, 7291451, 7291617, 7291783, 7291949, 7292115, 7292280, 7292446, 7292612, 7292778, 7292944, 7293110, 7293276, 7293441, 7293607, 7293773, 7293939, 7294105, 7294271, 7294437, 7294603, 7294768, 7294934, 7295100, 7295266, 7295432, 7295598, 7295764, 7295930, 7296095, 7296261, 7296427, 7296593, 7296759, 7296925, 7297091, 7297257, 7297423, 7297589, 7297754, 7297920, 7298086, 7298252, 7298418, 7298584, 7298750, 7298916, 7299082, 7299248, 7299414, 7299580, 7299745, 7299911, 7300077, 7300243, 7300409, 7300575, 7300741, 7300907, 7301073, 7301239, 7301405, 7301571, 7301737, 7301903, 7302069, 7302235, 7302401, 7302567, 7302733, 7302898, 7303064, 7303230, 7303396, 7303562, 7303728, 7303894, 7304060, 7304226, 7304392, 7304558, 7304724, 7304890, 7305056, 7305222, 7305388, 7305554, 7305720, 7305886, 7306052, 7306218, 7306384, 7306550, 7306716, 7306882, 7307048, 7307214, 7307380, 7307546, 7307712, 7307878, 7308044, 7308210, 7308376, 7308542, 7308708, 7308874, 7309040, 7309206, 7309372, 7309538, 7309704, 7309870, 7310036, 7310203, 7310369, 7310535, 7310701, 7310867, 7311033, 7311199, 7311365, 7311531, 7311697, 7311863, 7312029, 7312195, 7312361, 7312527, 7312693, 7312859, 7313025, 7313192, 7313358, 7313524, 7313690, 7313856, 7314022, 7314188, 7314354, 7314520, 7314686, 7314852, 7315018, 7315185, 7315351, 7315517, 7315683, 7315849, 7316015, 7316181, 7316347, 7316513, 7316679, 7316846, 7317012, 7317178, 7317344, 7317510, 7317676, 7317842, 7318008, 7318174, 7318341, 7318507, 7318673, 7318839, 7319005, 7319171, 7319337, 7319504, 7319670, 7319836, 7320002, 7320168, 7320334, 7320500, 7320667, 7320833, 7320999, 7321165, 7321331, 7321497, 7321663, 7321830, 7321996, 7322162, 7322328, 7322494, 7322660, 7322827, 7322993, 7323159, 7323325, 7323491, 7323658, 7323824, 7323990, 7324156, 7324322, 7324488, 7324655, 7324821, 7324987, 7325153, 7325319, 7325486, 7325652, 7325818, 7325984, 7326150, 7326317, 7326483, 7326649, 7326815, 7326982, 7327148, 7327314, 7327480, 7327646, 7327813, 7327979, 7328145, 7328311, 7328478, 7328644, 7328810, 7328976, 7329142, 7329309, 7329475, 7329641, 7329807, 7329974, 7330140, 7330306, 7330472, 7330639, 7330805, 7330971, 7331137, 7331304, 7331470, 7331636, 7331803, 7331969, 7332135, 7332301, 7332468, 7332634, 7332800, 7332966, 7333133, 7333299, 7333465, 7333632, 7333798, 7333964, 7334130, 7334297, 7334463, 7334629, 7334796, 7334962, 7335128, 7335295, 7335461, 7335627, 7335793, 7335960, 7336126, 7336292, 7336459, 7336625, 7336791, 7336958, 7337124, 7337290, 7337457, 7337623, 7337789, 7337956, 7338122, 7338288, 7338455, 7338621, 7338787, 7338954, 7339120, 7339286, 7339453, 7339619, 7339785, 7339952, 7340118, 7340285, 7340451, 7340617, 7340784, 7340950, 7341116, 7341283, 7341449, 7341615, 7341782, 7341948, 7342115, 7342281, 7342447, 7342614, 7342780, 7342946, 7343113, 7343279, 7343446, 7343612, 7343778, 7343945, 7344111, 7344278, 7344444, 7344610, 7344777, 7344943, 7345110, 7345276, 7345442, 7345609, 7345775, 7345942, 7346108, 7346275, 7346441, 7346607, 7346774, 7346940, 7347107, 7347273, 7347440, 7347606, 7347772, 7347939, 7348105, 7348272, 7348438, 7348605, 7348771, 7348938, 7349104, 7349270, 7349437, 7349603, 7349770, 7349936, 7350103, 7350269, 7350436, 7350602, 7350769, 7350935, 7351102, 7351268, 7351434, 7351601, 7351767, 7351934, 7352100, 7352267, 7352433, 7352600, 7352766, 7352933, 7353099, 7353266, 7353432, 7353599, 7353765, 7353932, 7354098, 7354265, 7354431, 7354598, 7354764, 7354931, 7355097, 7355264, 7355430, 7355597, 7355763, 7355930, 7356096, 7356263, 7356430, 7356596, 7356763, 7356929, 7357096, 7357262, 7357429, 7357595, 7357762, 7357928, 7358095, 7358261, 7358428, 7358595, 7358761, 7358928, 7359094, 7359261, 7359427, 7359594, 7359760, 7359927, 7360094, 7360260, 7360427, 7360593, 7360760, 7360926, 7361093, 7361260, 7361426, 7361593, 7361759, 7361926, 7362093, 7362259, 7362426, 7362592, 7362759, 7362925, 7363092, 7363259, 7363425, 7363592, 7363758, 7363925, 7364092, 7364258, 7364425, 7364592, 7364758, 7364925, 7365091, 7365258, 7365425, 7365591, 7365758, 7365925, 7366091, 7366258, 7366424, 7366591, 7366758, 7366924, 7367091, 7367258, 7367424, 7367591, 7367758, 7367924, 7368091, 7368258, 7368424, 7368591, 7368757, 7368924, 7369091, 7369257, 7369424, 7369591, 7369757, 7369924, 7370091, 7370257, 7370424, 7370591, 7370758, 7370924, 7371091, 7371258, 7371424, 7371591, 7371758, 7371924, 7372091, 7372258, 7372424, 7372591, 7372758, 7372925, 7373091, 7373258, 7373425, 7373591, 7373758, 7373925, 7374091, 7374258, 7374425, 7374592, 7374758, 7374925, 7375092, 7375259, 7375425, 7375592, 7375759, 7375925, 7376092, 7376259, 7376426, 7376592, 7376759, 7376926, 7377093, 7377259, 7377426, 7377593, 7377760, 7377926, 7378093, 7378260, 7378427, 7378593, 7378760, 7378927, 7379094, 7379260, 7379427, 7379594, 7379761, 7379928, 7380094, 7380261, 7380428, 7380595, 7380762, 7380928, 7381095, 7381262, 7381429, 7381595, 7381762, 7381929, 7382096, 7382263, 7382429, 7382596, 7382763, 7382930, 7383097, 7383263, 7383430, 7383597, 7383764, 7383931, 7384098, 7384264, 7384431, 7384598, 7384765, 7384932, 7385099, 7385265, 7385432, 7385599, 7385766, 7385933, 7386100, 7386266, 7386433, 7386600, 7386767, 7386934, 7387101, 7387268, 7387434, 7387601, 7387768, 7387935, 7388102, 7388269, 7388436, 7388602, 7388769, 7388936, 7389103, 7389270, 7389437, 7389604, 7389771, 7389937, 7390104, 7390271, 7390438, 7390605, 7390772, 7390939, 7391106, 7391273, 7391439, 7391606, 7391773, 7391940, 7392107, 7392274, 7392441, 7392608, 7392775, 7392942, 7393109, 7393275, 7393442, 7393609, 7393776, 7393943, 7394110, 7394277, 7394444, 7394611, 7394778, 7394945, 7395112, 7395279, 7395446, 7395612, 7395779, 7395946, 7396113, 7396280, 7396447, 7396614, 7396781, 7396948, 7397115, 7397282, 7397449, 7397616, 7397783, 7397950, 7398117, 7398284, 7398451, 7398618, 7398785, 7398952, 7399119, 7399286, 7399453, 7399620, 7399787, 7399954, 7400121, 7400288, 7400455, 7400622, 7400789, 7400956, 7401123, 7401290, 7401457, 7401624, 7401791, 7401958, 7402125, 7402292, 7402459, 7402626, 7402793, 7402960, 7403127, 7403294, 7403461, 7403628, 7403795, 7403962, 7404129, 7404296, 7404463, 7404630, 7404797, 7404964, 7405131, 7405298, 7405465, 7405632, 7405799, 7405966, 7406133, 7406300, 7406467, 7406635, 7406802, 7406969, 7407136, 7407303, 7407470, 7407637, 7407804, 7407971, 7408138, 7408305, 7408472, 7408639, 7408806, 7408974, 7409141, 7409308, 7409475, 7409642, 7409809, 7409976, 7410143, 7410310, 7410477, 7410644, 7410812, 7410979, 7411146, 7411313, 7411480, 7411647, 7411814, 7411981, 7412148, 7412316, 7412483, 7412650, 7412817, 7412984, 7413151, 7413318, 7413485, 7413653, 7413820, 7413987, 7414154, 7414321, 7414488, 7414655, 7414823, 7414990, 7415157, 7415324, 7415491, 7415658, 7415826, 7415993, 7416160, 7416327, 7416494, 7416661, 7416828, 7416996, 7417163, 7417330, 7417497, 7417664, 7417832, 7417999, 7418166, 7418333, 7418500, 7418667, 7418835, 7419002, 7419169, 7419336, 7419503, 7419671, 7419838, 7420005, 7420172, 7420339, 7420507, 7420674, 7420841, 7421008, 7421175, 7421343, 7421510, 7421677, 7421844, 7422012, 7422179, 7422346, 7422513, 7422680, 7422848, 7423015, 7423182, 7423349, 7423517, 7423684, 7423851, 7424018, 7424186, 7424353, 7424520, 7424687, 7424855, 7425022, 7425189, 7425356, 7425524, 7425691, 7425858, 7426025, 7426193, 7426360, 7426527, 7426694, 7426862, 7427029, 7427196, 7427364, 7427531, 7427698, 7427865, 7428033, 7428200, 7428367, 7428535, 7428702, 7428869, 7429036, 7429204, 7429371, 7429538, 7429706, 7429873, 7430040, 7430208, 7430375, 7430542, 7430709, 7430877, 7431044, 7431211, 7431379, 7431546, 7431713, 7431881, 7432048, 7432215, 7432383, 7432550, 7432717, 7432885, 7433052, 7433219, 7433387, 7433554, 7433721, 7433889, 7434056, 7434223, 7434391, 7434558, 7434726, 7434893, 7435060, 7435228, 7435395, 7435562, 7435730, 7435897, 7436064, 7436232, 7436399, 7436567, 7436734, 7436901, 7437069, 7437236, 7437403, 7437571, 7437738, 7437906, 7438073, 7438240, 7438408, 7438575, 7438743, 7438910, 7439077, 7439245, 7439412, 7439580, 7439747, 7439914, 7440082, 7440249, 7440417, 7440584, 7440752, 7440919, 7441086, 7441254, 7441421, 7441589, 7441756, 7441924, 7442091, 7442258, 7442426, 7442593, 7442761, 7442928, 7443096, 7443263, 7443430, 7443598, 7443765, 7443933, 7444100, 7444268, 7444435, 7444603, 7444770, 7444938, 7445105, 7445273, 7445440, 7445607, 7445775, 7445942, 7446110, 7446277, 7446445, 7446612, 7446780, 7446947, 7447115, 7447282, 7447450, 7447617, 7447785, 7447952, 7448120, 7448287, 7448455, 7448622, 7448790, 7448957, 7449125, 7449292, 7449460, 7449627, 7449795, 7449962, 7450130, 7450297, 7450465, 7450632, 7450800, 7450967, 7451135, 7451303, 7451470, 7451638, 7451805, 7451973, 7452140, 7452308, 7452475, 7452643, 7452810, 7452978, 7453146, 7453313, 7453481, 7453648, 7453816, 7453983, 7454151, 7454318, 7454486, 7454654, 7454821, 7454989, 7455156, 7455324, 7455491, 7455659, 7455827, 7455994, 7456162, 7456329, 7456497, 7456664, 7456832, 7457000, 7457167, 7457335, 7457502, 7457670, 7457838, 7458005, 7458173, 7458340, 7458508, 7458676, 7458843, 7459011, 7459179, 7459346, 7459514, 7459681, 7459849, 7460017, 7460184, 7460352, 7460519, 7460687, 7460855, 7461022, 7461190, 7461358, 7461525, 7461693, 7461861, 7462028, 7462196, 7462364, 7462531, 7462699, 7462866, 7463034, 7463202, 7463369, 7463537, 7463705, 7463872, 7464040, 7464208, 7464375, 7464543, 7464711, 7464878, 7465046, 7465214, 7465382, 7465549, 7465717, 7465885, 7466052, 7466220, 7466388, 7466555, 7466723, 7466891, 7467058, 7467226, 7467394, 7467562, 7467729, 7467897, 7468065, 7468232, 7468400, 7468568, 7468735, 7468903, 7469071, 7469239, 7469406, 7469574, 7469742, 7469910, 7470077, 7470245, 7470413, 7470580, 7470748, 7470916, 7471084, 7471251, 7471419, 7471587, 7471755, 7471922, 7472090, 7472258, 7472426, 7472593, 7472761, 7472929, 7473097, 7473264, 7473432, 7473600, 7473768, 7473936, 7474103, 7474271, 7474439, 7474607, 7474774, 7474942, 7475110, 7475278, 7475446, 7475613, 7475781, 7475949, 7476117, 7476285, 7476452, 7476620, 7476788, 7476956, 7477124, 7477291, 7477459, 7477627, 7477795, 7477963, 7478130, 7478298, 7478466, 7478634, 7478802, 7478969, 7479137, 7479305, 7479473, 7479641, 7479809, 7479976, 7480144, 7480312, 7480480, 7480648, 7480816, 7480984, 7481151, 7481319, 7481487, 7481655, 7481823, 7481991, 7482158, 7482326, 7482494, 7482662, 7482830, 7482998, 7483166, 7483334, 7483501, 7483669, 7483837, 7484005, 7484173, 7484341, 7484509, 7484677, 7484844, 7485012, 7485180, 7485348, 7485516, 7485684, 7485852, 7486020, 7486188, 7486355, 7486523, 7486691, 7486859, 7487027, 7487195, 7487363, 7487531, 7487699, 7487867, 7488035, 7488203, 7488370, 7488538, 7488706, 7488874, 7489042, 7489210, 7489378, 7489546, 7489714, 7489882, 7490050, 7490218, 7490386, 7490554, 7490722, 7490890, 7491057, 7491225, 7491393, 7491561, 7491729, 7491897, 7492065, 7492233, 7492401, 7492569, 7492737, 7492905, 7493073, 7493241, 7493409, 7493577, 7493745, 7493913, 7494081, 7494249, 7494417, 7494585, 7494753, 7494921, 7495089, 7495257, 7495425, 7495593, 7495761, 7495929, 7496097, 7496265, 7496433, 7496601, 7496769, 7496937, 7497105, 7497273, 7497441, 7497609, 7497777, 7497945, 7498113, 7498281, 7498449, 7498617, 7498785, 7498953, 7499121, 7499289, 7499457, 7499625, 7499793, 7499961, 7500130, 7500298, 7500466, 7500634, 7500802, 7500970, 7501138, 7501306, 7501474, 7501642, 7501810, 7501978, 7502146, 7502314, 7502482, 7502650, 7502819, 7502987, 7503155, 7503323, 7503491, 7503659, 7503827, 7503995, 7504163, 7504331, 7504499, 7504667, 7504836, 7505004, 7505172, 7505340, 7505508, 7505676, 7505844, 7506012, 7506180, 7506349, 7506517, 7506685, 7506853, 7507021, 7507189, 7507357, 7507525, 7507693, 7507862, 7508030, 7508198, 7508366, 7508534, 7508702, 7508870, 7509039, 7509207, 7509375, 7509543, 7509711, 7509879, 7510047, 7510216, 7510384, 7510552, 7510720, 7510888, 7511056, 7511225, 7511393, 7511561, 7511729, 7511897, 7512065, 7512234, 7512402, 7512570, 7512738, 7512906, 7513075, 7513243, 7513411, 7513579, 7513747, 7513915, 7514084, 7514252, 7514420, 7514588, 7514756, 7514925, 7515093, 7515261, 7515429, 7515598, 7515766, 7515934, 7516102, 7516270, 7516439, 7516607, 7516775, 7516943, 7517111, 7517280, 7517448, 7517616, 7517784, 7517953, 7518121, 7518289, 7518457, 7518626, 7518794, 7518962, 7519130, 7519299, 7519467, 7519635, 7519803, 7519972, 7520140, 7520308, 7520476, 7520645, 7520813, 7520981, 7521149, 7521318, 7521486, 7521654, 7521823, 7521991, 7522159, 7522327, 7522496, 7522664, 7522832, 7523001, 7523169, 7523337, 7523505, 7523674, 7523842, 7524010, 7524179, 7524347, 7524515, 7524684, 7524852, 7525020, 7525188, 7525357, 7525525, 7525693, 7525862, 7526030, 7526198, 7526367, 7526535, 7526703, 7526872, 7527040, 7527208, 7527377, 7527545, 7527713, 7527882, 7528050, 7528218, 7528387, 7528555, 7528723, 7528892, 7529060, 7529229, 7529397, 7529565, 7529734, 7529902, 7530070, 7530239, 7530407, 7530575, 7530744, 7530912, 7531081, 7531249, 7531417, 7531586, 7531754, 7531922, 7532091, 7532259, 7532428, 7532596, 7532764, 7532933, 7533101, 7533270, 7533438, 7533606, 7533775, 7533943, 7534112, 7534280, 7534448, 7534617, 7534785, 7534954, 7535122, 7535291, 7535459, 7535627, 7535796, 7535964, 7536133, 7536301, 7536470, 7536638, 7536806, 7536975, 7537143, 7537312, 7537480, 7537649, 7537817, 7537985, 7538154, 7538322, 7538491, 7538659, 7538828, 7538996, 7539165, 7539333, 7539502, 7539670, 7539839, 7540007, 7540175, 7540344, 7540512, 7540681, 7540849, 7541018, 7541186, 7541355, 7541523, 7541692, 7541860, 7542029, 7542197, 7542366, 7542534, 7542703, 7542871, 7543040, 7543208, 7543377, 7543545, 7543714, 7543882, 7544051, 7544219, 7544388, 7544556, 7544725, 7544893, 7545062, 7545230, 7545399, 7545567, 7545736, 7545905, 7546073, 7546242, 7546410, 7546579, 7546747, 7546916, 7547084, 7547253, 7547421, 7547590, 7547759, 7547927, 7548096, 7548264, 7548433, 7548601, 7548770, 7548938, 7549107, 7549276, 7549444, 7549613, 7549781, 7549950, 7550118, 7550287, 7550456, 7550624, 7550793, 7550961, 7551130, 7551299, 7551467, 7551636, 7551804, 7551973, 7552141, 7552310, 7552479, 7552647, 7552816, 7552984, 7553153, 7553322, 7553490, 7553659, 7553828, 7553996, 7554165, 7554333, 7554502, 7554671, 7554839, 7555008, 7555177, 7555345, 7555514, 7555682, 7555851, 7556020, 7556188, 7556357, 7556526, 7556694, 7556863, 7557032, 7557200, 7557369, 7557538, 7557706, 7557875, 7558044, 7558212, 7558381, 7558550, 7558718, 7558887, 7559056, 7559224, 7559393, 7559562, 7559730, 7559899, 7560068, 7560236, 7560405, 7560574, 7560742, 7560911, 7561080, 7561248, 7561417, 7561586, 7561755, 7561923, 7562092, 7562261, 7562429, 7562598, 7562767, 7562935, 7563104, 7563273, 7563442, 7563610, 7563779, 7563948, 7564116, 7564285, 7564454, 7564623, 7564791, 7564960, 7565129, 7565298, 7565466, 7565635, 7565804, 7565973, 7566141, 7566310, 7566479, 7566648, 7566816, 7566985, 7567154, 7567323, 7567491, 7567660, 7567829, 7567998, 7568166, 7568335, 7568504, 7568673, 7568841, 7569010, 7569179, 7569348, 7569517, 7569685, 7569854, 7570023, 7570192, 7570361, 7570529, 7570698, 7570867, 7571036, 7571205, 7571373, 7571542, 7571711, 7571880, 7572049, 7572217, 7572386, 7572555, 7572724, 7572893, 7573061, 7573230, 7573399, 7573568, 7573737, 7573906, 7574074, 7574243, 7574412, 7574581, 7574750, 7574919, 7575087, 7575256, 7575425, 7575594, 7575763, 7575932, 7576100, 7576269, 7576438, 7576607, 7576776, 7576945, 7577114, 7577282, 7577451, 7577620, 7577789, 7577958, 7578127, 7578296, 7578465, 7578633, 7578802, 7578971, 7579140, 7579309, 7579478, 7579647, 7579816, 7579985, 7580153, 7580322, 7580491, 7580660, 7580829, 7580998, 7581167, 7581336, 7581505, 7581674, 7581842, 7582011, 7582180, 7582349, 7582518, 7582687, 7582856, 7583025, 7583194, 7583363, 7583532, 7583701, 7583870, 7584039, 7584207, 7584376, 7584545, 7584714, 7584883, 7585052, 7585221, 7585390, 7585559, 7585728, 7585897, 7586066, 7586235, 7586404, 7586573, 7586742, 7586911, 7587080, 7587249, 7587418, 7587587, 7587756, 7587925, 7588093, 7588262, 7588431, 7588600, 7588769, 7588938, 7589107, 7589276, 7589445, 7589614, 7589783, 7589952, 7590121, 7590290, 7590459, 7590628, 7590797, 7590966, 7591135, 7591304, 7591473, 7591642, 7591811, 7591980, 7592149, 7592319, 7592488, 7592657, 7592826, 7592995, 7593164, 7593333, 7593502, 7593671, 7593840, 7594009, 7594178, 7594347, 7594516, 7594685, 7594854, 7595023, 7595192, 7595361, 7595530, 7595699, 7595868, 7596037, 7596207, 7596376, 7596545, 7596714, 7596883, 7597052, 7597221, 7597390, 7597559, 7597728, 7597897, 7598066, 7598235, 7598405, 7598574, 7598743, 7598912, 7599081, 7599250, 7599419, 7599588, 7599757, 7599926, 7600095, 7600265, 7600434, 7600603, 7600772, 7600941, 7601110, 7601279, 7601448, 7601618, 7601787, 7601956, 7602125, 7602294, 7602463, 7602632, 7602801, 7602971, 7603140, 7603309, 7603478, 7603647, 7603816, 7603985, 7604155, 7604324, 7604493, 7604662, 7604831, 7605000, 7605169, 7605339, 7605508, 7605677, 7605846, 7606015, 7606184, 7606354, 7606523, 7606692, 7606861, 7607030, 7607200, 7607369, 7607538, 7607707, 7607876, 7608045, 7608215, 7608384, 7608553, 7608722, 7608891, 7609061, 7609230, 7609399, 7609568, 7609737, 7609907, 7610076, 7610245, 7610414, 7610584, 7610753, 7610922, 7611091, 7611260, 7611430, 7611599, 7611768, 7611937, 7612107, 7612276, 7612445, 7612614, 7612783, 7612953, 7613122, 7613291, 7613460, 7613630, 7613799, 7613968, 7614137, 7614307, 7614476, 7614645, 7614814, 7614984, 7615153, 7615322, 7615492, 7615661, 7615830, 7615999, 7616169, 7616338, 7616507, 7616676, 7616846, 7617015, 7617184, 7617354, 7617523, 7617692, 7617861, 7618031, 7618200, 7618369, 7618539, 7618708, 7618877, 7619047, 7619216, 7619385, 7619555, 7619724, 7619893, 7620062, 7620232, 7620401, 7620570, 7620740, 7620909, 7621078, 7621248, 7621417, 7621586, 7621756, 7621925, 7622094, 7622264, 7622433, 7622602, 7622772, 7622941, 7623110, 7623280, 7623449, 7623619, 7623788, 7623957, 7624127, 7624296, 7624465, 7624635, 7624804, 7624973, 7625143, 7625312, 7625482, 7625651, 7625820, 7625990, 7626159, 7626328, 7626498, 7626667, 7626837, 7627006, 7627175, 7627345, 7627514, 7627684, 7627853, 7628022, 7628192, 7628361, 7628531, 7628700, 7628869, 7629039, 7629208, 7629378, 7629547, 7629716, 7629886, 7630055, 7630225, 7630394, 7630564, 7630733, 7630902, 7631072, 7631241, 7631411, 7631580, 7631750, 7631919, 7632088, 7632258, 7632427, 7632597, 7632766, 7632936, 7633105, 7633275, 7633444, 7633614, 7633783, 7633952, 7634122, 7634291, 7634461, 7634630, 7634800, 7634969, 7635139, 7635308, 7635478, 7635647, 7635817, 7635986, 7636156, 7636325, 7636495, 7636664, 7636834, 7637003, 7637173, 7637342, 7637512, 7637681, 7637851, 7638020, 7638190, 7638359, 7638529, 7638698, 7638868, 7639037, 7639207, 7639376, 7639546, 7639715, 7639885, 7640054, 7640224, 7640393, 7640563, 7640732, 7640902, 7641072, 7641241, 7641411, 7641580, 7641750, 7641919, 7642089, 7642258, 7642428, 7642597, 7642767, 7642937, 7643106, 7643276, 7643445, 7643615, 7643784, 7643954, 7644124, 7644293, 7644463, 7644632, 7644802, 7644971, 7645141, 7645311, 7645480, 7645650, 7645819, 7645989, 7646159, 7646328, 7646498, 7646667, 7646837, 7647007, 7647176, 7647346, 7647515, 7647685, 7647855, 7648024, 7648194, 7648363, 7648533, 7648703, 7648872, 7649042, 7649211, 7649381, 7649551, 7649720, 7649890, 7650060, 7650229, 7650399, 7650569, 7650738, 7650908, 7651077, 7651247, 7651417, 7651586, 7651756, 7651926, 7652095, 7652265, 7652435, 7652604, 7652774, 7652944, 7653113, 7653283, 7653453, 7653622, 7653792, 7653962, 7654131, 7654301, 7654471, 7654640, 7654810, 7654980, 7655149, 7655319, 7655489, 7655659, 7655828, 7655998, 7656168, 7656337, 7656507, 7656677, 7656846, 7657016, 7657186, 7657356, 7657525, 7657695, 7657865, 7658034, 7658204, 7658374, 7658544, 7658713, 7658883, 7659053, 7659223, 7659392, 7659562, 7659732, 7659901, 7660071, 7660241, 7660411, 7660580, 7660750, 7660920, 7661090, 7661259, 7661429, 7661599, 7661769, 7661938, 7662108, 7662278, 7662448, 7662618, 7662787, 7662957, 7663127, 7663297, 7663466, 7663636, 7663806, 7663976, 7664145, 7664315, 7664485, 7664655, 7664825, 7664994, 7665164, 7665334, 7665504, 7665674, 7665843, 7666013, 7666183, 7666353, 7666523, 7666692, 7666862, 7667032, 7667202, 7667372, 7667542, 7667711, 7667881, 7668051, 7668221, 7668391, 7668560, 7668730, 7668900, 7669070, 7669240, 7669410, 7669579, 7669749, 7669919, 7670089, 7670259, 7670429, 7670599, 7670768, 7670938, 7671108, 7671278, 7671448, 7671618, 7671788, 7671957, 7672127, 7672297, 7672467, 7672637, 7672807, 7672977, 7673147, 7673316, 7673486, 7673656, 7673826, 7673996, 7674166, 7674336, 7674506, 7674675, 7674845, 7675015, 7675185, 7675355, 7675525, 7675695, 7675865, 7676035, 7676205, 7676375, 7676544, 7676714, 7676884, 7677054, 7677224, 7677394, 7677564, 7677734, 7677904, 7678074, 7678244, 7678414, 7678584, 7678753, 7678923, 7679093, 7679263, 7679433, 7679603, 7679773, 7679943, 7680113, 7680283, 7680453, 7680623, 7680793, 7680963, 7681133, 7681303, 7681473, 7681643, 7681813, 7681983, 7682153, 7682323, 7682493, 7682663, 7682833, 7683002, 7683172, 7683342, 7683512, 7683682, 7683852, 7684022, 7684192, 7684362, 7684532, 7684702, 7684872, 7685042, 7685212, 7685382, 7685552, 7685722, 7685892, 7686062, 7686232, 7686403, 7686573, 7686743, 7686913, 7687083, 7687253, 7687423, 7687593, 7687763, 7687933, 7688103, 7688273, 7688443, 7688613, 7688783, 7688953, 7689123, 7689293, 7689463, 7689633, 7689803, 7689973, 7690143, 7690313, 7690483, 7690654, 7690824, 7690994, 7691164, 7691334, 7691504, 7691674, 7691844, 7692014, 7692184, 7692354, 7692524, 7692694, 7692865, 7693035, 7693205, 7693375, 7693545, 7693715, 7693885, 7694055, 7694225, 7694395, 7694565, 7694736, 7694906, 7695076, 7695246, 7695416, 7695586, 7695756, 7695926, 7696097, 7696267, 7696437, 7696607, 7696777, 7696947, 7697117, 7697287, 7697458, 7697628, 7697798, 7697968, 7698138, 7698308, 7698478, 7698649, 7698819, 7698989, 7699159, 7699329, 7699499, 7699669, 7699840, 7700010, 7700180, 7700350, 7700520, 7700690, 7700861, 7701031, 7701201, 7701371, 7701541, 7701711, 7701882, 7702052, 7702222, 7702392, 7702562, 7702733, 7702903, 7703073, 7703243, 7703413, 7703584, 7703754, 7703924, 7704094, 7704264, 7704435, 7704605, 7704775, 7704945, 7705115, 7705286, 7705456, 7705626, 7705796, 7705967, 7706137, 7706307, 7706477, 7706647, 7706818, 7706988, 7707158, 7707328, 7707499, 7707669, 7707839, 7708009, 7708180, 7708350, 7708520, 7708690, 7708861, 7709031, 7709201, 7709371, 7709542, 7709712, 7709882, 7710052, 7710223, 7710393, 7710563, 7710734, 7710904, 7711074, 7711244, 7711415, 7711585, 7711755, 7711926, 7712096, 7712266, 7712436, 7712607, 7712777, 7712947, 7713118, 7713288, 7713458, 7713629, 7713799, 7713969, 7714139, 7714310, 7714480, 7714650, 7714821, 7714991, 7715161, 7715332, 7715502, 7715672, 7715843, 7716013, 7716183, 7716354, 7716524, 7716694, 7716865, 7717035, 7717205, 7717376, 7717546, 7717716, 7717887, 7718057, 7718227, 7718398, 7718568, 7718739, 7718909, 7719079, 7719250, 7719420, 7719590, 7719761, 7719931, 7720101, 7720272, 7720442, 7720613, 7720783, 7720953, 7721124, 7721294, 7721465, 7721635, 7721805, 7721976, 7722146, 7722317, 7722487, 7722657, 7722828, 7722998, 7723169, 7723339, 7723509, 7723680, 7723850, 7724021, 7724191, 7724361, 7724532, 7724702, 7724873, 7725043, 7725214, 7725384, 7725554, 7725725, 7725895, 7726066, 7726236, 7726407, 7726577, 7726747, 7726918, 7727088, 7727259, 7727429, 7727600, 7727770, 7727941, 7728111, 7728282, 7728452, 7728623, 7728793, 7728963, 7729134, 7729304, 7729475, 7729645, 7729816, 7729986, 7730157, 7730327, 7730498, 7730668, 7730839, 7731009, 7731180, 7731350, 7731521, 7731691, 7731862, 7732032, 7732203, 7732373, 7732544, 7732714, 7732885, 7733055, 7733226, 7733396, 7733567, 7733737, 7733908, 7734078, 7734249, 7734419, 7734590, 7734760, 7734931, 7735101, 7735272, 7735443, 7735613, 7735784, 7735954, 7736125, 7736295, 7736466, 7736636, 7736807, 7736977, 7737148, 7737319, 7737489, 7737660, 7737830, 7738001, 7738171, 7738342, 7738513, 7738683, 7738854, 7739024, 7739195, 7739365, 7739536, 7739707, 7739877, 7740048, 7740218, 7740389, 7740559, 7740730, 7740901, 7741071, 7741242, 7741412, 7741583, 7741754, 7741924, 7742095, 7742266, 7742436, 7742607, 7742777, 7742948, 7743119, 7743289, 7743460, 7743630, 7743801, 7743972, 7744142, 7744313, 7744484, 7744654, 7744825, 7744995, 7745166, 7745337, 7745507, 7745678, 7745849, 7746019, 7746190, 7746361, 7746531, 7746702, 7746873, 7747043, 7747214, 7747385, 7747555, 7747726, 7747897, 7748067, 7748238, 7748409, 7748579, 7748750, 7748921, 7749091, 7749262, 7749433, 7749603, 7749774, 7749945, 7750115, 7750286, 7750457, 7750628, 7750798, 7750969, 7751140, 7751310, 7751481, 7751652, 7751822, 7751993, 7752164, 7752335, 7752505, 7752676, 7752847, 7753017, 7753188, 7753359, 7753530, 7753700, 7753871, 7754042, 7754213, 7754383, 7754554, 7754725, 7754896, 7755066, 7755237, 7755408, 7755579, 7755749, 7755920, 7756091, 7756262, 7756432, 7756603, 7756774, 7756945, 7757115, 7757286, 7757457, 7757628, 7757798, 7757969, 7758140, 7758311, 7758482, 7758652, 7758823, 7758994, 7759165, 7759335, 7759506, 7759677, 7759848, 7760019, 7760189, 7760360, 7760531, 7760702, 7760873, 7761043, 7761214, 7761385, 7761556, 7761727, 7761898, 7762068, 7762239, 7762410, 7762581, 7762752, 7762922, 7763093, 7763264, 7763435, 7763606, 7763777, 7763947, 7764118, 7764289, 7764460, 7764631, 7764802, 7764973, 7765143, 7765314, 7765485, 7765656, 7765827, 7765998, 7766169, 7766339, 7766510, 7766681, 7766852, 7767023, 7767194, 7767365, 7767535, 7767706, 7767877, 7768048, 7768219, 7768390, 7768561, 7768732, 7768903, 7769073, 7769244, 7769415, 7769586, 7769757, 7769928, 7770099, 7770270, 7770441, 7770612, 7770782, 7770953, 7771124, 7771295, 7771466, 7771637, 7771808, 7771979, 7772150, 7772321, 7772492, 7772663, 7772834, 7773004, 7773175, 7773346, 7773517, 7773688, 7773859, 7774030, 7774201, 7774372, 7774543, 7774714, 7774885, 7775056, 7775227, 7775398, 7775569, 7775740, 7775911, 7776082, 7776253, 7776424, 7776595, 7776765, 7776936, 7777107, 7777278, 7777449, 7777620, 7777791, 7777962, 7778133, 7778304, 7778475, 7778646, 7778817, 7778988, 7779159, 7779330, 7779501, 7779672, 7779843, 7780014, 7780185, 7780356, 7780527, 7780698, 7780869, 7781040, 7781211, 7781382, 7781553, 7781724, 7781896, 7782067, 7782238, 7782409, 7782580, 7782751, 7782922, 7783093, 7783264, 7783435, 7783606, 7783777, 7783948, 7784119, 7784290, 7784461, 7784632, 7784803, 7784974, 7785145, 7785316, 7785488, 7785659, 7785830, 7786001, 7786172, 7786343, 7786514, 7786685, 7786856, 7787027, 7787198, 7787369, 7787540, 7787712, 7787883, 7788054, 7788225, 7788396, 7788567, 7788738, 7788909, 7789080, 7789251, 7789423, 7789594, 7789765, 7789936, 7790107, 7790278, 7790449, 7790620, 7790791, 7790963, 7791134, 7791305, 7791476, 7791647, 7791818, 7791989, 7792161, 7792332, 7792503, 7792674, 7792845, 7793016, 7793187, 7793359, 7793530, 7793701, 7793872, 7794043, 7794214, 7794385, 7794557, 7794728, 7794899, 7795070, 7795241, 7795412, 7795584, 7795755, 7795926, 7796097, 7796268, 7796440, 7796611, 7796782, 7796953, 7797124, 7797295, 7797467, 7797638, 7797809, 7797980, 7798151, 7798323, 7798494, 7798665, 7798836, 7799007, 7799179, 7799350, 7799521, 7799692, 7799864, 7800035, 7800206, 7800377, 7800548, 7800720, 7800891, 7801062, 7801233, 7801405, 7801576, 7801747, 7801918, 7802090, 7802261, 7802432, 7802603, 7802774, 7802946, 7803117, 7803288, 7803460, 7803631, 7803802, 7803973, 7804145, 7804316, 7804487, 7804658, 7804830, 7805001, 7805172, 7805343, 7805515, 7805686, 7805857, 7806029, 7806200, 7806371, 7806542, 7806714, 7806885, 7807056, 7807228, 7807399, 7807570, 7807741, 7807913, 7808084, 7808255, 7808427, 7808598, 7808769, 7808941, 7809112, 7809283, 7809455, 7809626, 7809797, 7809969, 7810140, 7810311, 7810483, 7810654, 7810825, 7810997, 7811168, 7811339, 7811511, 7811682, 7811853, 7812025, 7812196, 7812367, 7812539, 7812710, 7812881, 7813053, 7813224, 7813395, 7813567, 7813738, 7813910, 7814081, 7814252, 7814424, 7814595, 7814766, 7814938, 7815109, 7815281, 7815452, 7815623, 7815795, 7815966, 7816137, 7816309, 7816480, 7816652, 7816823, 7816994, 7817166, 7817337, 7817509, 7817680, 7817851, 7818023, 7818194, 7818366, 7818537, 7818709, 7818880, 7819051, 7819223, 7819394, 7819566, 7819737, 7819909, 7820080, 7820251, 7820423, 7820594, 7820766, 7820937, 7821109, 7821280, 7821451, 7821623, 7821794, 7821966, 7822137, 7822309, 7822480, 7822652, 7822823, 7822995, 7823166, 7823337, 7823509, 7823680, 7823852, 7824023, 7824195, 7824366, 7824538, 7824709, 7824881, 7825052, 7825224, 7825395, 7825567, 7825738, 7825910, 7826081, 7826253, 7826424, 7826596, 7826767, 7826939, 7827110, 7827282, 7827453, 7827625, 7827796, 7827968, 7828139, 7828311, 7828482, 7828654, 7828825, 7828997, 7829168, 7829340, 7829511, 7829683, 7829855, 7830026, 7830198, 7830369, 7830541, 7830712, 7830884, 7831055, 7831227, 7831398, 7831570, 7831742, 7831913, 7832085, 7832256, 7832428, 7832599, 7832771, 7832942, 7833114, 7833286, 7833457, 7833629, 7833800, 7833972, 7834144, 7834315, 7834487, 7834658, 7834830, 7835001, 7835173, 7835345, 7835516, 7835688, 7835859, 7836031, 7836203, 7836374, 7836546, 7836717, 7836889, 7837061, 7837232, 7837404, 7837576, 7837747, 7837919, 7838090, 7838262, 7838434, 7838605, 7838777, 7838949, 7839120, 7839292, 7839463, 7839635, 7839807, 7839978, 7840150, 7840322, 7840493, 7840665, 7840837, 7841008, 7841180, 7841352, 7841523, 7841695, 7841867, 7842038, 7842210, 7842382, 7842553, 7842725, 7842897, 7843068, 7843240, 7843412, 7843583, 7843755, 7843927, 7844098, 7844270, 7844442, 7844613, 7844785, 7844957, 7845128, 7845300, 7845472, 7845644, 7845815, 7845987, 7846159, 7846330, 7846502, 7846674, 7846846, 7847017, 7847189, 7847361, 7847532, 7847704, 7847876, 7848048, 7848219, 7848391, 7848563, 7848734, 7848906, 7849078, 7849250, 7849421, 7849593, 7849765, 7849937, 7850108, 7850280, 7850452, 7850624, 7850795, 7850967, 7851139, 7851311, 7851482, 7851654, 7851826, 7851998, 7852170, 7852341, 7852513, 7852685, 7852857, 7853028, 7853200, 7853372, 7853544, 7853716, 7853887, 7854059, 7854231, 7854403, 7854575, 7854746, 7854918, 7855090, 7855262, 7855434, 7855605, 7855777, 7855949, 7856121, 7856293, 7856464, 7856636, 7856808, 7856980, 7857152, 7857324, 7857495, 7857667, 7857839, 7858011, 7858183, 7858355, 7858526, 7858698, 7858870, 7859042, 7859214, 7859386, 7859557, 7859729, 7859901, 7860073, 7860245, 7860417, 7860589, 7860760, 7860932, 7861104, 7861276, 7861448, 7861620, 7861792, 7861964, 7862135, 7862307, 7862479, 7862651, 7862823, 7862995, 7863167, 7863339, 7863510, 7863682, 7863854, 7864026, 7864198, 7864370, 7864542, 7864714, 7864886, 7865058, 7865229, 7865401, 7865573, 7865745, 7865917, 7866089, 7866261, 7866433, 7866605, 7866777, 7866949, 7867121, 7867293, 7867464, 7867636, 7867808, 7867980, 7868152, 7868324, 7868496, 7868668, 7868840, 7869012, 7869184, 7869356, 7869528, 7869700, 7869872, 7870044, 7870216, 7870388, 7870560, 7870732, 7870904, 7871075, 7871247, 7871419, 7871591, 7871763, 7871935, 7872107, 7872279, 7872451, 7872623, 7872795, 7872967, 7873139, 7873311, 7873483, 7873655, 7873827, 7873999, 7874171, 7874343, 7874515, 7874687, 7874859, 7875031, 7875203, 7875375, 7875547, 7875719, 7875891, 7876063, 7876235, 7876407, 7876580, 7876752, 7876924, 7877096, 7877268, 7877440, 7877612, 7877784, 7877956, 7878128, 7878300, 7878472, 7878644, 7878816, 7878988, 7879160, 7879332, 7879504, 7879676, 7879848, 7880020, 7880193, 7880365, 7880537, 7880709, 7880881, 7881053, 7881225, 7881397, 7881569, 7881741, 7881913, 7882085, 7882257, 7882430, 7882602, 7882774, 7882946, 7883118, 7883290, 7883462, 7883634, 7883806, 7883978, 7884151, 7884323, 7884495, 7884667, 7884839, 7885011, 7885183, 7885355, 7885528, 7885700, 7885872, 7886044, 7886216, 7886388, 7886560, 7886732, 7886905, 7887077, 7887249, 7887421, 7887593, 7887765, 7887937, 7888110, 7888282, 7888454, 7888626, 7888798, 7888970, 7889143, 7889315, 7889487, 7889659, 7889831, 7890003, 7890176, 7890348, 7890520, 7890692, 7890864, 7891036, 7891209, 7891381, 7891553, 7891725, 7891897, 7892070, 7892242, 7892414, 7892586, 7892758, 7892931, 7893103, 7893275, 7893447, 7893619, 7893792, 7893964, 7894136, 7894308, 7894480, 7894653, 7894825, 7894997, 7895169, 7895342, 7895514, 7895686, 7895858, 7896031, 7896203, 7896375, 7896547, 7896719, 7896892, 7897064, 7897236, 7897408, 7897581, 7897753, 7897925, 7898098, 7898270, 7898442, 7898614, 7898787, 7898959, 7899131, 7899303, 7899476, 7899648, 7899820, 7899992, 7900165, 7900337, 7900509, 7900682, 7900854, 7901026, 7901198, 7901371, 7901543, 7901715, 7901888, 7902060, 7902232, 7902405, 7902577, 7902749, 7902921, 7903094, 7903266, 7903438, 7903611, 7903783, 7903955, 7904128, 7904300, 7904472, 7904645, 7904817, 7904989, 7905162, 7905334, 7905506, 7905679, 7905851, 7906023, 7906196, 7906368, 7906540, 7906713, 7906885, 7907057, 7907230, 7907402, 7907574, 7907747, 7907919, 7908092, 7908264, 7908436, 7908609, 7908781, 7908953, 7909126, 7909298, 7909470, 7909643, 7909815, 7909988, 7910160, 7910332, 7910505, 7910677, 7910850, 7911022, 7911194, 7911367, 7911539, 7911712, 7911884, 7912056, 7912229, 7912401, 7912574, 7912746, 7912918, 7913091, 7913263, 7913436, 7913608, 7913781, 7913953, 7914125, 7914298, 7914470, 7914643, 7914815, 7914988, 7915160, 7915332, 7915505, 7915677, 7915850, 7916022, 7916195, 7916367, 7916540, 7916712, 7916884, 7917057, 7917229, 7917402, 7917574, 7917747, 7917919, 7918092, 7918264, 7918437, 7918609, 7918782, 7918954, 7919127, 7919299, 7919471, 7919644, 7919816, 7919989, 7920161, 7920334, 7920506, 7920679, 7920851, 7921024, 7921196, 7921369, 7921541, 7921714, 7921886, 7922059, 7922231, 7922404, 7922576, 7922749, 7922922, 7923094, 7923267, 7923439, 7923612, 7923784, 7923957, 7924129, 7924302, 7924474, 7924647, 7924819, 7924992, 7925164, 7925337, 7925510, 7925682, 7925855, 7926027, 7926200, 7926372, 7926545, 7926717, 7926890, 7927063, 7927235, 7927408, 7927580, 7927753, 7927925, 7928098, 7928271, 7928443, 7928616, 7928788, 7928961, 7929133, 7929306, 7929479, 7929651, 7929824, 7929996, 7930169, 7930342, 7930514, 7930687, 7930859, 7931032, 7931205, 7931377, 7931550, 7931722, 7931895, 7932068, 7932240, 7932413, 7932586, 7932758, 7932931, 7933103, 7933276, 7933449, 7933621, 7933794, 7933967, 7934139, 7934312, 7934484, 7934657, 7934830, 7935002, 7935175, 7935348, 7935520, 7935693, 7935866, 7936038, 7936211, 7936384, 7936556, 7936729, 7936902, 7937074, 7937247, 7937420, 7937592, 7937765, 7937938, 7938110, 7938283, 7938456, 7938628, 7938801, 7938974, 7939146, 7939319, 7939492, 7939665, 7939837, 7940010, 7940183, 7940355, 7940528, 7940701, 7940874, 7941046, 7941219, 7941392, 7941564, 7941737, 7941910, 7942083, 7942255, 7942428, 7942601, 7942773, 7942946, 7943119, 7943292, 7943464, 7943637, 7943810, 7943983, 7944155, 7944328, 7944501, 7944674, 7944846, 7945019, 7945192, 7945365, 7945537, 7945710, 7945883, 7946056, 7946228, 7946401, 7946574, 7946747, 7946919, 7947092, 7947265, 7947438, 7947611, 7947783, 7947956, 7948129, 7948302, 7948475, 7948647, 7948820, 7948993, 7949166, 7949338, 7949511, 7949684, 7949857, 7950030, 7950203, 7950375, 7950548, 7950721, 7950894, 7951067, 7951239, 7951412, 7951585, 7951758, 7951931, 7952104, 7952276, 7952449, 7952622, 7952795, 7952968, 7953141, 7953313, 7953486, 7953659, 7953832, 7954005, 7954178, 7954350, 7954523, 7954696, 7954869, 7955042, 7955215, 7955388, 7955560, 7955733, 7955906, 7956079, 7956252, 7956425, 7956598, 7956771, 7956943, 7957116, 7957289, 7957462, 7957635, 7957808, 7957981, 7958154, 7958327, 7958499, 7958672, 7958845, 7959018, 7959191, 7959364, 7959537, 7959710, 7959883, 7960056, 7960229, 7960401, 7960574, 7960747, 7960920, 7961093, 7961266, 7961439, 7961612, 7961785, 7961958, 7962131, 7962304, 7962477, 7962649, 7962822, 7962995, 7963168, 7963341, 7963514, 7963687, 7963860, 7964033, 7964206, 7964379, 7964552, 7964725, 7964898, 7965071, 7965244, 7965417, 7965590, 7965763, 7965936, 7966109, 7966282, 7966455, 7966628, 7966801, 7966974, 7967147, 7967320, 7967493, 7967666, 7967839, 7968012, 7968185, 7968358, 7968531, 7968704, 7968877, 7969050, 7969223, 7969396, 7969569, 7969742, 7969915, 7970088, 7970261, 7970434, 7970607, 7970780, 7970953, 7971126, 7971299, 7971472, 7971645, 7971818, 7971991, 7972164, 7972337, 7972510, 7972683, 7972856, 7973029, 7973202, 7973375, 7973548, 7973721, 7973894, 7974068, 7974241, 7974414, 7974587, 7974760, 7974933, 7975106, 7975279, 7975452, 7975625, 7975798, 7975971, 7976144, 7976317, 7976491, 7976664, 7976837, 7977010, 7977183, 7977356, 7977529, 7977702, 7977875, 7978048, 7978222, 7978395, 7978568, 7978741, 7978914, 7979087, 7979260, 7979433, 7979606, 7979780, 7979953, 7980126, 7980299, 7980472, 7980645, 7980818, 7980991, 7981165, 7981338, 7981511, 7981684, 7981857, 7982030, 7982203, 7982377, 7982550, 7982723, 7982896, 7983069, 7983242, 7983416, 7983589, 7983762, 7983935, 7984108, 7984281, 7984455, 7984628, 7984801, 7984974, 7985147, 7985320, 7985494, 7985667, 7985840, 7986013, 7986186, 7986360, 7986533, 7986706, 7986879, 7987052, 7987225, 7987399, 7987572, 7987745, 7987918, 7988092, 7988265, 7988438, 7988611, 7988784, 7988958, 7989131, 7989304, 7989477, 7989650, 7989824, 7989997, 7990170, 7990343, 7990517, 7990690, 7990863, 7991036, 7991210, 7991383, 7991556, 7991729, 7991903, 7992076, 7992249, 7992422, 7992596, 7992769, 7992942, 7993115, 7993289, 7993462, 7993635, 7993808, 7993982, 7994155, 7994328, 7994502, 7994675, 7994848, 7995021, 7995195, 7995368, 7995541, 7995715, 7995888, 7996061, 7996234, 7996408, 7996581, 7996754, 7996928, 7997101, 7997274, 7997448, 7997621, 7997794, 7997967, 7998141, 7998314, 7998487, 7998661, 7998834, 7999007, 7999181, 7999354, 7999527, 7999701, 7999874, 8000047, 8000221, 8000394, 8000567, 8000741, 8000914, 8001087, 8001261, 8001434, 8001607, 8001781, 8001954, 8002128, 8002301, 8002474, 8002648, 8002821, 8002994, 8003168, 8003341, 8003514, 8003688, 8003861, 8004035, 8004208, 8004381, 8004555, 8004728, 8004901, 8005075, 8005248, 8005422, 8005595, 8005768, 8005942, 8006115, 8006289, 8006462, 8006635, 8006809, 8006982, 8007156, 8007329, 8007502, 8007676, 8007849, 8008023, 8008196, 8008370, 8008543, 8008716, 8008890, 8009063, 8009237, 8009410, 8009584, 8009757, 8009930, 8010104, 8010277, 8010451, 8010624, 8010798, 8010971, 8011145, 8011318, 8011492, 8011665, 8011838, 8012012, 8012185, 8012359, 8012532, 8012706, 8012879, 8013053, 8013226, 8013400, 8013573, 8013747, 8013920, 8014094, 8014267, 8014441, 8014614, 8014788, 8014961, 8015135, 8015308, 8015482, 8015655, 8015829, 8016002, 8016176, 8016349, 8016523, 8016696, 8016870, 8017043, 8017217, 8017390, 8017564, 8017737, 8017911, 8018084, 8018258, 8018431, 8018605, 8018778, 8018952, 8019125, 8019299, 8019472, 8019646, 8019820, 8019993, 8020167, 8020340, 8020514, 8020687, 8020861, 8021034, 8021208, 8021382, 8021555, 8021729, 8021902, 8022076, 8022249, 8022423, 8022597, 8022770, 8022944, 8023117, 8023291, 8023464, 8023638, 8023812, 8023985, 8024159, 8024332, 8024506, 8024680, 8024853, 8025027, 8025200, 8025374, 8025548, 8025721, 8025895, 8026068, 8026242, 8026416, 8026589, 8026763, 8026936, 8027110, 8027284, 8027457, 8027631, 8027805, 8027978, 8028152, 8028325, 8028499, 8028673, 8028846, 8029020, 8029194, 8029367, 8029541, 8029715, 8029888, 8030062, 8030236, 8030409, 8030583, 8030757, 8030930, 8031104, 8031278, 8031451, 8031625, 8031799, 8031972, 8032146, 8032320, 8032493, 8032667, 8032841, 8033014, 8033188, 8033362, 8033535, 8033709, 8033883, 8034056, 8034230, 8034404, 8034578, 8034751, 8034925, 8035099, 8035272, 8035446, 8035620, 8035793, 8035967, 8036141, 8036315, 8036488, 8036662, 8036836, 8037010, 8037183, 8037357, 8037531, 8037704, 8037878, 8038052, 8038226, 8038399, 8038573, 8038747, 8038921, 8039094, 8039268, 8039442, 8039616, 8039789, 8039963, 8040137, 8040311, 8040484, 8040658, 8040832, 8041006, 8041180, 8041353, 8041527, 8041701, 8041875, 8042048, 8042222, 8042396, 8042570, 8042744, 8042917, 8043091, 8043265, 8043439, 8043612, 8043786, 8043960, 8044134, 8044308, 8044481, 8044655, 8044829, 8045003, 8045177, 8045351, 8045524, 8045698, 8045872, 8046046, 8046220, 8046393, 8046567, 8046741, 8046915, 8047089, 8047263, 8047436, 8047610, 8047784, 8047958, 8048132, 8048306, 8048480, 8048653, 8048827, 8049001, 8049175, 8049349, 8049523, 8049696, 8049870, 8050044, 8050218, 8050392, 8050566, 8050740, 8050914, 8051087, 8051261, 8051435, 8051609, 8051783, 8051957, 8052131, 8052305, 8052479, 8052652, 8052826, 8053000, 8053174, 8053348, 8053522, 8053696, 8053870, 8054044, 8054218, 8054391, 8054565, 8054739, 8054913, 8055087, 8055261, 8055435, 8055609, 8055783, 8055957, 8056131, 8056305, 8056478, 8056652, 8056826, 8057000, 8057174, 8057348, 8057522, 8057696, 8057870, 8058044, 8058218, 8058392, 8058566, 8058740, 8058914, 8059088, 8059262, 8059436, 8059610, 8059784, 8059958, 8060131, 8060305, 8060479, 8060653, 8060827, 8061001, 8061175, 8061349, 8061523, 8061697, 8061871, 8062045, 8062219, 8062393, 8062567, 8062741, 8062915, 8063089, 8063263, 8063437, 8063611, 8063785, 8063959, 8064133, 8064307, 8064481, 8064655, 8064829, 8065003, 8065177, 8065351, 8065525, 8065700, 8065874, 8066048, 8066222, 8066396, 8066570, 8066744, 8066918, 8067092, 8067266, 8067440, 8067614, 8067788, 8067962, 8068136, 8068310, 8068484, 8068658, 8068832, 8069006, 8069180, 8069355, 8069529, 8069703, 8069877, 8070051, 8070225, 8070399, 8070573, 8070747, 8070921, 8071095, 8071269, 8071444, 8071618, 8071792, 8071966, 8072140, 8072314, 8072488, 8072662, 8072836, 8073010, 8073185, 8073359, 8073533, 8073707, 8073881, 8074055, 8074229, 8074403, 8074577, 8074752, 8074926, 8075100, 8075274, 8075448, 8075622, 8075796, 8075971, 8076145, 8076319, 8076493, 8076667, 8076841, 8077015, 8077190, 8077364, 8077538, 8077712, 8077886, 8078060, 8078234, 8078409, 8078583, 8078757, 8078931, 8079105, 8079279, 8079454, 8079628, 8079802, 8079976, 8080150, 8080325, 8080499, 8080673, 8080847, 8081021, 8081196, 8081370, 8081544, 8081718, 8081892, 8082067, 8082241, 8082415, 8082589, 8082763, 8082938, 8083112, 8083286, 8083460, 8083634, 8083809, 8083983, 8084157, 8084331, 8084506, 8084680, 8084854, 8085028, 8085202, 8085377, 8085551, 8085725, 8085899, 8086074, 8086248, 8086422, 8086596, 8086771, 8086945, 8087119, 8087293, 8087468, 8087642, 8087816, 8087990, 8088165, 8088339, 8088513, 8088688, 8088862, 8089036, 8089210, 8089385, 8089559, 8089733, 8089908, 8090082, 8090256, 8090430, 8090605, 8090779, 8090953, 8091128, 8091302, 8091476, 8091650, 8091825, 8091999, 8092173, 8092348, 8092522, 8092696, 8092871, 8093045, 8093219, 8093394, 8093568, 8093742, 8093917, 8094091, 8094265, 8094440, 8094614, 8094788, 8094963, 8095137, 8095311, 8095486, 8095660, 8095834, 8096009, 8096183, 8096357, 8096532, 8096706, 8096880, 8097055, 8097229, 8097404, 8097578, 8097752, 8097927, 8098101, 8098275, 8098450, 8098624, 8098799, 8098973, 8099147, 8099322, 8099496, 8099670, 8099845, 8100019, 8100194, 8100368, 8100542, 8100717, 8100891, 8101066, 8101240, 8101414, 8101589, 8101763, 8101938, 8102112, 8102287, 8102461, 8102635, 8102810, 8102984, 8103159, 8103333, 8103507, 8103682, 8103856, 8104031, 8104205, 8104380, 8104554, 8104729, 8104903, 8105077, 8105252, 8105426, 8105601, 8105775, 8105950, 8106124, 8106299, 8106473, 8106648, 8106822, 8106996, 8107171, 8107345, 8107520, 8107694, 8107869, 8108043, 8108218, 8108392, 8108567, 8108741, 8108916, 8109090, 8109265, 8109439, 8109614, 8109788, 8109963, 8110137, 8110312, 8110486, 8110661, 8110835, 8111010, 8111184, 8111359, 8111533, 8111708, 8111882, 8112057, 8112231, 8112406, 8112580, 8112755, 8112929, 8113104, 8113278, 8113453, 8113628, 8113802, 8113977, 8114151, 8114326, 8114500, 8114675, 8114849, 8115024, 8115198, 8115373, 8115548, 8115722, 8115897, 8116071, 8116246, 8116420, 8116595, 8116770, 8116944, 8117119, 8117293, 8117468, 8117642, 8117817, 8117992, 8118166, 8118341, 8118515, 8118690, 8118864, 8119039, 8119214, 8119388, 8119563, 8119737, 8119912, 8120087, 8120261, 8120436, 8120611, 8120785, 8120960, 8121134, 8121309, 8121484, 8121658, 8121833, 8122007, 8122182, 8122357, 8122531, 8122706, 8122881, 8123055, 8123230, 8123405, 8123579, 8123754, 8123928, 8124103, 8124278, 8124452, 8124627, 8124802, 8124976, 8125151, 8125326, 8125500, 8125675, 8125850, 8126024, 8126199, 8126374, 8126548, 8126723, 8126898, 8127072, 8127247, 8127422, 8127596, 8127771, 8127946, 8128120, 8128295, 8128470, 8128645, 8128819, 8128994, 8129169, 8129343, 8129518, 8129693, 8129867, 8130042, 8130217, 8130392, 8130566, 8130741, 8130916, 8131091, 8131265, 8131440, 8131615, 8131789, 8131964, 8132139, 8132314, 8132488, 8132663, 8132838, 8133013, 8133187, 8133362, 8133537, 8133712, 8133886, 8134061, 8134236, 8134411, 8134585, 8134760, 8134935, 8135110, 8135284, 8135459, 8135634, 8135809, 8135983, 8136158, 8136333, 8136508, 8136683, 8136857, 8137032, 8137207, 8137382, 8137556, 8137731, 8137906, 8138081, 8138256, 8138430, 8138605, 8138780, 8138955, 8139130, 8139304, 8139479, 8139654, 8139829, 8140004, 8140179, 8140353, 8140528, 8140703, 8140878, 8141053, 8141227, 8141402, 8141577, 8141752, 8141927, 8142102, 8142276, 8142451, 8142626, 8142801, 8142976, 8143151, 8143326, 8143500, 8143675, 8143850, 8144025, 8144200, 8144375, 8144550, 8144724, 8144899, 8145074, 8145249, 8145424, 8145599, 8145774, 8145949, 8146123, 8146298, 8146473, 8146648, 8146823, 8146998, 8147173, 8147348, 8147523, 8147697, 8147872, 8148047, 8148222, 8148397, 8148572, 8148747, 8148922, 8149097, 8149272, 8149447, 8149621, 8149796, 8149971, 8150146, 8150321, 8150496, 8150671, 8150846, 8151021, 8151196, 8151371, 8151546, 8151721, 8151896, 8152070, 8152245, 8152420, 8152595, 8152770, 8152945, 8153120, 8153295, 8153470, 8153645, 8153820, 8153995, 8154170, 8154345, 8154520, 8154695, 8154870, 8155045, 8155220, 8155395, 8155570, 8155745, 8155920, 8156095, 8156270, 8156445, 8156620, 8156795, 8156970, 8157145, 8157320, 8157495, 8157670, 8157845, 8158020, 8158195, 8158370, 8158545, 8158720, 8158895, 8159070, 8159245, 8159420, 8159595, 8159770, 8159945, 8160120, 8160295, 8160470, 8160645, 8160820, 8160995, 8161170, 8161345, 8161520, 8161695, 8161870, 8162045, 8162220, 8162395, 8162570, 8162745, 8162921, 8163096, 8163271, 8163446, 8163621, 8163796, 8163971, 8164146, 8164321, 8164496, 8164671, 8164846, 8165021, 8165196, 8165372, 8165547, 8165722, 8165897, 8166072, 8166247, 8166422, 8166597, 8166772, 8166947, 8167122, 8167298, 8167473, 8167648, 8167823, 8167998, 8168173, 8168348, 8168523, 8168698, 8168874, 8169049, 8169224, 8169399, 8169574, 8169749, 8169924, 8170099, 8170275, 8170450, 8170625, 8170800, 8170975, 8171150, 8171325, 8171501, 8171676, 8171851, 8172026, 8172201, 8172376, 8172552, 8172727, 8172902, 8173077, 8173252, 8173427, 8173603, 8173778, 8173953, 8174128, 8174303, 8174478, 8174654, 8174829, 8175004, 8175179, 8175354, 8175530, 8175705, 8175880, 8176055, 8176230, 8176406, 8176581, 8176756, 8176931, 8177106, 8177282, 8177457, 8177632, 8177807, 8177982, 8178158, 8178333, 8178508, 8178683, 8178859, 8179034, 8179209, 8179384, 8179559, 8179735, 8179910, 8180085, 8180260, 8180436, 8180611, 8180786, 8180961, 8181137, 8181312, 8181487, 8181662, 8181838, 8182013, 8182188, 8182363, 8182539, 8182714, 8182889, 8183065, 8183240, 8183415, 8183590, 8183766, 8183941, 8184116, 8184291, 8184467, 8184642, 8184817, 8184993, 8185168, 8185343, 8185519, 8185694, 8185869, 8186044, 8186220, 8186395, 8186570, 8186746, 8186921, 8187096, 8187272, 8187447, 8187622, 8187798, 8187973, 8188148, 8188324, 8188499, 8188674, 8188850, 8189025, 8189200, 8189376, 8189551, 8189726, 8189902, 8190077, 8190252, 8190428, 8190603, 8190778, 8190954, 8191129, 8191304, 8191480, 8191655, 8191830, 8192006, 8192181, 8192357, 8192532, 8192707, 8192883, 8193058, 8193233, 8193409, 8193584, 8193760, 8193935, 8194110, 8194286, 8194461, 8194637, 8194812, 8194987, 8195163, 8195338, 8195513, 8195689, 8195864, 8196040, 8196215, 8196391, 8196566, 8196741, 8196917, 8197092, 8197268, 8197443, 8197618, 8197794, 8197969, 8198145, 8198320, 8198496, 8198671, 8198846, 8199022, 8199197, 8199373, 8199548, 8199724, 8199899, 8200075, 8200250, 8200426, 8200601, 8200776, 8200952, 8201127, 8201303, 8201478, 8201654, 8201829, 8202005, 8202180, 8202356, 8202531, 8202707, 8202882, 8203058, 8203233, 8203409, 8203584, 8203760, 8203935, 8204110, 8204286, 8204461, 8204637, 8204812, 8204988, 8205163, 8205339, 8205515, 8205690, 8205866, 8206041, 8206217, 8206392, 8206568, 8206743, 8206919, 8207094, 8207270, 8207445, 8207621, 8207796, 8207972, 8208147, 8208323, 8208498, 8208674, 8208850, 8209025, 8209201, 8209376, 8209552, 8209727, 8209903, 8210078, 8210254, 8210429, 8210605, 8210781, 8210956, 8211132, 8211307, 8211483, 8211658, 8211834, 8212010, 8212185, 8212361, 8212536, 8212712, 8212888, 8213063, 8213239, 8213414, 8213590, 8213765, 8213941, 8214117, 8214292, 8214468, 8214643, 8214819, 8214995, 8215170, 8215346, 8215522, 8215697, 8215873, 8216048, 8216224, 8216400, 8216575, 8216751, 8216927, 8217102, 8217278, 8217453, 8217629, 8217805, 8217980, 8218156, 8218332, 8218507, 8218683, 8218859, 8219034, 8219210, 8219386, 8219561, 8219737, 8219913, 8220088, 8220264, 8220439, 8220615, 8220791, 8220967, 8221142, 8221318, 8221494, 8221669, 8221845, 8222021, 8222196, 8222372, 8222548, 8222723, 8222899, 8223075, 8223250, 8223426, 8223602, 8223778, 8223953, 8224129, 8224305, 8224480, 8224656, 8224832, 8225007, 8225183, 8225359, 8225535, 8225710, 8225886, 8226062, 8226238, 8226413, 8226589, 8226765, 8226940, 8227116, 8227292, 8227468, 8227643, 8227819, 8227995, 8228171, 8228346, 8228522, 8228698, 8228874, 8229049, 8229225, 8229401, 8229577, 8229752, 8229928, 8230104, 8230280, 8230456, 8230631, 8230807, 8230983, 8231159, 8231334, 8231510, 8231686, 8231862, 8232038, 8232213, 8232389, 8232565, 8232741, 8232917, 8233092, 8233268, 8233444, 8233620, 8233796, 8233971, 8234147, 8234323, 8234499, 8234675, 8234850, 8235026, 8235202, 8235378, 8235554, 8235730, 8235905, 8236081, 8236257, 8236433, 8236609, 8236785, 8236960, 8237136, 8237312, 8237488, 8237664, 8237840, 8238015, 8238191, 8238367, 8238543, 8238719, 8238895, 8239071, 8239247, 8239422, 8239598, 8239774, 8239950, 8240126, 8240302, 8240478, 8240653, 8240829, 8241005, 8241181, 8241357, 8241533, 8241709, 8241885, 8242061, 8242236, 8242412, 8242588, 8242764, 8242940, 8243116, 8243292, 8243468, 8243644, 8243820, 8243996, 8244171, 8244347, 8244523, 8244699, 8244875, 8245051, 8245227, 8245403, 8245579, 8245755, 8245931, 8246107, 8246283, 8246459, 8246635, 8246810, 8246986, 8247162, 8247338, 8247514, 8247690, 8247866, 8248042, 8248218, 8248394, 8248570, 8248746, 8248922, 8249098, 8249274, 8249450, 8249626, 8249802, 8249978, 8250154, 8250330, 8250506, 8250682, 8250858, 8251034, 8251210, 8251386, 8251562, 8251738, 8251914, 8252090, 8252266, 8252442, 8252618, 8252794, 8252970, 8253146, 8253322, 8253498, 8253674, 8253850, 8254026, 8254202, 8254378, 8254554, 8254730, 8254906, 8255082, 8255258, 8255434, 8255610, 8255786, 8255962, 8256138, 8256314, 8256490, 8256666, 8256842, 8257018, 8257195, 8257371, 8257547, 8257723, 8257899, 8258075, 8258251, 8258427, 8258603, 8258779, 8258955, 8259131, 8259307, 8259483, 8259659, 8259836, 8260012, 8260188, 8260364, 8260540, 8260716, 8260892, 8261068, 8261244, 8261420, 8261596, 8261773, 8261949, 8262125, 8262301, 8262477, 8262653, 8262829, 8263005, 8263181, 8263358, 8263534, 8263710, 8263886, 8264062, 8264238, 8264414, 8264590, 8264767, 8264943, 8265119, 8265295, 8265471, 8265647, 8265823, 8266000, 8266176, 8266352, 8266528, 8266704, 8266880, 8267057, 8267233, 8267409, 8267585, 8267761, 8267937, 8268114, 8268290, 8268466, 8268642, 8268818, 8268994, 8269171, 8269347, 8269523, 8269699, 8269875, 8270052, 8270228, 8270404, 8270580, 8270756, 8270933, 8271109, 8271285, 8271461, 8271637, 8271814, 8271990, 8272166, 8272342, 8272518, 8272695, 8272871, 8273047, 8273223, 8273400, 8273576, 8273752, 8273928, 8274104, 8274281, 8274457, 8274633, 8274809, 8274986, 8275162, 8275338, 8275514, 8275691, 8275867, 8276043, 8276219, 8276396, 8276572, 8276748, 8276924, 8277101, 8277277, 8277453, 8277630, 8277806, 8277982, 8278158, 8278335, 8278511, 8278687, 8278863, 8279040, 8279216, 8279392, 8279569, 8279745, 8279921, 8280098, 8280274, 8280450, 8280626, 8280803, 8280979, 8281155, 8281332, 8281508, 8281684, 8281861, 8282037, 8282213, 8282390, 8282566, 8282742, 8282919, 8283095, 8283271, 8283448, 8283624, 8283800, 8283977, 8284153, 8284329, 8284506, 8284682, 8284858, 8285035, 8285211, 8285387, 8285564, 8285740, 8285916, 8286093, 8286269, 8286445, 8286622, 8286798, 8286975, 8287151, 8287327, 8287504, 8287680, 8287856, 8288033, 8288209, 8288386, 8288562, 8288738, 8288915, 8289091, 8289268, 8289444, 8289620, 8289797, 8289973, 8290150, 8290326, 8290502, 8290679, 8290855, 8291032, 8291208, 8291384, 8291561, 8291737, 8291914, 8292090, 8292267, 8292443, 8292619, 8292796, 8292972, 8293149, 8293325, 8293502, 8293678, 8293854, 8294031, 8294207, 8294384, 8294560, 8294737, 8294913, 8295090, 8295266, 8295442, 8295619, 8295795, 8295972, 8296148, 8296325, 8296501, 8296678, 8296854, 8297031, 8297207, 8297384, 8297560, 8297737, 8297913, 8298090, 8298266, 8298443, 8298619, 8298796, 8298972, 8299149, 8299325, 8299502, 8299678, 8299855, 8300031, 8300208, 8300384, 8300561, 8300737, 8300914, 8301090, 8301267, 8301443, 8301620, 8301796, 8301973, 8302149, 8302326, 8302502, 8302679, 8302855, 8303032, 8303209, 8303385, 8303562, 8303738, 8303915, 8304091, 8304268, 8304444, 8304621, 8304798, 8304974, 8305151, 8305327, 8305504, 8305680, 8305857, 8306033, 8306210, 8306387, 8306563, 8306740, 8306916, 8307093, 8307270, 8307446, 8307623, 8307799, 8307976, 8308152, 8308329, 8308506, 8308682, 8308859, 8309035, 8309212, 8309389, 8309565, 8309742, 8309919, 8310095, 8310272, 8310448, 8310625, 8310802, 8310978, 8311155, 8311331, 8311508, 8311685, 8311861, 8312038, 8312215, 8312391, 8312568, 8312745, 8312921, 8313098, 8313275, 8313451, 8313628, 8313804, 8313981, 8314158, 8314334, 8314511, 8314688, 8314864, 8315041, 8315218, 8315394, 8315571, 8315748, 8315924, 8316101, 8316278, 8316454, 8316631, 8316808, 8316985, 8317161, 8317338, 8317515, 8317691, 8317868, 8318045, 8318221, 8318398, 8318575, 8318752, 8318928, 8319105, 8319282, 8319458, 8319635, 8319812, 8319989, 8320165, 8320342, 8320519, 8320695, 8320872, 8321049, 8321226, 8321402, 8321579, 8321756, 8321933, 8322109, 8322286, 8322463, 8322640, 8322816, 8322993, 8323170, 8323347, 8323523, 8323700, 8323877, 8324054, 8324230, 8324407, 8324584, 8324761, 8324937, 8325114, 8325291, 8325468, 8325645, 8325821, 8325998, 8326175, 8326352, 8326528, 8326705, 8326882, 8327059, 8327236, 8327412, 8327589, 8327766, 8327943, 8328120, 8328296, 8328473, 8328650, 8328827, 8329004, 8329180, 8329357, 8329534, 8329711, 8329888, 8330065, 8330241, 8330418, 8330595, 8330772, 8330949, 8331126, 8331302, 8331479, 8331656, 8331833, 8332010, 8332187, 8332363, 8332540, 8332717, 8332894, 8333071, 8333248, 8333425, 8333601, 8333778, 8333955, 8334132, 8334309, 8334486, 8334663, 8334840, 8335016, 8335193, 8335370, 8335547, 8335724, 8335901, 8336078, 8336255, 8336432, 8336608, 8336785, 8336962, 8337139, 8337316, 8337493, 8337670, 8337847, 8338024, 8338201, 8338377, 8338554, 8338731, 8338908, 8339085, 8339262, 8339439, 8339616, 8339793, 8339970, 8340147, 8340324, 8340501, 8340678, 8340854, 8341031, 8341208, 8341385, 8341562, 8341739, 8341916, 8342093, 8342270, 8342447, 8342624, 8342801, 8342978, 8343155, 8343332, 8343509, 8343686, 8343863, 8344040, 8344217, 8344394, 8344571, 8344748, 8344925, 8345102, 8345279, 8345456, 8345633, 8345810, 8345987, 8346164, 8346341, 8346518, 8346695, 8346872, 8347049, 8347226, 8347403, 8347580, 8347757, 8347934, 8348111, 8348288, 8348465, 8348642, 8348819, 8348996, 8349173, 8349350, 8349527, 8349704, 8349881, 8350058, 8350235, 8350412, 8350589, 8350766, 8350943, 8351120, 8351297, 8351474, 8351651, 8351828, 8352005, 8352183, 8352360, 8352537, 8352714, 8352891, 8353068, 8353245, 8353422, 8353599, 8353776, 8353953, 8354130, 8354307, 8354484, 8354662, 8354839, 8355016, 8355193, 8355370, 8355547, 8355724, 8355901, 8356078, 8356255, 8356433, 8356610, 8356787, 8356964, 8357141, 8357318, 8357495, 8357672, 8357849, 8358027, 8358204, 8358381, 8358558, 8358735, 8358912, 8359089, 8359266, 8359444, 8359621, 8359798, 8359975, 8360152, 8360329, 8360506, 8360684, 8360861, 8361038, 8361215, 8361392, 8361569, 8361747, 8361924, 8362101, 8362278, 8362455, 8362632, 8362810, 8362987, 8363164, 8363341, 8363518, 8363695, 8363873, 8364050, 8364227, 8364404, 8364581, 8364759, 8364936, 8365113, 8365290, 8365467, 8365645, 8365822, 8365999, 8366176, 8366353, 8366531, 8366708, 8366885, 8367062, 8367239, 8367417, 8367594, 8367771, 8367948, 8368126, 8368303, 8368480, 8368657, 8368834, 8369012, 8369189, 8369366, 8369543, 8369721, 8369898, 8370075, 8370252, 8370430, 8370607, 8370784, 8370961, 8371139, 8371316, 8371493, 8371670, 8371848, 8372025, 8372202, 8372380, 8372557, 8372734, 8372911, 8373089, 8373266, 8373443, 8373621, 8373798, 8373975, 8374152, 8374330, 8374507, 8374684, 8374862, 8375039, 8375216, 8375394, 8375571, 8375748, 8375925, 8376103, 8376280, 8376457, 8376635, 8376812, 8376989, 8377167, 8377344, 8377521, 8377699, 8377876, 8378053, 8378231, 8378408, 8378585, 8378763, 8378940, 8379117, 8379295, 8379472, 8379649, 8379827, 8380004, 8380181, 8380359, 8380536, 8380714, 8380891, 8381068, 8381246, 8381423, 8381600, 8381778, 8381955, 8382132, 8382310, 8382487, 8382665, 8382842, 8383019, 8383197, 8383374, 8383552, 8383729, 8383906, 8384084, 8384261, 8384439, 8384616, 8384793, 8384971, 8385148, 8385326, 8385503, 8385680, 8385858, 8386035, 8386213, 8386390, 8386567, 8386745, 8386922, 8387100, 8387277, 8387455, 8387632, 8387810, 8387987, 8388164, 8388342, 8388519, }; + + +/** + + http://www.hxa.name/articles/content/fast-pow-adjustable_hxa7241_2007.html + + Copyright (c) 2007, Harrison Ainsworth / HXA7241. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **/ + +static const float _2p23 = 8388608.0f; + +/** + * Get pow (fast!). + * + * @val power to raise radix to + * @ilog2 one over log, to required radix, of two + * @pTable length must be 2 ^ precision + * @precision number of mantissa bits used, >= 0 and <= 18 + */ +static float powFastLookup(const float val, const float ilog2, const uint32_t* pTable, const uint32_t precision) +{ + /* build float bits */ + const int32_t i = (int32_t)((val * (_2p23 * ilog2)) + (127.0f * _2p23)); + + /* replace mantissa with lookup */ + const int32_t it = (i & 0xFF800000) | pTable[(i & 0x7FFFFF) >> /* E */ + (23 - precision)]; /* F */ + + /* convert bits to float */ + return *(const float*)(&it); +} + +/* Lookup table generator for the ICSI logarithm function + Copyright (C) 2007 International Computer Science Institute + 1947 Center Street. Suite 600 + Berkeley, CA 94704 + Contact information: + Oriol Vinyals vinyals@icsi.berkeley.edu + Gerald Friedland fractor@icsi.berkeley.edu + Acknowledgements: + Thanks to Harrison Ainsworth (hxa7241@gmail.com) for his idea that + doubled the accuracy. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + This program 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 General Public License for more details. + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +static inline float icsi_log(float arg, const float* lookup_table, const uint32_t precision) +{ + /* get access to float bits */ + const int32_t* const pVal = (const int32_t*)(&arg); + /* extract exponent and mantissa (quantized) */ + const int32_t exp = ((*pVal >> 23) & 255) - 127; + const int32_t man = (*pVal & 0x7FFFFF) >> (23 - precision); + /* exponent plus lookup refinement */ + return ((float)(exp) + lookup_table[man]) * 0.69314718055995f; +} + +static inline uint32_t log2i(const uint32_t x) +{ + return (31 - __builtin_clz(x)); +} + +/* Fast arctan2 + * from http://dspguru.com/dsp/tricks/fixed-point-atan2-with-self-normalization + */ +/* +float fast_atan2f(float y, float x) +{ + const float coeff_1 = M_PI/4; + const float coeff_2 = 3*M_PI/4; + float abs_y = fabs(y)+1e-10; // kludge to prevent 0/0 condition + float r, angle; + if (x >= 0) { + r = (x - abs_y) / (x + abs_y); + angle = coeff_1 - coeff_1 * r; + } else { + r = (x + abs_y) / (abs_y - x); + angle = coeff_2 - coeff_1 * r; + } + if (y < 0) { + return(-angle); // negate if in quad III or IV + } else { + return(angle); + } +} +*/ + +// Static table declaration +static const float* log_table = fast_log_table; +static uint32_t log_precision = log2i(fast_log_precision); +static const uint32_t* pow_table = fast_pow_table; +static uint32_t pow_precision = log2i(fast_pow_precision); + +float fast_powf(float x, float y) +{ + return powFastLookup(y, logf(x)*1.44269504088896f, pow_table, pow_precision); +} + +float fast_expf(float x) +{ + return powFastLookup(x, 1.44269504088896f, pow_table, pow_precision); +} + +float fast_exp2f(float x) +{ + return powFastLookup(x, 1.0f, pow_table, pow_precision); +} + +float fast_exp10f(float x) +{ + return powFastLookup(x, 3.32192809488736f, pow_table, pow_precision); +} + +float fast_logf(float x) +{ + return icsi_log(x, log_table, log_precision); +} + +float fast_log10f(float x) +{ + // log10 (x) equals log (x) / log (10) + return icsi_log(x, log_table, log_precision) / float(M_LN10); +} + +float fast_log2f(float x) +{ + // log2 (x) equals log (x) / log (2) + return icsi_log(x, log_table, log_precision) / float(M_LN2); +} + +// 'double' version: to improve +double fast_pow(double x, double y) +{ + return powFastLookup(y, logf(x)*1.44269504088896f, pow_table, pow_precision); +} + +double fast_exp(double x) +{ + return powFastLookup(x, 1.44269504088896f, pow_table, pow_precision); +} + +double fast_exp2(double x) +{ + return powFastLookup(x, 1.0f, pow_table, pow_precision); +} + +double fast_exp10(double x) +{ + return powFastLookup(x, 3.32192809488736f, pow_table, pow_precision); +} + +double fast_log(double x) +{ + return icsi_log(x, log_table, log_precision); +} + +double fast_log2(double x) +{ + // log2 (x) equals log (x) / log (2) + return icsi_log(x, log_table, log_precision) / M_LN2; +} + +double fast_log10(double x) +{ + // log10 (x) equals log (x) / log (10) + return icsi_log(x, log_table, log_precision) / M_LN10; +} + +static void fast_pow_set_table(const uint32_t* table, int size) +{ + pow_table = table; + pow_precision = log2i(size); +} + +static void fast_log_set_table(const float* table, int size) +{ + log_table = table; + log_precision = log2i(size); +} diff --git a/source/DEINDUGens/include/faust/dsp/faust-dynamic-engine.cpp b/source/DEINDUGens/include/faust/dsp/faust-dynamic-engine.cpp new file mode 100644 index 0000000000..572c1611c1 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/faust-dynamic-engine.cpp @@ -0,0 +1,470 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2014 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + +************************************************************************/ + +#include +#include +#include +#include +#include + +#include "faust/gui/JSONUI.h" +#include "faust/gui/APIUI.h" +#include "faust/dsp/llvm-dsp.h" + +#if defined(_WIN32) + + #define STRDUP _strdup + #include "faust/audio/portaudio-dsp.h" + +#elif defined(__APPLE__) + + #define STRDUP strdup + #if defined(TARGET_OS_IPHONE) + #include "faust/audio/coreaudio-ios-dsp" + #else + #include "faust/audio/coreaudio-dsp.h" + #endif + +#elif defined(__linux__) + + #define STRDUP strdup + #if defined(ANDROID) + #include "faust/audio/android-dsp.h" + #else + #include "faust/audio/alsa-dsp.h" + #endif + +#endif + +#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) + #define HAS_JACK 1 +#endif + +#if HAS_JACK + #include "faust/audio/jack-dsp.h" +#endif + +#if !defined(LLVM_DSP) + +/**************************BEGIN USER SECTION **************************/ + +<> + +<> + +/***************************END USER SECTION ***************************/ + +#endif + +//************************************************************** +// APIUI : Faust User Interface +// This class a simple parameter based interface +//************************************************************** + +using namespace std; + +enum { kPortAudioRenderer = 0, kJackRenderer, kCoreAudioRenderer, kiOSRenderer, kAlsaRenderer, kAndroidRenderer }; + +//************************************************************** +// Globals +//************************************************************** + +static string gLastError; + +// DSP wrapper + +struct dsp_aux { + +#ifdef LLVM_DSP + llvm_dsp_factory* fFactory; +#endif + dsp* fDSP; + audio* fDriver; + APIUI fParams; + string fJSON; + +#ifdef LLVM_DSP + dsp_aux(const char* name_app, + const char* dsp_content, + const char* argv, + const char* target, + int opt_level) + :fDriver(0) + { + int argc1 = 0; + const char* argv1[64]; + stringstream os(argv); + string token; + + // Allocate parameters + while (os >> token) { + argv1[argc1++] = STRDUP(token.c_str()); + } + + #ifdef _WIN32 + argv1[argc1++] = STRDUP("-l"); + argv1[argc1++] = STRDUP("llvm_math.ll"); + #endif + + fFactory = createDSPFactoryFromString(name_app, dsp_content, argc1, argv1, "", gLastError, opt_level); + + // Free parameters + for (int i = 0; i < argc1; i++) { + free((void*)argv1[i]); + } + + if (fFactory) { + fDSP = fFactory->createDSPInstance(); + createJSON(name_app); + } else { + throw std::bad_alloc(); + } + } +#else + dsp_aux():fDriver(0) + { + fDSP = new mydsp(); + createJSON("dummy_dsp"); + } +#endif + + virtual ~dsp_aux() + { + if (fDriver) { + fDriver->stop(); + delete fDriver; + } + delete fDSP; + #ifdef LLVM_DSP + deleteDSPFactory(fFactory); + #endif + } + + void createJSON(const string& name_app) + { + // JSON creation + JSONUI json(name_app, "", fDSP->getNumInputs(), fDSP->getNumOutputs()); + fDSP->buildUserInterface(&json); + fDSP->metadata(&json); + fJSON = json.JSON(); + } + + bool init2(const char* name, int sr, int bsize, int renderer) + { + switch (renderer) { + #ifdef HAS_JACK + case kJackRenderer: + fDriver = new jackaudio(); + break; + #endif + + #ifdef _WIN32 + case kPortAudioRenderer: + fDriver = new portaudio(sr, bsize); + break; + #endif + + #ifdef __APPLE__ + #if defined(TARGET_OS_IPHONE) + case kCoreAudioRenderer: + fDriver = new coreaudio(sr, bsize); + break; + #else + case kiOSRenderer: + fDriver = new iosaudio(sr, bsize); + break; + #endif + #endif + + #ifdef __linux__ + #if defined(ANDROID) + case kAndroidRenderer: + fDriver = new androidaudio(sr, bsize); + break; + #else + case kAlsaRenderer: + fDriver = new alsaaudio(sr, bsize); + break; + #endif + #endif + + }; + + if (fDriver) { + fDriver->init(name, fDSP); + fDSP->buildUserInterface(&fParams); + return true; + } else { + return false; + } + } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + +}; + +#if HAS_JACK +static audio* createDriver() +{ + return new jackaudio(0, 0); +} + +static jackaudio* getJackDriver(dsp* dsp_ext) +{ + return (dsp_ext) ? dynamic_cast(reinterpret_cast(dsp_ext)->fDriver) : 0; +} +#endif + +// Exported external API + +#ifdef __cplusplus +extern "C" +{ +#endif + + int getNumInputsDsp(dsp* dsp_ext) + { + #if HAS_JACK + if (dsp_ext) { + return reinterpret_cast(dsp_ext)->getNumInputs(); + } else { + int res = 0; + audio* driver = createDriver(); + if (driver && driver->init("dummy", 0)) { + res = driver->getNumInputs(); + delete driver; + } + return res; + } + #else + return -1; + #endif + } + + int getNumOutputsDsp(dsp* dsp_ext) + { + #if HAS_JACK + if (dsp_ext) { + return reinterpret_cast(dsp_ext)->getNumOutputs(); + } else { + int res = 0; + audio* driver = createDriver(); + if (driver && driver->init("dummy", 0)) { + res = driver->getNumInputs(); + delete driver; + } + return res; + } + #else + return -1; + #endif + } + + void connectDsp(dsp* dsp1_ext, dsp* dsp2_ext, int src, int dst) + { + #if HAS_JACK + jackaudio* driver1 = getJackDriver(dsp1_ext); + jackaudio* driver2 = getJackDriver(dsp2_ext); + if (driver1 == NULL && driver2 == NULL) return; + + if (driver1 == NULL) { + // Connnection with physical input + driver2->connect(driver1, src, dst, true); + } else if (driver2 == NULL) { + // Connnection with physical output + driver1->connect(driver2, src, dst, false); + } else { + // Connnection between drivers + driver1->connect(driver2, src, dst, false); + } + #endif + } + + void disconnectDsp(dsp* dsp1_ext, dsp* dsp2_ext, int src, int dst) + { + #if HAS_JACK + jackaudio* driver1 = getJackDriver(dsp1_ext); + jackaudio* driver2 = getJackDriver(dsp2_ext); + if (driver1 == NULL && driver2 == NULL) return; + + if (driver1 == NULL) { + // Disconnnection with physical input + driver2->disconnect(driver1, src, dst, true); + } else if (driver2 == NULL) { + // Disconnnection with physical output + driver1->disconnect(driver2, src, dst, false); + } else { + // Disconnnection between drivers + driver1->disconnect(driver2, src, dst, false); + } + #endif + } + + bool isConnectedDsp(dsp* dsp1_ext, dsp* dsp2_ext, int src, int dst) + { + #if HAS_JACK + jackaudio* driver1 = getJackDriver(dsp1_ext); + jackaudio* driver2 = getJackDriver(dsp2_ext); + if (driver1 == NULL && driver2 == NULL) false; + + if (driver1 == NULL) { + // Connection test with physical input + return driver2->isConnected(driver1, src, dst, true); + } else if (driver2 == NULL) { + // Connection test with physical output + return driver1->isConnected(driver2, src, dst, false); + } else { + // Connection test between Dsp + return driver1->isConnected(driver2, src, dst, false); + } + #endif + } + + dsp* create2Dsp(const char* name_app, const char* dsp_content, const char* argv, const char* target, int opt_level) + { + #ifdef LLVM_DSP + try { + return reinterpret_cast(new dsp_aux(name_app, dsp_content, argv, target, opt_level)); + } catch (...) { + cerr << "Cannot create DSP\n"; + } + #endif + return 0; + } + + dsp* create1Dsp(const char* name_app, const char* dsp_content) + { + #ifdef LLVM_DSP + return create2Dsp(name_app, dsp_content, "", "", 3); + #else + return 0; + #endif + } + + dsp* create3Dsp() + { + #ifdef LLVM_DSP + return 0; + #else + return reinterpret_cast(new dsp_aux()); + #endif + } + + const char* getLastError() { return gLastError.c_str(); } + + bool init2Dsp(dsp* dsp_ext, const char* name, int sr, int bsize, int renderer) + { + return reinterpret_cast(dsp_ext)->init2(name, sr, bsize, renderer); + } + + bool init1Dsp(dsp* dsp, const char* name) + { + return init2Dsp(dsp, name, -1, 512, kJackRenderer); + //return init2(dsp, name, 44100, 2048, kPortAudioRenderer); + //return init2(dsp, name, 44100, 512, kCoreAudioRenderer); + } + + void destroyDsp(dsp* dsp_ext) + { + delete reinterpret_cast(dsp_ext); + } + + bool startDsp(dsp* dsp_ext) + { + return reinterpret_cast(dsp_ext)->fDriver->start(); + } + + void stopDsp(dsp* dsp_ext) + { + return reinterpret_cast(dsp_ext)->fDriver->stop(); + } + + /* + * Faust objects have control parameters that can be read and changed. + * getParamsCountDsp() returns the number n of such parameters + * + * getParamAddressDsp(int index) retrieves the name of a parameter by its index + * getParamIndexDsp(const char* name) retrieves the index of a parameter by its name + * + * getNamedParamDsp(const char* name) retrieves the value of a parameter by its name + * getIndexParamDsp(int i) retrieves the value of a parameter by its index + */ + const char* getJSONDsp(dsp* dsp_ext) { return reinterpret_cast(dsp_ext)->fJSON.c_str();} + + int getParamsCountDsp(dsp* dsp_ext) { return reinterpret_cast(dsp_ext)->fParams.getParamsCount(); } + + int getParamIndexDsp(dsp* dsp_ext, const char* name) { return reinterpret_cast(dsp_ext)->fParams.getParamIndex(name); } + const char* getParamAddressDsp(dsp* dsp_ext, int p) { return reinterpret_cast(dsp_ext)->fParams.getParamAddress(p); } + const char* getParamUnitDsp(dsp* dsp_ext, int p) { return reinterpret_cast(dsp_ext)->fParams.getMetadata(p, "unit"); } // [unit: Hz] metadata -> "Hz" + FAUSTFLOAT getParamMinDsp(dsp* dsp_ext, int p) { return reinterpret_cast(dsp_ext)->fParams.getParamMin(p); } + FAUSTFLOAT getParamMaxDsp(dsp* dsp_ext, int p) { return reinterpret_cast(dsp_ext)->fParams.getParamMax(p); } + FAUSTFLOAT getParamStepDsp(dsp* dsp_ext, int p) { return reinterpret_cast(dsp_ext)->fParams.getParamStep(p); } + + FAUSTFLOAT getParamValueDsp(dsp* dsp_ext, int p) { return reinterpret_cast(dsp_ext)->fParams.getParamValue(p); } + void setParamValueDsp(dsp* dsp_ext, int p, FAUSTFLOAT v) { return reinterpret_cast(dsp_ext)->fParams.setParamValue(p,v); } + + FAUSTFLOAT getParamRatioDsp(dsp* dsp_ext, int p) { return reinterpret_cast(dsp_ext)->fParams.getParamRatio(p); } + void setParamRatioDsp(dsp* dsp_ext, int p, FAUSTFLOAT v) { return reinterpret_cast(dsp_ext)->fParams.setParamRatio(p,v); } + + FAUSTFLOAT value2ratioDsp(dsp* dsp_ext, int p, FAUSTFLOAT r) { return reinterpret_cast(dsp_ext)->fParams.value2ratio(p, r); } + FAUSTFLOAT ratio2valueDsp(dsp* dsp_ext, int p, FAUSTFLOAT r) { return reinterpret_cast(dsp_ext)->fParams.ratio2value(p, r); } + + void propagateAccDsp(dsp* dsp_ext, int acc, FAUSTFLOAT a) { reinterpret_cast(dsp_ext)->fParams.propagateAcc(acc, a); } + void setAccConverterDsp(dsp* dsp_ext, int p, int acc, int curve, FAUSTFLOAT amin, FAUSTFLOAT amid, FAUSTFLOAT amax) + { + reinterpret_cast(dsp_ext)->fParams.setAccConverter(p, acc, curve, double(amin), double(amid), double(amax)); + } + void getAccConverterDsp(dsp* dsp_ext, int p, int* acc, int* curve, FAUSTFLOAT* amin, FAUSTFLOAT* amid, FAUSTFLOAT* amax) + { + double amin_tmp, amid_tmp, amax_tmp; + int acc_tmp, curve_tmp; + reinterpret_cast(dsp_ext)->fParams.getAccConverter(p, acc_tmp, curve_tmp, amin_tmp, amid_tmp, amax_tmp); + *acc = acc_tmp; + *curve = curve_tmp; + *amin = FAUSTFLOAT(amin_tmp); + *amin = FAUSTFLOAT(amid_tmp); + *amin = FAUSTFLOAT(amax_tmp); + } + + void propagateGyrDsp(dsp* dsp_ext, int acc, FAUSTFLOAT a) { return reinterpret_cast(dsp_ext)->fParams.propagateGyr(acc, a); } + void setGyrConverterDsp(dsp* dsp_ext, int p, int acc, int curve, FAUSTFLOAT amin, FAUSTFLOAT amid, FAUSTFLOAT amax) + { + reinterpret_cast(dsp_ext)->fParams.setGyrConverter(p, acc, curve, double(amin), double(amid), double(amax)); + } + void getGyrConverterDsp(dsp* dsp_ext, int p, int* acc, int* curve, FAUSTFLOAT* amin, FAUSTFLOAT* amid, FAUSTFLOAT* amax) + { + double amin_tmp, amid_tmp, amax_tmp; + int acc_tmp, curve_tmp; + reinterpret_cast(dsp_ext)->fParams.getGyrConverter(p, acc_tmp, curve_tmp, amin_tmp, amid_tmp, amax_tmp); + *acc = acc_tmp; + *curve = curve_tmp; + *amin = FAUSTFLOAT(amin_tmp); + *amin = FAUSTFLOAT(amid_tmp); + *amin = FAUSTFLOAT(amax_tmp); + } + +#ifdef __cplusplus +} +#endif diff --git a/source/DEINDUGens/include/faust/dsp/faust-dynamic-engine.h b/source/DEINDUGens/include/faust/dsp/faust-dynamic-engine.h new file mode 100644 index 0000000000..d64d021c47 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/faust-dynamic-engine.h @@ -0,0 +1,105 @@ + +/************************************************************************ +FAUST API +Copyright (C) 2015-2016 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This file describe a simple C API for Faust objects including the audio drivers. + +************************************************************************ +************************************************************************/ + +/* + * Faust objects are first initialized with the desired name, and optionally + * sampling rate and buffer size. Then start() is called to open the drivers and + * start processing audio until stop() is called. + */ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct {} dsp; + + enum { kPortAudioRenderer = 0, kJackRenderer, kCoreAudioRenderer, kiOSRenderer, kAlsaRenderer, kAndroidRenderer }; + + const char* getLastError(); + + // Creation API + + // Dynamic DSP creation using libfaust and LLVM + dsp* create1Dsp(const char* name_app, const char* dsp_content); + dsp* create2Dsp(const char* name_app, const char* dsp_content, const char* argv, const char* target, int opt_level); + + // Static DSP creation + dsp* create3Dsp(); + + void destroyDsp(dsp* dsp); + + bool init1Dsp(dsp* dsp, const char* name); ///< init Faust object with default system values + bool init2Dsp(dsp* dsp, const char* name, int renderer, int sr, int bsize); ///< init the Faust object + + bool startDsp(dsp* dsp); ///< open the audio drivers and starts processing audio + void stopDsp(dsp* dsp); ///< stop processing audio and closes the audio drivers + + // Connection API + int getNumInputsDsp(dsp* dsp); // Using NULL means physical input + int getNumOutputsDsp(dsp* dsp); // Using NULL means physical output + + // When used with JACK : using NULL for dsp1 means physical input, + // NULL for dsp2 means physical output + void connectDsp(dsp* dsp1, dsp* dsp2, int src, int dst); + void disconnectDsp(dsp* dsp1, dsp* dsp2, int src, int dst); + bool isConnectedDsp(dsp* dsp1, dsp* dsp2, int src, int dst); + + /* + * Faust objects have control parameters that can be read and changed. + * getParamsCount() returns the number n of such parameters + * + * getParamAddress(int index) retrieves the name of a parameter by its index + * getParamIndex(const char* name) retrieves the index of a parameter by its name + * + * getNamedParam(const char* name) retrieves the value of a parameter by its name + * getIndexParam(int i) retrieves the value of a parameter by its index + */ + const char* getJSONDsp(dsp* dsp); ///< JSON description of the UI + + int getParamsCountDsp(dsp* dsp); ///< number of control parameters + int getParamIndexDsp(dsp* dsp, const char* name); ///< returns the index of parameter name or -1 + + const char* getParamAddressDsp(dsp* dsp, int p); ///< returns the name of parameter p + const char* getParamUnitDsp(dsp* dsp, int p); ///< returns the name of parameter p + FAUSTFLOAT getParamMinDsp(dsp* dsp, int p); ///< returns the min value of parameter p + FAUSTFLOAT getParamMaxDsp(dsp* dsp, int p); ///< returns the max value of parameter p + FAUSTFLOAT getParamStepDsp(dsp* dsp, int p); ///< returns the min value of parameter p + + FAUSTFLOAT getParamValueDsp(dsp* dsp, int p); ///< returns the value of parameter p + void setParamValueDsp(dsp* dsp, int p, FAUSTFLOAT v); ///< set the value of parameter p + + FAUSTFLOAT getParamRatioDsp(dsp* dsp, int p); ///< returns the ratio (normalized value in 0..1) of parameter p + void setParamRatioDsp(dsp* dsp, int p, FAUSTFLOAT v); ///< set the ratio (normalized value in 0..1) of parameter p + + ///< propagate 'acc' accelerometer influence to related parameters + void propagateAccDsp(dsp* dsp, int acc, FAUSTFLOAT a); + ///. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __faust_engine__ @@ -31,7 +37,7 @@ extern "C" { bool isRunning(void*); - long keyOn(void*, int, int); + unsigned long keyOn(void*, int, int); int keyOff(void*, int); void propagateMidi(void*, int, double, int, int, int, int); @@ -47,8 +53,8 @@ extern "C" { void setParamIdValue(void*, int, float); float getParamIdValue(void*, int); - void setVoiceParamValue(void*, const char*, long, float); - float getVoiceParamValue(void*, const char*, long); + void setVoiceParamValue(void*, const char*, unsigned long, float); + float getVoiceParamValue(void*, const char*, unsigned long); const char* getParamAddress(void*, int); diff --git a/source/DEINDUGens/include/faust/dsp/faust-poly-engine.h b/source/DEINDUGens/include/faust/dsp/faust-poly-engine.h index ff4091b858..558f00c16f 100644 --- a/source/DEINDUGens/include/faust/dsp/faust-poly-engine.h +++ b/source/DEINDUGens/include/faust/dsp/faust-poly-engine.h @@ -1,20 +1,25 @@ /************************************************************************ - ************************************************************************ - FAUST Polyphonic Architecture File + FAUST Architecture File Copyright (C) 2013 GRAME, Romain Michon, CCRMA - Stanford University - Copyright (C) 2003-2015 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - - This is sample code. This file is provided as an example of minimal - FAUST architecture file. Redistribution and use in source and binary - forms, with or without modification, in part or in full are permitted. - In particular you can create a derived work of this FAUST architecture - and distribute that work under terms of your choice. - - This sample code is distributed in the hope that it will be useful, + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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. - ************************************************************************ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __faust_poly_engine__ @@ -24,7 +29,6 @@ #include #include -#include "faust/misc.h" #include "faust/dsp/dsp.h" #include "faust/audio/audio.h" #include "faust/gui/meta.h" @@ -33,7 +37,6 @@ #include "faust/gui/MidiUI.h" #include "faust/dsp/poly-dsp.h" #include "faust/dsp/faust-engine.h" -#include "faust/dsp/dsp-combiner.h" //************************************************************** // Mono or polyphonic audio DSP engine @@ -58,16 +61,21 @@ class FaustPolyEngine { midi_handler fMidiHandler; MidiUI fMidiUI; - void init(dsp* mono_dsp, audio* driver) + bool checkPolyphony(dsp* mono_dsp) + { + if (fJSONUI.find("keyboard") != std::string::npos) return true; + if (fJSONUI.find("poly") != std::string::npos) return true; + return MidiMeta::checkPolyphony(mono_dsp); + } + + void init(dsp* mono_dsp, audio* driver, midi_handler* midi) { bool midi_sync = false; int nvoices = 0; + fRunning = false; MidiMeta::analyse(mono_dsp, midi_sync, nvoices); - fDriver = driver; - fRunning = false; - // Getting the UI JSON JSONUI jsonui1(mono_dsp->getNumInputs(), mono_dsp->getNumOutputs()); mono_dsp->buildUserInterface(&jsonui1); @@ -78,12 +86,11 @@ class FaustPolyEngine { mono_dsp->metadata(&jsonui1M); fJSONMeta = jsonui1M.JSON(); - if (fJSONUI.find("keyboard") != std::string::npos - || fJSONUI.find("poly") != std::string::npos - || nvoices > 0) { + if (checkPolyphony(mono_dsp) && (nvoices > 0)) { fPolyDSP = new mydsp_poly(mono_dsp, nvoices, true); fMidiHandler.addMidiIn(fPolyDSP); + if (midi) midi->addMidiIn(fPolyDSP); #if POLY2 fFinalDSP = new dsp_sequencer(fPolyDSP, new effect()); @@ -95,6 +102,7 @@ class FaustPolyEngine { JSONUI jsonui2(mono_dsp->getNumInputs(), mono_dsp->getNumOutputs()); fFinalDSP->buildUserInterface(&jsonui2); fJSONUI = jsonui2.JSON(); + JSONUI jsonui2M(mono_dsp->getNumInputs(), mono_dsp->getNumOutputs()); fFinalDSP->metadata(&jsonui2M); fJSONMeta = jsonui2M.JSON(); @@ -107,21 +115,41 @@ class FaustPolyEngine { fFinalDSP->buildUserInterface(&fMidiUI); fFinalDSP->buildUserInterface(&fAPIUI); - fDriver->init("Dummy", fFinalDSP); + // Retrieving DSP object name + struct MyMeta : public Meta + { + string fName; + void declare(const char* key, const char* value) + { + if (strcmp(key, "name") == 0) fName = value; + } + MyMeta():fName("Dummy"){} + }; + + MyMeta meta; + fFinalDSP->metadata(&meta); + if (midi) midi->setName(meta.fName); + + if (driver) { + // If driver cannot be initialized, start will fail later on... + if (!driver->init(meta.fName.c_str(), fFinalDSP)) { + delete driver; + fDriver = NULL; + } else { + fDriver = driver; + } + } else { + fDriver = NULL; + } } public: - FaustPolyEngine(audio* driver = NULL):fMidiUI(&fMidiHandler) + FaustPolyEngine(dsp* mono_dsp, audio* driver = NULL, midi_handler* midi = NULL):fMidiUI(&fMidiHandler) { - init(new mydsp(), driver); + init(((mono_dsp) ? mono_dsp : new mydsp()), driver, midi); } - FaustPolyEngine(dsp* mono_dsp, audio* driver):fMidiUI(&fMidiHandler) - { - init(mono_dsp, driver); - } - virtual ~FaustPolyEngine() { delete fDriver; @@ -136,11 +164,11 @@ class FaustPolyEngine { bool start() { if (!fRunning) { - fRunning = fDriver->start(); + fRunning = (fDriver) ? fDriver->start() : false; } return fRunning; } - + /* * isRunning() * Returns true if the DSP frames are being computed and @@ -159,10 +187,13 @@ class FaustPolyEngine { { if (fRunning) { fRunning = false; - fDriver->stop(); + if (fDriver) fDriver->stop(); } } + void setGroup(bool group) { if (fPolyDSP) fPolyDSP->setGroup(group); } + bool getGroup() { return (fPolyDSP) ? fPolyDSP->getGroup() : false; } + /* * keyOn(pitch, velocity) * Instantiates a new polyphonic voice where velocity @@ -226,10 +257,10 @@ class FaustPolyEngine { } /* - * deleteVoice(long voice) - * Delete a voice based on its MapUI* casted as a long. + * deleteVoice(unsigned long voice) + * Delete a voice based on its MapUI* casted as a unsigned long. */ - int deleteVoice(long voice) + int deleteVoice(unsigned long voice) { return deleteVoice(reinterpret_cast(voice)); } @@ -278,12 +309,17 @@ class FaustPolyEngine { /* * buildUserInterface(ui) - * Calls the polyphonic of monophonic buildUserInterface with the ui parameter. + * Calls the polyphonic or monophonic buildUserInterface with the ui parameter. */ void buildUserInterface(UI* ui_interface) { fFinalDSP->buildUserInterface(ui_interface); } + + void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + fFinalDSP->compute(count, inputs, outputs); + } /* * getParamsCount() @@ -300,7 +336,7 @@ class FaustPolyEngine { */ void setParamValue(const char* address, float value) { - int id = fAPIUI.getParamIndex(address); + int id = (address) ? fAPIUI.getParamIndex(address) : -1; if (id >= 0) { fAPIUI.setParamValue(id, value); // In POLY mode, update all voices @@ -315,7 +351,7 @@ class FaustPolyEngine { */ float getParamValue(const char* address) { - int id = fAPIUI.getParamIndex(address); + int id = (address) ? fAPIUI.getParamIndex(address) : -1; return (id >= 0) ? fAPIUI.getParamValue(id) : 0.f; } @@ -346,7 +382,7 @@ class FaustPolyEngine { * the voice. setVoiceParamValue can only be * used if the [style:poly] metadata is used in the Faust code. */ - void setVoiceParamValue(const char* address, long voice, float value) + void setVoiceParamValue(const char* address, unsigned long voice, float value) { reinterpret_cast(voice)->setParamValue(address, value); } @@ -357,7 +393,7 @@ class FaustPolyEngine { * the voice. setVoiceParamValue can only be * used if the [style:poly] metadata is used in the Faust code. */ - void setVoiceParamValue(int id, long voice, float value) + void setVoiceParamValue(int id, unsigned long voice, float value) { reinterpret_cast(voice)->setParamValue(reinterpret_cast(voice)->getParamAddress(id), value); } @@ -368,7 +404,7 @@ class FaustPolyEngine { * getVoiceParamValue can only be used if the [style:poly] metadata * is used in the Faust code. */ - float getVoiceParamValue(const char* address, long voice) + float getVoiceParamValue(const char* address, unsigned long voice) { return reinterpret_cast(voice)->getParamValue(address); } @@ -379,7 +415,7 @@ class FaustPolyEngine { * getVoiceParamValue can only be used if the [style:poly] metadata * is used in the Faust code. */ - float getVoiceParamValue(int id, long voice) + float getVoiceParamValue(int id, unsigned long voice) { return reinterpret_cast(voice)->getParamValue(reinterpret_cast(voice)->getParamAddress(id)); } @@ -398,7 +434,7 @@ class FaustPolyEngine { * Returns the address of a parameter for a specific voice * in function of its "id". */ - const char* getVoiceParamAddress(int id, long voice) + const char* getVoiceParamAddress(int id, unsigned long voice) { return reinterpret_cast(voice)->getParamAddress(id).c_str(); } @@ -409,7 +445,7 @@ class FaustPolyEngine { */ float getParamMin(const char* address) { - int id = fAPIUI.getParamIndex(address); + int id = (address) ? fAPIUI.getParamIndex(address) : -1; return (id >= 0) ? fAPIUI.getParamMin(id) : 0.f; } @@ -428,7 +464,7 @@ class FaustPolyEngine { */ float getParamMax(const char* address) { - int id = fAPIUI.getParamIndex(address); + int id = (address) ? fAPIUI.getParamIndex(address) : -1; return (id >= 0) ? fAPIUI.getParamMax(id) : 0.f; } @@ -447,7 +483,7 @@ class FaustPolyEngine { */ float getParamInit(const char* address) { - int id = fAPIUI.getParamIndex(address); + int id = (address) ? fAPIUI.getParamIndex(address) : -1; return (id >= 0) ? fAPIUI.getParamInit(id) : 0.f; } @@ -461,22 +497,22 @@ class FaustPolyEngine { } /* - * getParamTooltip(address) - * Returns the tooltip of a parameter. + * getMetadata(address, key) + * Returns the metadata of a parameter. */ - const char* getParamTooltip(const char* address) + const char* getMetadata(const char* address, const char* key) { - int id = fAPIUI.getParamIndex(address); - return (id >= 0) ? fAPIUI.getParamTooltip(id) : ""; + int id = (address) ? fAPIUI.getParamIndex(address) : -1; + return (id >= 0) ? fAPIUI.getMetadata(id, key) : ""; } /* - * getParamTooltip(id) - * Returns the tooltip of a parameter. + * getMetadata(id, key) + * Returns the metadata of a parameter. */ - const char* getParamTooltip(int id) + const char* getMetadata(int id, const char* key) { - return fAPIUI.getParamTooltip(id); + return fAPIUI.getMetadata(id, key); } /* @@ -495,7 +531,7 @@ class FaustPolyEngine { */ void setAccConverter(int p, int acc, int curve, float amin, float amid, float amax) { - fAPIUI.setAccConverter(p, acc, curve, amin, amid, amax); + fAPIUI.setAccConverter(p, acc, curve, amin, amid, amax); } /* @@ -521,7 +557,7 @@ class FaustPolyEngine { * getCPULoad() * Return DSP CPU load. */ - float getCPULoad() { return fDriver->get_cpu_load(); } + float getCPULoad() { return (fDriver) ? fDriver->getCPULoad() : 0.f; } /* * getScreenColor() -> c:int @@ -549,7 +585,7 @@ extern "C" { bool isRunning(void* dsp) { return reinterpret_cast(dsp)->isRunning(); } - long keyOn(void* dsp, int pitch, int velocity) { return (long)reinterpret_cast(dsp)->keyOn(pitch, velocity); } + unsigned long keyOn(void* dsp, int pitch, int velocity) { return (unsigned long)reinterpret_cast(dsp)->keyOn(pitch, velocity); } int keyOff(void* dsp, int pitch) { return reinterpret_cast(dsp)->keyOff(pitch); } void propagateMidi(void* dsp, int count, double time, int type, int channel, int data1, int data2) @@ -568,11 +604,11 @@ extern "C" { void setParamIdValue(void* dsp, int id, float value) { reinterpret_cast(dsp)->setParamValue(id, value); } float getParamIdValue(void* dsp, int id) { return reinterpret_cast(dsp)->getParamValue(id); } - void setVoiceParamValue(void* dsp, const char* address, long voice, float value) + void setVoiceParamValue(void* dsp, const char* address, unsigned long voice, float value) { reinterpret_cast(dsp)->setVoiceParamValue(address, voice, value); } - float getVoiceParamValue(void* dsp, const char* address, long voice) { return reinterpret_cast(dsp)->getVoiceParamValue(address, voice); } + float getVoiceParamValue(void* dsp, const char* address, unsigned long voice) { return reinterpret_cast(dsp)->getVoiceParamValue(address, voice); } const char* getParamAddress(void* dsp, int id) { return reinterpret_cast(dsp)->getParamAddress(id); } diff --git a/source/DEINDUGens/include/faust/dsp/interpreter-dsp.h b/source/DEINDUGens/include/faust/dsp/interpreter-dsp.h new file mode 100644 index 0000000000..a69a466db9 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/interpreter-dsp.h @@ -0,0 +1,259 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef INTERPRETER_DSP_H +#define INTERPRETER_DSP_H + +#ifdef _WIN32 +#define DEPRECATED(fun) __declspec(deprecated) fun +#else +#define DEPRECATED(fun) fun __attribute__ ((deprecated)); +#endif + +#include +#include +#include "faust/dsp/dsp.h" +#include "faust/gui/meta.h" + +/*! + \addtogroup interpretercpp C++ interface for compiling Faust code. Note that the API is not thread safe. + @{ + */ + +/** + * Get the library version. + * + * @return the library version as a static string. + */ +extern "C" const char* getCLibFaustVersion(); + +/** + * DSP instance class with methods. + */ +class interpreter_dsp : public dsp { + + private: + + // interpreter_dsp objects are allocated using interpreter_dsp_factory::createDSPInstance(); + interpreter_dsp() {} + + public: + + int getNumInputs(); + + int getNumOutputs(); + + void buildUserInterface(UI* ui_interface); + + int getSampleRate(); + + void init(int samplingRate); + + void instanceInit(int samplingRate); + + void instanceConstants(int samplingRate); + + void instanceResetUserInterface(); + + void instanceClear(); + + interpreter_dsp* clone(); + + void metadata(Meta* m); + + void compute(int count, FAUSTFLOAT** input, FAUSTFLOAT** output); + +}; + +/** +* Interpreter DSP factory class. +*/ + +class interpreter_dsp_factory : public dsp_factory { + + public: + + virtual ~interpreter_dsp_factory(); + + /** + * Return factory name: + * either the name declared in DSP with [declare name "foo"] syntax + * or 'filename' (if createInterpreterDSPFactoryFromFile is used) + * or 'name_app' (if createInterpreterDSPFactoryFromString is used) + */ + std::string getName(); + + /* Return factory SHA key */ + std::string getSHAKey(); + + /* Return factory expanded DSP code */ + std::string getDSPCode(); + + /* Return factory compile options */ + std::string getCompileOptions(); + + /* Get the Faust DSP factory list of library dependancies */ + std::vector getLibraryList(); + + /* Get the list of all used includes */ + std::vector getIncludePathnames(); + + /* Create a new DSP instance, to be deleted with C++ 'delete' */ + interpreter_dsp* createDSPInstance(); + + /* Set a custom memory manager to be used when creating instances */ + void setMemoryManager(dsp_memory_manager* manager); + + /* Return the currently set custom memory manager */ + dsp_memory_manager* getMemoryManager(); + +}; + +/** + * Get the Faust DSP factory associated with a given SHA key (created from the 'expanded' DSP source), + * if already allocated in the factories cache and increment it's reference counter. You will have to explicitly + * use deleteInterpreterDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param sha_key - the SHA key for an already created factory, kept in the factory cache + * + * @return a DSP factory if one is associated with the SHA key, otherwise a null pointer. + */ +interpreter_dsp_factory* getInterpreterDSPFactoryFromSHAKey(const std::string& sha_key); + +/** + * Create a Faust DSP factory from a DSP source code as a file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of same DSP code (that is same source code and + * same set of 'normalized' compilations options) will return the same (reference counted) factory pointer. You will have to explicitly + * use deleteInterpreterDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param error_msg - the error string to be filled + * + * @return a DSP factory on success, otherwise a null pointer. + */ +interpreter_dsp_factory* createInterpreterDSPFactoryFromFile(const std::string& filename, + int argc, const char* argv[], + std::string& error_msg); + +/** + * Create a Faust DSP factory from a DSP source code as a string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of same DSP code (that is same source code and + * same set of 'normalized' compilations options) will return the same (reference counted) factory pointer. You will have to explicitly + * use deleteDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param name_app - the name of the Faust program + * @param dsp_content - the Faust program as a string + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param error_msg - the error string to be filled + * + * @return a DSP factory on success, otherwise a null pointer. + */ +interpreter_dsp_factory* createInterpreterDSPFactoryFromString(const std::string& name_app, + const std::string& dsp_content, + int argc, const char* argv[], + std::string& error_msg); +/** + * Delete a Faust DSP factory, that is decrements it's reference counter, possibly really deleting the internal pointer. + * Possibly also delete DSP pointers associated with this factory, if they were not explicitly deleted. + * Beware : all kept factories and DSP pointers (in local variables...) thus become invalid. + * + * @param factory - the DSP factory + * + * @return true if the factory internal pointer was really deleted, and false if only 'decremented'. + */ +bool deleteInterpreterDSPFactory(interpreter_dsp_factory* factory); + +/** + * Get the list of library dependancies of the Faust DSP factory. + * + * @deprecated : use factory getInterpreterDSPFactoryLibraryList method. + * + * @param factory - the DSP factory + * + * @return the list as a vector of strings. + */ +DEPRECATED(std::vector getInterpreterDSPFactoryLibraryList(interpreter_dsp_factory* factory)); + +/** + * Delete all Faust DSP factories kept in the library cache. Beware : all kept factory and DSP pointers (in local variables...) thus become invalid. + * + */ +void deleteAllInterpreterDSPFactories(); + +/** + * Return Faust DSP factories of the library cache as a vector of their SHA keys. + * + * @return the Faust DSP factories. + */ +std::vector getAllInterpreterDSPFactories(); + +/** + * Create a Faust DSP factory from a bitcode string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same bitcode code string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteInterpreterDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bitcode_code - the bitcode string + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +interpreter_dsp_factory* readInterpreterDSPFactoryFromBitcode(const std::string& bitcode, std::string& error_msg); + +/** + * Write a Faust DSP factory into a bitcode string. + * + * @param factory - the DSP factory + * + * @return the bitcode as a string. + */ +std::string writeInterpreterDSPFactoryToBitcode(interpreter_dsp_factory* factory); + +/** + * Create a Faust DSP factory from a bitcode file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same Bitcode file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteInterpreterDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bitcode_path - the bitcode file pathname + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +interpreter_dsp_factory* readInterpreterDSPFactoryFromBitcodeFile(const std::string& bitcode_path, std::string& error_msg); + +/** + * Write a Faust DSP factory into a bitcode file. + * + * @param factory - the DSP factory + * @param bitcode_path - the bitcode file pathname + * + */ +void writeInterpreterDSPFactoryToBitcodeFile(interpreter_dsp_factory* factory, const std::string& bitcode_path); + +/*! + @} + */ + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/interpreter-machine-dsp.h b/source/DEINDUGens/include/faust/dsp/interpreter-machine-dsp.h new file mode 100644 index 0000000000..50a9ea21c2 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/interpreter-machine-dsp.h @@ -0,0 +1,225 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef INTERPRETER_MACHINE_DSP_H +#define INTERPRETER_MACHINE_DSP_H + +#ifdef _WIN32 +#define DEPRECATED(fun) __declspec(deprecated) fun +#else +#define DEPRECATED(fun) fun __attribute__ ((deprecated)); +#endif + +#include +#include + +#include "faust/dsp/dsp.h" +#include "faust/gui/meta.h" + +/*! + \addtogroup interpretercpp C++ interface for reading FBC code. Note that the API is not thread safe. + @{ + */ + +/** + * Get the library version. + * + * @return the library version as a static string. + */ +extern "C" const char* getCLibFaustVersion(); + +/** + * DSP instance class with methods. + */ +class interpreter_dsp : public dsp { + + private: + + // interpreter_dsp objects are allocated using interpreter_dsp_factory::createDSPInstance(); + interpreter_dsp() {} + + public: + + int getNumInputs(); + + int getNumOutputs(); + + void buildUserInterface(UI* ui_interface); + + int getSampleRate(); + + void init(int samplingRate); + + void instanceInit(int samplingRate); + + void instanceConstants(int samplingRate); + + void instanceResetUserInterface(); + + void instanceClear(); + + interpreter_dsp* clone(); + + void metadata(Meta* m); + + void compute(int count, FAUSTFLOAT** input, FAUSTFLOAT** output); + +}; + +/** +* Interpreter DSP factory class. +*/ + +class interpreter_dsp_factory : public dsp_factory { + + public: + + virtual ~interpreter_dsp_factory(); + + /** + * Return factory name: + * either the name declared in DSP with [declare name "foo"] syntax + * or 'filename' (if createInterpreterDSPFactoryFromFile is used) + * or 'name_app' (if createInterpreterDSPFactoryFromString is used) + */ + std::string getName(); + + /* Return factory SHA key */ + std::string getSHAKey(); + + /* Return factory expanded DSP code */ + std::string getDSPCode(); + + /* Return factory compile options */ + std::string getCompileOptions(); + + /* Get the Faust DSP factory list of library dependancies */ + std::vector getLibraryList(); + + /* Get the list of all used includes */ + std::vector getIncludePathnames(); + + /* Create a new DSP instance, to be deleted with C++ 'delete' */ + interpreter_dsp* createDSPInstance(); + + /* Set a custom memory manager to be used when creating instances */ + void setMemoryManager(dsp_memory_manager* manager); + + /* Return the currently set custom memory manager */ + dsp_memory_manager* getMemoryManager(); + +}; + +/** + * Get the Faust DSP factory associated with a given SHA key (created from the 'expanded' DSP source), + * if already allocated in the factories cache and increment it's reference counter. You will have to explicitly + * use deleteInterpreterDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param sha_key - the SHA key for an already created factory, kept in the factory cache + * + * @return a DSP factory if one is associated with the SHA key, otherwise a null pointer. + */ +interpreter_dsp_factory* getInterpreterDSPFactoryFromSHAKey(const std::string& sha_key); + +/** + * Delete a Faust DSP factory, that is decrements it's reference counter, possibly really deleting the internal pointer. + * Possibly also delete DSP pointers associated with this factory, if they were not explicitly deleted. + * Beware : all kept factories and DSP pointers (in local variables...) thus become invalid. + * + * @param factory - the DSP factory + * + * @return true if the factory internal pointer was really deleted, and false if only 'decremented'. + */ +bool deleteInterpreterDSPFactory(interpreter_dsp_factory* factory); + +/** + * Get the list of library dependancies of the Faust DSP factory. + * + * @deprecated : use factory getInterpreterDSPFactoryLibraryList method. + * + * @param factory - the DSP factory + * + * @return the list as a vector of strings. + */ +DEPRECATED(std::vector getInterpreterDSPFactoryLibraryList(interpreter_dsp_factory* factory)); + +/** + * Delete all Faust DSP factories kept in the library cache. Beware : all kept factory and DSP pointers (in local variables...) thus become invalid. + * + */ +void deleteAllInterpreterDSPFactories(); + +/** + * Return Faust DSP factories of the library cache as a vector of their SHA keys. + * + * @return the Faust DSP factories. + */ +std::vector getAllInterpreterDSPFactories(); + +/** + * Create a Faust DSP factory from a bitcode string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same bitcode code string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteInterpreterDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bitcode_code - the bitcode string + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +interpreter_dsp_factory* readInterpreterDSPFactoryFromBitcode(const std::string& bitcode, std::string& error_msg); + +/** + * Write a Faust DSP factory into a bitcode string. + * + * @param factory - the DSP factory + * + * @return the bitcode as a string. + */ +std::string writeInterpreterDSPFactoryToBitcode(interpreter_dsp_factory* factory); + +/** + * Create a Faust DSP factory from a bitcode file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same Bitcode file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteInterpreterDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bitcode_path - the bitcode file pathname + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +interpreter_dsp_factory* readInterpreterDSPFactoryFromBitcodeFile(const std::string& bitcode_path, std::string& error_msg); + +/** + * Write a Faust DSP factory into a bitcode file. + * + * @param factory - the DSP factory + * @param bitcode_path - the bitcode file pathname + * + */ +void writeInterpreterDSPFactoryToBitcodeFile(interpreter_dsp_factory* factory, const std::string& bitcode_path); + +/*! + @} + */ + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/libfaust-c.h b/source/DEINDUGens/include/faust/dsp/libfaust-c.h new file mode 100644 index 0000000000..9dbd061626 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/libfaust-c.h @@ -0,0 +1,290 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef LIBFAUST_C_H +#define LIBFAUST_C_H + +#include + +#ifdef _WIN32 +#define LIBEXPORT __declspec(dllexport) +#else +#define LIBEXPORT +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// Code by: B-Con (http://b-con.us) +// Released under the GNU GPL +// MD5 Hash Digest implementation (little endian byte order) + +// Signed variables are for wimps +#define uchar unsigned char +#define uint unsigned int + +// DBL_INT_ADD treats two unsigned ints a and b as one 64-bit integer and adds c to it +#define ROTLEFT(a, b) ((a << b) | (a >> (32 - b))) +#define DBL_INT_ADD(a, b, c) \ + if (a > 0xffffffff - c) ++b; \ + a += c; + +typedef struct { + uchar data[64]; + uint datalen; + uint bitlen[2]; + uint state[5]; + uint k[4]; +} SHA1_CTX; + +inline void sha1_transform(SHA1_CTX* ctx, uchar data[]) +{ + uint a, b, c, d, e, i, j, t, m[80]; + + for (i = 0, j = 0; i < 16; ++i, j += 4) { + m[i] = (data[j] << 24) + (data[j + 1] << 16) + (data[j + 2] << 8) + (data[j + 3]); + } + for (; i < 80; ++i) { + m[i] = (m[i - 3] ^ m[i - 8] ^ m[i - 14] ^ m[i - 16]); + m[i] = (m[i] << 1) | (m[i] >> 31); + } + + a = ctx->state[0]; + b = ctx->state[1]; + c = ctx->state[2]; + d = ctx->state[3]; + e = ctx->state[4]; + + for (i = 0; i < 20; ++i) { + t = ROTLEFT(a, 5) + ((b & c) ^ (~b & d)) + e + ctx->k[0] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + for (; i < 40; ++i) { + t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[1] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + for (; i < 60; ++i) { + t = ROTLEFT(a, 5) + ((b & c) ^ (b & d) ^ (c & d)) + e + ctx->k[2] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + for (; i < 80; ++i) { + t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[3] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + + ctx->state[0] += a; + ctx->state[1] += b; + ctx->state[2] += c; + ctx->state[3] += d; + ctx->state[4] += e; +} + +inline void sha1_init(SHA1_CTX* ctx) +{ + ctx->datalen = 0; + ctx->bitlen[0] = 0; + ctx->bitlen[1] = 0; + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xEFCDAB89; + ctx->state[2] = 0x98BADCFE; + ctx->state[3] = 0x10325476; + ctx->state[4] = 0xc3d2e1f0; + ctx->k[0] = 0x5a827999; + ctx->k[1] = 0x6ed9eba1; + ctx->k[2] = 0x8f1bbcdc; + ctx->k[3] = 0xca62c1d6; +} + +inline void sha1_update(SHA1_CTX* ctx, uchar data[], uint len) +{ + uint i; + + for (i = 0; i < len; ++i) { + ctx->data[ctx->datalen] = data[i]; + ctx->datalen++; + if (ctx->datalen == 64) { + sha1_transform(ctx, ctx->data); + DBL_INT_ADD(ctx->bitlen[0], ctx->bitlen[1], 512); + ctx->datalen = 0; + } + } +} + +static void sha1_final(SHA1_CTX* ctx, uchar hash[]) +{ + uint i; + + i = ctx->datalen; + + // Pad whatever data is left in the buffer. + if (ctx->datalen < 56) { + ctx->data[i++] = 0x80; + while (i < 56) { + ctx->data[i++] = 0x00; + } + } else { + ctx->data[i++] = 0x80; + while (i < 64) { + ctx->data[i++] = 0x00; + } + sha1_transform(ctx, ctx->data); + memset(ctx->data, 0, 56); + } + + // Append to the padding the total message's length in bits and transform. + DBL_INT_ADD(ctx->bitlen[0], ctx->bitlen[1], 8 * ctx->datalen); + ctx->data[63] = ctx->bitlen[0]; + ctx->data[62] = ctx->bitlen[0] >> 8; + ctx->data[61] = ctx->bitlen[0] >> 16; + ctx->data[60] = ctx->bitlen[0] >> 24; + ctx->data[59] = ctx->bitlen[1]; + ctx->data[58] = ctx->bitlen[1] >> 8; + ctx->data[57] = ctx->bitlen[1] >> 16; + ctx->data[56] = ctx->bitlen[1] >> 24; + sha1_transform(ctx, ctx->data); + + // Since this implementation uses little endian byte ordering and MD uses big endian, + // reverse all the bytes when copying the final state to the output hash. + for (i = 0; i < 4; ++i) { + hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff; + hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff; + hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff; + hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff; + hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff; + } +} + +/** + * Compute a SHA1 key from a string + * + * @param data - the string to be converted in SHA1 key + * @param key - a 64 characters buffer to be filled with the computed key + * + */ +LIBEXPORT inline void generateCSHA1(const char* data, char* sha_key) +{ + SHA1_CTX ctx; + unsigned char obuf[20] = {0}; + + // Hash one + sha1_init(&ctx); + sha1_update(&ctx, (unsigned char*)data, strlen(data)); + sha1_final(&ctx, obuf); + + // convert SHA1 key into hexadecimal string + for (int i = 0; i < 20; i++) { + const char* H = "0123456789ABCDEF"; + char c1 = H[(obuf[i] >> 4)]; + char c2 = H[(obuf[i] & 15)]; + sha_key += c1; + sha_key += c2; + } +} + +/** + * Expand a DSP source code into a self-contained DSP where all library import have been inlined starting from a + * filename. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use + * generateAuxFiles) + * @param sha_key - a SHA key to be filled by for the resulting DSP + * @param error_msg - the error string to be filled, has to be 4096 characters long + * + * @return the expanded DSP or a NULL string in case of failure (to be deleted by the caller using freeCMemory) + */ +LIBEXPORT const char* expandCDSPFromFile(const char* filename, int argc, const char* argv[], char* sha_key, + char* error_msg); + +/** + * Expand a DSP source code into a self-contained DSP where all library import have been inlined starting from a string. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use + * generateAuxFiles) + * @param sha_key - a SHA key to be filled by for the resulting DSP + * @param error_msg - the error string to be filled, has to be 4096 characters long + * + * @return the expanded DSP or a NULL string in case of failure (to be deleted by the caller using freeCMemory) + */ +LIBEXPORT const char* expandCDSPFromString(const char* name_app, const char* dsp_content, int argc, const char* argv[], + char* sha_key, char* error_msg); + +/** + * Generate additional file (other backends, SVG, XML, JSON...) starting from a filename. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param error_msg - the error string to be filled, has to be 4096 characters long + * + * @return the expanded DSP or a empty string in case of failure + */ +LIBEXPORT bool generateCAuxFilesFromFile(const char* filename, int argc, const char* argv[], char* error_msg); + +/** + * Generate additional file (other backends, SVG, XML, JSON...) starting from a string. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param error_msg - the error string to be filled, has to be 4096 characters long + * + * @return the expanded DSP or a empty string in case of failure + */ +LIBEXPORT bool generateCAuxFilesFromString(const char* name_app, const char* dsp_content, int argc, const char* argv[], + char* error_msg); + +/** + * The free function to be used on memory returned by getCDSPMachineTarget, getCName, getCSHAKey, + * getCDSPCode, getCLibraryList, getAllCDSPFactories, writeCDSPFactoryToBitcode, + * writeCDSPFactoryToIR, writeCDSPFactoryToMachine,expandCDSPFromString and expandCDSPFromFile. + * + * This is MANDATORY on Windows when otherwise all nasty runtime version related crashes can occur. + * + * @param ptr - the pointer to be deleted. + */ +LIBEXPORT void freeCMemory(void* ptr); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/libfaust.h b/source/DEINDUGens/include/faust/dsp/libfaust.h new file mode 100644 index 0000000000..18d1276ed9 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/libfaust.h @@ -0,0 +1,290 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef LIBFAUST_H +#define LIBFAUST_H + +#include + +#ifdef _WIN32 +#define LIBEXPORT __declspec(dllexport) +#else +#define LIBEXPORT +#endif + +// Code by: B-Con (http://b-con.us) +// Released under the GNU GPL +// MD5 Hash Digest implementation (little endian byte order) + +// Signed variables are for wimps +#define uchar unsigned char +#define uint unsigned int + +// DBL_INT_ADD treats two unsigned ints a and b as one 64-bit integer and adds c to it +#define ROTLEFT(a, b) ((a << b) | (a >> (32 - b))) +#define DBL_INT_ADD(a, b, c) \ + if (a > 0xffffffff - c) ++b; \ + a += c; + +typedef struct { + uchar data[64]; + uint datalen; + uint bitlen[2]; + uint state[5]; + uint k[4]; +} SHA1_CTX; + +inline void sha1_transform(SHA1_CTX* ctx, uchar data[]) +{ + uint a, b, c, d, e, i, j, t, m[80]; + + for (i = 0, j = 0; i < 16; ++i, j += 4) { + m[i] = (data[j] << 24) + (data[j + 1] << 16) + (data[j + 2] << 8) + (data[j + 3]); + } + for (; i < 80; ++i) { + m[i] = (m[i - 3] ^ m[i - 8] ^ m[i - 14] ^ m[i - 16]); + m[i] = (m[i] << 1) | (m[i] >> 31); + } + + a = ctx->state[0]; + b = ctx->state[1]; + c = ctx->state[2]; + d = ctx->state[3]; + e = ctx->state[4]; + + for (i = 0; i < 20; ++i) { + t = ROTLEFT(a, 5) + ((b & c) ^ (~b & d)) + e + ctx->k[0] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + for (; i < 40; ++i) { + t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[1] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + for (; i < 60; ++i) { + t = ROTLEFT(a, 5) + ((b & c) ^ (b & d) ^ (c & d)) + e + ctx->k[2] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + for (; i < 80; ++i) { + t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[3] + m[i]; + e = d; + d = c; + c = ROTLEFT(b, 30); + b = a; + a = t; + } + + ctx->state[0] += a; + ctx->state[1] += b; + ctx->state[2] += c; + ctx->state[3] += d; + ctx->state[4] += e; +} + +inline void sha1_init(SHA1_CTX* ctx) +{ + ctx->datalen = 0; + ctx->bitlen[0] = 0; + ctx->bitlen[1] = 0; + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xEFCDAB89; + ctx->state[2] = 0x98BADCFE; + ctx->state[3] = 0x10325476; + ctx->state[4] = 0xc3d2e1f0; + ctx->k[0] = 0x5a827999; + ctx->k[1] = 0x6ed9eba1; + ctx->k[2] = 0x8f1bbcdc; + ctx->k[3] = 0xca62c1d6; +} + +inline void sha1_update(SHA1_CTX* ctx, uchar data[], uint len) +{ + uint i; + + for (i = 0; i < len; ++i) { + ctx->data[ctx->datalen] = data[i]; + ctx->datalen++; + if (ctx->datalen == 64) { + sha1_transform(ctx, ctx->data); + DBL_INT_ADD(ctx->bitlen[0], ctx->bitlen[1], 512); + ctx->datalen = 0; + } + } +} + +static void sha1_final(SHA1_CTX* ctx, uchar hash[]) +{ + uint i; + + i = ctx->datalen; + + // Pad whatever data is left in the buffer. + if (ctx->datalen < 56) { + ctx->data[i++] = 0x80; + while (i < 56) { + ctx->data[i++] = 0x00; + } + } else { + ctx->data[i++] = 0x80; + while (i < 64) { + ctx->data[i++] = 0x00; + } + sha1_transform(ctx, ctx->data); + memset(ctx->data, 0, 56); + } + + // Append to the padding the total message's length in bits and transform. + DBL_INT_ADD(ctx->bitlen[0], ctx->bitlen[1], 8 * ctx->datalen); + ctx->data[63] = ctx->bitlen[0]; + ctx->data[62] = ctx->bitlen[0] >> 8; + ctx->data[61] = ctx->bitlen[0] >> 16; + ctx->data[60] = ctx->bitlen[0] >> 24; + ctx->data[59] = ctx->bitlen[1]; + ctx->data[58] = ctx->bitlen[1] >> 8; + ctx->data[57] = ctx->bitlen[1] >> 16; + ctx->data[56] = ctx->bitlen[1] >> 24; + sha1_transform(ctx, ctx->data); + + // Since this implementation uses little endian byte ordering and MD uses big endian, + // reverse all the bytes when copying the final state to the output hash. + for (i = 0; i < 4; ++i) { + hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff; + hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff; + hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff; + hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff; + hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff; + } +} + +/** + * Generate SHA1 key from a string + * + * @param data - the string to be converted in SHA1 key + * + * @return the SHA key + */ +LIBEXPORT inline std::string generateSHA1(const std::string& data) +{ + SHA1_CTX ctx; + unsigned char obuf[20] = {0}; + + // Hash one + sha1_init(&ctx); + sha1_update(&ctx, (unsigned char*)data.c_str(), int(data.size())); + sha1_final(&ctx, obuf); + + // convert SHA1 key into hexadecimal string + std::string sha1key; + for (int i = 0; i < 20; i++) { + const char* H = "0123456789ABCDEF"; + char c1 = H[(obuf[i] >> 4)]; + char c2 = H[(obuf[i] & 15)]; + sha1key += c1; + sha1key += c2; + } + + return sha1key; +} + +/** + * Expand a DSP source code into a self-contained DSP where all library import have been inlined starting from a + * filename. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use + * generateAuxFiles) + * @param sha_key - a SHA key to be filled by for the resulting DSP + * @param error_msg - the error string to be filled + * + * @return the expanded DSP or an empty string in case of failure + */ +LIBEXPORT std::string expandDSPFromFile(const std::string& filename, int argc, const char* argv[], std::string& sha_key, + std::string& error_msg); + +/** + * Expand a DSP source code into a self-contained DSP where all library import have been inlined starting from a string. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use + * generateAuxFiles) + * @param sha_key - a SHA key to be filled by for the resulting DSP + * @param error_msg - the error string to be filled + * + * @return the expanded DSP or a empty string in case of failure + */ +LIBEXPORT std::string expandDSPFromString(const std::string& name_app, const std::string& dsp_content, int argc, + const char* argv[], std::string& sha_key, std::string& error_msg); + +/** + * Generate additional file (other backends, SVG, XML, JSON...) starting from a filename. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param error_msg - the error string to be filled + * + * @return the expanded DSP or an empty string in case of failure + */ +LIBEXPORT bool generateAuxFilesFromFile(const std::string& filename, int argc, const char* argv[], + std::string& error_msg); + +/** + * Generate additional file (other backends, SVG, XML, JSON...) starting from a string. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters + * @param error_msg - the error string to be filled + * + * @return the expanded DSP or a empty string in case of failure + */ +LIBEXPORT bool generateAuxFilesFromString(const std::string& name_app, const std::string& dsp_content, int argc, + const char* argv[], std::string& error_msg); + +/** + * The free function to be used on memory returned by getCDSPMachineTarget, getCName, getCSHAKey, + * getCDSPCode, getCLibraryList, getAllCDSPFactories, writeCDSPFactoryToBitcode, + * writeCDSPFactoryToIR, writeCDSPFactoryToMachine,expandCDSPFromString and expandCDSPFromFile. + * + * This is MANDATORY on Windows when otherwise all nasty runtime version related crashes can occur. + * + * @param ptr - the pointer to be deleted. + */ +#ifdef EMCC +extern "C" void freeCMemory(void* ptr); +#else +extern "C" LIBEXPORT void freeCMemory(void* ptr); +#endif + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/llvm-c-dsp.h b/source/DEINDUGens/include/faust/dsp/llvm-c-dsp.h new file mode 100644 index 0000000000..c47f8848eb --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/llvm-c-dsp.h @@ -0,0 +1,454 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef LLVM_DSP_C_H +#define LLVM_DSP_C_H + +#include + +#include "faust/gui/CInterface.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* Opaque types */ + + /*! + \addtogroup llvm C interface for compiling Faust code. Note that the API is not thread safe : use 'startMTCDSPFactories/stopMTCDSPFactories' to use it in a multi-thread context. + @{ + */ + +#ifdef _MSC_VER + typedef void llvm_dsp_factory; + + typedef void llvm_dsp; +#else + typedef struct {} llvm_dsp_factory; + + typedef struct {} llvm_dsp; +#endif + + /** + * Get the library version. + * + * @return the library version as a static string. + */ + const char* getCLibFaustVersion(); + + /** + * Get the target (triple + CPU) of the machine. + * + * @return the target as a string (to be deleted by the caller using freeCMemory). + */ + char* getCDSPMachineTarget(); + + /** + * Get the Faust DSP factory associated with a given SHA key (created from the 'expanded' DSP source), + * if already allocated in the factories cache and increment it's reference counter. You will have to explicitly + * use deleteCDSPFactory to properly decrement the reference counter when the factory is no more needed. + * + * @param sha_key - the SHA key for an already created factory, kept in the factory cache + * + * @return a valid DSP factory if one is associated with the SHA key, otherwise a null pointer. + */ + llvm_dsp_factory* getCDSPFactoryFromSHAKey(const char* sha_key); + + /** + * Create a Faust DSP factory from a DSP source code as a file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is same source code and + * same set of 'normalized' compilations options) will return the same (reference counted) factory pointer. You will + * have to explicitly use deleteCDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + * + * @return a valid DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* createCDSPFactoryFromFile(const char* filename, + int argc, const char* argv[], + const char* target, + char* error_msg, + int opt_level); + + /** + * Create a Faust DSP factory from a DSP source code as a string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is same source code and + * same set of 'normalized' compilations options) will return the same (reference counted) factory pointer. You will + * have to explicitly use deleteCDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param name_app - the name of the Faust program + * @param dsp_content - the Faust program as a string + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + * + * @return a valid DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* createCDSPFactoryFromString(const char* name_app, + const char* dsp_content, + int argc, const char* argv[], + const char* target, + char* error_msg, + int opt_level); + + /** + * Delete a Faust DSP factory, that is decrements it's reference counter, possibly really deleting the internal pointer. + * Possibly also delete DSP pointers associated with this factory, if they were not explicitly deleted with deleteCDSPInstance. + * Beware : all kept factories and DSP pointers (in local variables...) thus become invalid. + * + * @param factory - the DSP factory to be deleted. + * + * @return true if the factory internal pointer was really deleted, and false if only 'decremented'. + */ + bool deleteCDSPFactory(llvm_dsp_factory* factory); + + /** + * Returns factory name : + * either the name declared in DSP with [declare name "foo"] syntax + * or 'filename' (if createDSPFactoryFromFile is used) + * or 'name_app' (if createDSPFactoryFromString is used) + * + * @param factory - the DSP factory. + * + * @return the name as a string (to be deleted by the caller using freeCMemory). + */ + char* getCName(llvm_dsp_factory* factory); + + /** + * Get the SHA Key of the Faust DSP factory. + * + * @param factory - the DSP factory. + * + * @return the SHA key as a string (to be deleted by the caller using freeCMemory). + */ + char* getCSHAKey(llvm_dsp_factory* factory); + + /** + * Get the expanded DSP code of the Faust DSP factory. + * + * @param factory - the DSP factory. + * + * @return the expanded DSP code string (to be deleted by the caller using freeCMemory). + */ + char* getCDSPCode(llvm_dsp_factory* factory); + + /** + * Get the compile options of the Faust DSP factory. + * + * @param factory - the DSP factory. + * + * @return the LLVM compile options as a string (to be deleted by the caller using freeCMemory). + */ + char* getCDSPFactoryCompileOptions(llvm_dsp_factory* factory); + + /** + * Get the LLVM target of the Faust DSP factory. + * + * @param factory - the DSP factory. + * + * @return the LLVM target as a string (to be deleted by the caller using freeCMemory). + */ + char* getCTarget(llvm_dsp_factory* factory); + + /** + * Get the Faust DSP factory list of library dependancies as a null-terminated array. + * + * @param factory - the DSP factory. + * + * @return the library dependancies (the array and it's content has to be deleted by the caller using freeCMemory). + */ + const char** getCDSPFactoryLibraryList(llvm_dsp_factory* factory); + + /** + * Get the list of all used includes as a null-terminated array. + * + * @param factory - the DSP factory. + * + * @return the includes list (the array and it's content has to be deleted by the caller using freeCMemory). + */ + const char** getCDSPFactoryIncludePathnames(llvm_dsp_factory* factory); + + /** + * Delete all Faust DSP factories kept in the library cache. Beware : all kept factory pointers (in local variables...) thus become invalid. + * + */ + void deleteAllCDSPFactories(); + + /** + * Return Faust DSP factories of the library cache as a null-terminated array of their SHA keys. + * + * @return the Faust DSP factories (the array and it's content has to be deleted by the caller using freeCMemory). + */ + const char** getAllCDSPFactories(); + + /** + * Start multi-thread access mode (since by default the library is not 'multi-thread' safe). + * + * @return true if 'multi-thread' safe access is started. + */ + bool startMTCDSPFactories(); + + /** + * Stop multi-thread access mode. + * + */ + void stopMTCDSPFactories(); + + /** + * Create a Faust DSP factory from a base64 encoded LLVM bitcode string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM bitcode string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteCDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bit_code - the LLVM bitcode string + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions), a higher value + * than the one used when calling createDSPFactory can possibly be used. + * + * @return the DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* readCDSPFactoryFromBitcode(const char* bit_code, const char* target, char* error_msg, int opt_level); + + /** + * Write a Faust DSP factory into a base64 encoded LLVM bitcode string. + * + * @param factory - Faust DSP factory + * + * @return the LLVM bitcode as a string (to be deleted by the caller using freeCMemory). + */ + char* writeCDSPFactoryToBitcode(llvm_dsp_factory* factory); + + /** + * Create a Faust DSP factory from a LLVM bitcode file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM bitcode file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteCDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bit_code_path - the LLVM bitcode file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when + * calling createDSPFactory can possibly be used. + * + * @return the DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* readCDSPFactoryFromBitcodeFile(const char* bit_code_path, const char* target, char* error_msg, int opt_level); + + /** + * Write a Faust DSP factory into a LLVM bitcode file. + * + * @param factory - the Faust DSP factory + * @param bit_code_path - the LLVM bitcode file pathname + * + * @return true on success, false on failure. + */ + bool writeCDSPFactoryToBitcodeFile(llvm_dsp_factory* factory, const char* bit_code_path); + + /** + * Create a Faust DSP factory from a LLVM IR (textual) string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM IR string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteCDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param ir_code - the LLVM IR (textual) string + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value'). + * A higher value than the one used when calling createDSPFactory can possibly be used + * + * @return the DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* readCDSPFactoryFromIR(const char* ir_code, const char* target, char* error_msg, int opt_level); + + /** + * Write a Faust DSP factory into a LLVM IR (textual) string. + * + * @param factory - the DSP factory + * + * @return the LLVM IR (textual) as a string (to be deleted by the caller using freeCMemory). + */ + char* writeCDSPFactoryToIR(llvm_dsp_factory* factory); + + /** + * Create a Faust DSP factory from a LLVM IR (textual) file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM IR file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteCDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param ir_code_path - the LLVM IR (textual) file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when calling + * createDSPFactory can possibly be used. + * + * @return the DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* readCDSPFactoryFromIRFile(const char* ir_code_path, const char* target, char* error_msg, int opt_level); + + /** + * Write a Faust DSP factory into a LLVM IR (textual) file. + * + * @param factory - the Faust DSP factory + * @param ir_code_path - the LLVM bitcode file pathname. + * + * @return true on success, false on failure. + */ + bool writeCDSPFactoryToIRFile(llvm_dsp_factory* factory, const char* ir_code_path); + + /** + * Create a Faust DSP factory from a base64 encoded machine code string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same machine code string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteCDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param machine_code - the machine code string + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * + * @return the DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* readCDSPFactoryFromMachine(const char* machine_code, char* error_msg, const char* target); + + /** + * Write a Faust DSP factory into a base64 encoded machine code string. + * + * @param factory - the Faust DSP factory + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * + * @return the machine code as a string (to be deleted by the caller using freeCMemory). + */ + char* writeCDSPFactoryToMachine(llvm_dsp_factory* factory, const char* target); + + /** + * Create a Faust DSP factory from a machine code file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same machine code file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteCDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param machine_code_path - the machine code file pathname + * @param error_msg - the error string to be filled, has to be 4096 characters long + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * + * @return the DSP factory on success, otherwise a null pointer. + */ + llvm_dsp_factory* readCDSPFactoryFromMachineFile(const char* machine_code_path, const char* target, char* error_msg); + + /** + * Write a Faust DSP factory into a machine code file. + * + * @param factory - the Faust DSP factory + * @param machine_code_path - the machine code file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * + * @return true on success, false on failure. + */ + bool writeCDSPFactoryToMachineFile(llvm_dsp_factory* factory, const char* machine_code_path, const char* target); + + /** + * Instance functions. + */ + + int getNumInputsCDSPInstance(llvm_dsp* dsp); + + int getNumOutputsCDSPInstance(llvm_dsp* dsp); + + void buildUserInterfaceCDSPInstance(llvm_dsp* dsp, UIGlue* interface); + + int getSampleRateCDSPInstance(llvm_dsp* dsp); + + void initCDSPInstance(llvm_dsp* dsp, int samplingRate); + + void instanceInitCDSPInstance(llvm_dsp* dsp, int samplingRate); + + void instanceConstantsCDSPInstance(llvm_dsp* dsp, int samplingRate); + + void instanceResetUserInterfaceCDSPInstance(llvm_dsp* dsp); + + void instanceClearCDSPInstance(llvm_dsp* dsp); + + llvm_dsp* cloneCDSPInstance(llvm_dsp* dsp); + + void metadataCDSPInstance(llvm_dsp* dsp, MetaGlue* meta); + + void computeCDSPInstance(llvm_dsp* dsp, int count, FAUSTFLOAT** input, FAUSTFLOAT** output); + + /* Set custom memory manager to be used when creating instances */ + void setCMemoryManager(llvm_dsp_factory* factory, ManagerGlue* manager); + + /** + * Create a Faust DSP instance. + * + * @param factory - the Faust DSP factory + * + * @return the DSP instance on success, otherwise a null pointer. + */ + llvm_dsp* createCDSPInstance(llvm_dsp_factory* factory); + + /** + * Delete a Faust DSP instance. + * + * @param dsp - the DSP instance to be deleted. + */ + void deleteCDSPInstance(llvm_dsp* dsp); + +#ifdef __cplusplus +} +#endif + +/*! + @} + */ + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/llvm-dsp-adapter.h b/source/DEINDUGens/include/faust/dsp/llvm-dsp-adapter.h new file mode 100644 index 0000000000..a3d02a0988 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/llvm-dsp-adapter.h @@ -0,0 +1,165 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2019 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef LLVM_DSP_ADAPTER_H +#define LLVM_DSP_ADAPTER_H + +#include "faust/gui/CGlue.h" +#include "faust/gui/SoundUI.h" +#include "faust/gui/JSONUIDecoder.h" + +/* + Wraps a LLVM module compiled as object code in a 'dsp' class. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + // LLVM module API + + typedef char comp_llvm_dsp; + + comp_llvm_dsp* newmydsp(); + void deletemydsp(comp_llvm_dsp* dsp); + + int getNumInputsmydsp(comp_llvm_dsp* dsp); + int getNumOutputsmydsp(comp_llvm_dsp* dsp); + + void buildUserInterfacemydsp(comp_llvm_dsp* dsp, UIGlue* ui); + + int getSampleRatemydsp(comp_llvm_dsp* dsp); + + void initmydsp(comp_llvm_dsp* dsp, int samplingRate); + void instanceInitmydsp(comp_llvm_dsp* dsp, int samplingRate); + void instanceConstantsmydsp(comp_llvm_dsp* dsp, int samplingRate); + void instanceResetUserInterfacemydsp(comp_llvm_dsp* dsp); + void instanceClearmydsp(comp_llvm_dsp* dsp); + + void classInitmydsp(int samplingRate); + + void metadatamydsp(MetaGlue* meta); + + void setDefaultSoundmydsp(Soundfile* sf); + + char* getJSONmydsp(); + + void computemydsp(comp_llvm_dsp* dsp, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs); + +#ifdef __cplusplus +} +#endif + +class mydsp : public dsp { + + private: + + comp_llvm_dsp* fDSP; + JSONUIDecoder* fDecoder; + + public: + + mydsp() + { + fDecoder = new JSONUIDecoder(getJSONmydsp()); + fDSP = newmydsp(); + setDefaultSoundmydsp(defaultsound); + } + + virtual ~mydsp() + { + deletemydsp(fDSP); + delete fDecoder; + } + + virtual int getNumInputs() { return getNumInputsmydsp(fDSP); } + + virtual int getNumOutputs() { return getNumOutputsmydsp(fDSP); } + + virtual void buildUserInterface(UI* ui_interface) + { + UIGlue glue; + buildUIGlue(&glue, ui_interface, fDecoder->hasCompileOption("-double")); + buildUserInterfacemydsp(fDSP, &glue); + } + + virtual int getSampleRate() + { + return getSampleRatemydsp(fDSP); + } + + virtual void init(int samplingRate) + { + classInitmydsp(samplingRate); + initmydsp(fDSP, samplingRate); + } + + virtual void instanceInit(int samplingRate) + { + instanceInitmydsp(fDSP, samplingRate); + } + + virtual void instanceConstants(int samplingRate) + { + instanceConstantsmydsp(fDSP, samplingRate); + } + + virtual void instanceResetUserInterface() + { + instanceResetUserInterfacemydsp(fDSP); + } + + virtual void instanceClear() + { + instanceClearmydsp(fDSP); + } + + static void classInit(int samplingRate) + { + classInitmydsp(samplingRate); + } + + virtual dsp* clone() + { + return new mydsp(); + } + + virtual void metadata(Meta* m) + { + MetaGlue glue; + buildMetaGlue(&glue, m); + metadatamydsp(&glue); + } + + virtual void compute(int count, FAUSTFLOAT** input, FAUSTFLOAT** output) + { + computemydsp(fDSP, count, input, output); + } + + virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + compute(count, inputs, outputs); + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/llvm-dsp.h b/source/DEINDUGens/include/faust/dsp/llvm-dsp.h new file mode 100644 index 0000000000..d1b882bbe1 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/llvm-dsp.h @@ -0,0 +1,463 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef LLVM_DSP_H +#define LLVM_DSP_H + +#ifdef _WIN32 +#define DEPRECATED(fun) __declspec(deprecated) fun +#else +#define DEPRECATED(fun) fun __attribute__ ((deprecated)); +#endif + +#include +#include +#include "faust/dsp/dsp.h" +#include "faust/gui/meta.h" + +/*! + \addtogroup llvmcpp C++ interface for compiling Faust code. Note that the API is not thread safe : use 'startMTDSPFactories/stopMTDSPFactories' to use it in a multi-thread context. + @{ + */ + +/** + * Get the library version. + * + * @return the library version as a static string. + */ +extern "C" const char* getCLibFaustVersion(); + +/** + * DSP instance class with methods. + */ +class llvm_dsp : public dsp { + + private: + + // llvm_dsp objects are allocated using llvm_dsp_factory::createDSPInstance(); + llvm_dsp() {} + + public: + + int getNumInputs(); + + int getNumOutputs(); + + void buildUserInterface(UI* ui_interface); + + int getSampleRate(); + + void init(int samplingRate); + + void instanceInit(int samplingRate); + + void instanceConstants(int samplingRate); + + void instanceResetUserInterface(); + + void instanceClear(); + + llvm_dsp* clone(); + + void metadata(Meta* m); + + void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs); + +}; + +/** + * DSP factory class. + */ + +class llvm_dsp_factory : public dsp_factory { + + public: + + virtual ~llvm_dsp_factory(); + + /** + * Return factory name: + * either the name declared in DSP with [declare name "foo"] syntax + * or 'filename' (if createDSPFactoryFromFile is used) + * or 'name_app' (if createDSPFactoryFromString is used) + */ + std::string getName(); + + /* Return factory LLVM target (like 'i386-apple-macosx10.6.0:opteron')*/ + std::string getTarget(); + + /* Return factory SHA key */ + std::string getSHAKey(); + + /* Return factory expanded DSP code */ + std::string getDSPCode(); + + /* Return factory compile options */ + std::string getCompileOptions(); + + /* Get the Faust DSP factory list of library dependancies */ + std::vector getLibraryList(); + + /* Get the list of all used includes */ + std::vector getIncludePathnames(); + + /* Create a new DSP instance, to be deleted with C++ 'delete' */ + llvm_dsp* createDSPInstance(); + + /* Set a custom memory manager to be used when creating instances */ + void setMemoryManager(dsp_memory_manager* manager); + + /* Return the currently set custom memory manager */ + dsp_memory_manager* getMemoryManager(); + +}; + +/** + * Get the target (triple + CPU) of the machine. + * + * @return the target as a string. + */ +std::string getDSPMachineTarget(); + +/** + * Get the Faust DSP factory associated with a given SHA key (created from the 'expanded' DSP source), + * if already allocated in the factories cache and increment it's reference counter. You will have to explicitly + * use deleteDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param sha_key - the SHA key for an already created factory, kept in the factory cache + * + * @return a DSP factory if one is associated with the SHA key, otherwise a null pointer. + */ +llvm_dsp_factory* getDSPFactoryFromSHAKey(const std::string& sha_key); + +/** + * Create a Faust DSP factory from a DSP source code as a file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is same source code and + * same set of 'normalized' compilations options) will return the same (reference counted) factory pointer. You will have to explicitly + * use deleteDSPFactory to properly decrement the reference counter when the factory is no more needed. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + * + * @return a DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* createDSPFactoryFromFile(const std::string& filename, + int argc, const char* argv[], + const std::string& target, + std::string& error_msg, + int opt_level = -1); + +/** + * Create a Faust DSP factory from a DSP source code as a string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is same source code and + * same set of 'normalized' compilations options) will return the same (reference counted) factory pointer. You will have to explicitly + * use deleteDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param name_app - the name of the Faust program + * @param dsp_content - the Faust program as a string + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + * + * @return a DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* createDSPFactoryFromString(const std::string& name_app, + const std::string& dsp_content, + int argc, const char* argv[], + const std::string& target, + std::string& error_msg, + int opt_level = -1); + +/** + * Delete a Faust DSP factory, that is decrements it's reference counter, possibly really deleting the internal pointer. + * Possibly also delete DSP pointers associated with this factory, if they were not explicitly deleted with C++ delete. + * Beware : all kept factories and DSP pointers (in local variables...) thus become invalid. + * + * @param factory - the DSP factory + * + * @return true if the factory internal pointer was really deleted, and false if only 'decremented'. + */ +bool deleteDSPFactory(llvm_dsp_factory* factory); + +/** + * Get the Faust DSP factory list of library dependancies. + * + * @deprecated : use factory getDSPFactoryLibraryList method. + * + * @param factory - the DSP factory + * + * @return the list as a vector of strings. + */ +DEPRECATED(std::vector getDSPFactoryLibraryList(llvm_dsp_factory* factory)); + +/** + * Delete all Faust DSP factories kept in the library cache. Beware : all kept factory and DSP pointers (in local variables...) thus become invalid. + * + */ +void deleteAllDSPFactories(); + +/** + * Return Faust DSP factories of the library cache as a vector of their SHA keys. + * + * @return the Faust DSP factories. + */ +std::vector getAllDSPFactories(); + +/** + * Start multi-thread access mode (since by default the library is not 'multi-thread' safe). + * + * @return true if 'multi-thread' safe access is started. + */ +bool startMTDSPFactories(); + +/** + * Stop multi-thread access mode. + * + */ +void stopMTDSPFactories(); + +/** + * Create a Faust DSP factory from a base64 encoded LLVM bitcode string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM bitcode string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bit_code - the LLVM bitcode string + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when calling createDSPFactory can possibly be used. + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromBitcode(const std::string& bit_code, const std::string& target, std::string& error_msg, int opt_level = -1); + +/** + * Write a Faust DSP factory into a base64 encoded LLVM bitcode string. + * + * @param factory - the DSP factory + * + * @return the LLVM bitcode as a string. + */ +std::string writeDSPFactoryToBitcode(llvm_dsp_factory* factory); + +/** + * Create a Faust DSP factory from a LLVM bitcode file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM bitcode file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param bit_code_path - the LLVM bitcode file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when calling + * createDSPFactory can possibly be used. + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromBitcodeFile(const std::string& bit_code_path, const std::string& target, std::string& error_msg, int opt_level = -1); + +/** + * Write a Faust DSP factory into a LLVM bitcode file. + * + * @param factory - the DSP factory + * @param bit_code_path - the LLVM bitcode file pathname. + * + * @return true on success, false on failure. + */ +bool writeDSPFactoryToBitcodeFile(llvm_dsp_factory* factory, const std::string& bit_code_path); + +/** + * Create a Faust DSP factory from a LLVM IR (textual) string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM IR string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param ir_code - the LLVM IR (textual) string + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when calling + * createDSPFactory can possibly be used. + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromIR(const std::string& ir_code, const std::string& target, std::string& error_msg, int opt_level = -1); + +/** + * Write a Faust DSP factory into a LLVM IR (textual) string. + * + * @param factory - the DSP factory + * + * @return the LLVM IR (textual) as a string. + */ +std::string writeDSPFactoryToIR(llvm_dsp_factory* factory); + +/** + * Create a Faust DSP factory from a LLVM IR (textual) file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same LLVM IR file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param ir_code_path - the LLVM IR (textual) file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions), a higher value + * than the one used when calling createDSPFactory can possibly be used. + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromIRFile(const std::string& ir_code_path, const std::string& target, std::string& error_msg, int opt_level = -1); + +/** + * Write a Faust DSP factory into a LLVM IR (textual) file. + * + * @param factory - the DSP factory + * @param ir_code_path - the LLVM bitcode file pathname. + * + * @return true on success, false on failure. + */ +bool writeDSPFactoryToIRFile(llvm_dsp_factory* factory, const std::string& ir_code_path); + +/** + * Create a Faust DSP factory from a base64 encoded machine code string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same machine code string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param machine_code - the machine code string + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromMachine(const std::string& machine_code, const std::string& target, std::string& error_msg); + +/** + * Write a Faust DSP factory into a base64 encoded machine code string. + * + * @param factory - the DSP factory + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * + * @return the machine code as a string. + */ +std::string writeDSPFactoryToMachine(llvm_dsp_factory* factory, const std::string& target); + +/** + * Create a Faust DSP factory from a machine code file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same machine code file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param machine_code_path - the machine code file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromMachineFile(const std::string& machine_code_path, const std::string& target, std::string& error_msg); + +/** + * Write a Faust DSP factory into a machine code file. + * + * @param factory - the DSP factory + * @param machine_code_path - the machine code file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * + * @return true on success, false on failure. + */ +bool writeDSPFactoryToMachineFile(llvm_dsp_factory* factory, const std::string& machine_code_path, const std::string& target); + +/** + * Write a Faust DSP factory into a object code file. + * + * @param factory - the DSP factory + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * + * @return true on success, false on failure. + */ +bool writeDSPFactoryToObjectcodeFile(llvm_dsp_factory* factory, const std::string& object_code_path, const std::string& target); + +/** + * Call global declarations with the given meta object. + * + * @deprecated : use DSP instance metadata method. + * @param factory - the DSP factory + * @param meta - the meta object to be used. + * + */ +DEPRECATED(void metadataDSPFactory(llvm_dsp_factory* factory, Meta* meta)); + +/** + * Create a Faust DSP instance. + * + * @deprecated : use factory createDSPInstance method. + * @param factory - the DSP factory + * + * @return the DSP instance on success, otherwise a null pointer. + */ +DEPRECATED(llvm_dsp* createDSPInstance(llvm_dsp_factory* factory)); + +/** + * Delete a Faust DSP instance. You can also simply use C++ 'delete'. + * + * @deprecated : simply use C++ delete. + * @param dsp - the DSP instance to be deleted. + */ +DEPRECATED(void deleteDSPInstance(llvm_dsp* dsp)); + +/*! + @} + */ + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/llvm-machine-dsp.h b/source/DEINDUGens/include/faust/dsp/llvm-machine-dsp.h new file mode 100644 index 0000000000..7bc869a5e2 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/llvm-machine-dsp.h @@ -0,0 +1,211 @@ +/************************************************************************ + ************************************************************************ + Copyright (C) 2003-2018 GRAME, Centre National de Creation Musicale + + This program 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. + + This program 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 program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + ************************************************************************ + ************************************************************************/ + +#ifndef LLVM_MACHINE_DSP_H +#define LLVM_MACHINE_DSP_H + +#ifdef _WIN32 +#define DEPRECATED(fun) __declspec(deprecated) fun +#else +#define DEPRECATED(fun) fun __attribute__ ((deprecated)); +#endif + +#include +#include "faust/dsp/dsp.h" +#include "faust/gui/meta.h" + +/*! + \addtogroup llvmcpp C++ interface for reading LLVM machine code. + @{ + */ + +/** + * Get the library version. + * + * @return the library version as a static string. + */ +extern "C" const char* getCLibFaustVersion(); + +/** + * DSP instance class with methods. + */ +class llvm_dsp : public dsp { + + private: + + // llvm_dsp objects are allocated using llvm_dsp_factory::createDSPInstance(); + llvm_dsp() {} + + public: + + int getNumInputs(); + + int getNumOutputs(); + + void buildUserInterface(UI* ui_interface); + + int getSampleRate(); + + void init(int samplingRate); + + void instanceInit(int samplingRate); + + void instanceConstants(int samplingRate); + + void instanceResetUserInterface(); + + void instanceClear(); + + llvm_dsp* clone(); + + void metadata(Meta* m); + + void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs); + +}; + +/** + * DSP factory class. + */ + +class llvm_dsp_factory : public dsp_factory { + + public: + + virtual ~llvm_dsp_factory(); + + /** + * Return factory name: + * either the name declared in DSP with [declare name "foo"] syntax + * or 'filename' (if createDSPFactoryFromFile is used) + * or 'name_app' (if createDSPFactoryFromString is used) + */ + std::string getName(); + + /* Return factory LLVM target */ + std::string getTarget(); + + /* Return factory SHA key */ + std::string getSHAKey(); + + /* Return factory expanded DSP code */ + std::string getDSPCode(); + + /* Return factory compile options */ + std::string getCompileOptions(); + + /* Get the Faust DSP factory list of library dependancies */ + std::vector getLibraryList(); + + /* Get the list of all used includes */ + std::vector getIncludePathnames(); + + /* Create a new DSP instance, to be deleted with C++ 'delete' */ + llvm_dsp* createDSPInstance(); + + /* Set a custom memory manager to be used when creating instances */ + void setMemoryManager(dsp_memory_manager* manager); + + /* Return the currently set custom memory manager */ + dsp_memory_manager* getMemoryManager(); + +}; + +/** + * Get the target (triple + CPU) of the machine. + * + * @return the target as a string. + */ +std::string getDSPMachineTarget(); + +/** + * Get the Faust DSP factory associated with a given SHA key (created from the 'expanded' DSP source), + * if already allocated in the factories cache and increment it's reference counter. You will have to explicitly + * use deleteDSPFactory to properly decrement reference counter when the factory is no more needed. + * + * @param sha_key - the SHA key for an already created factory, kept in the factory cache + * + * @return a DSP factory if one is associated with the SHA key, otherwise a null pointer. + */ +llvm_dsp_factory* getDSPFactoryFromSHAKey(const std::string& sha_key); + +/** +/** + * Delete a Faust DSP factory, that is decrements it's reference counter, possibly really deleting the internal pointer. + * Possibly also delete DSP pointers associated with this factory, if they were not explicitly deleted with C++ delete. + * Beware : all kept factories and DSP pointers (in local variables...) thus become invalid. + * + * @param factory - the DSP factory + * + * @return true if the factory internal pointer was really deleted, and false if only 'decremented'. + */ +bool deleteDSPFactory(llvm_dsp_factory* factory); + +/** + * Delete all Faust DSP factories kept in the library cache. Beware : all kept factory and DSP pointers (in local variables...) thus become invalid. + * + */ +void deleteAllDSPFactories(); + +/** + * Return Faust DSP factories of the library cache as a vector of their SHA keys. + * + * @return the Faust DSP factories. + */ +std::vector getAllDSPFactories(); + +/** + * Create a Faust DSP factory from a base64 encoded machine code string. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same machine code string) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param machine_code - the machine code string + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromMachine(const std::string& machine_code, const std::string& target, std::string& error_msg); + +/** + * Create a Faust DSP factory from a machine code file. Note that the library keeps an internal cache of all + * allocated factories so that the compilation of the same DSP code (that is the same machine code file) will return + * the same (reference counted) factory pointer. You will have to explicitly use deleteDSPFactory to properly + * decrement reference counter when the factory is no more needed. + * + * @param machine_code_path - the machine code file pathname + * @param target - the LLVM machine target: like 'i386-apple-macosx10.6.0:opteron', + * using an empty string takes the current machine settings, + * and i386-apple-macosx10.6.0:generic kind of syntax for a generic processor + * @param error_msg - the error string to be filled + * + * @return the DSP factory on success, otherwise a null pointer. + */ +llvm_dsp_factory* readDSPFactoryFromMachineFile(const std::string& machine_code_path, const std::string& target, std::string& error_msg); + +/*! + @} + */ + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/one-sample-dsp.h b/source/DEINDUGens/include/faust/dsp/one-sample-dsp.h new file mode 100644 index 0000000000..9f8b6495e8 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/one-sample-dsp.h @@ -0,0 +1,99 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2019 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __one_sample_dsp__ +#define __one_sample_dsp__ + +#include "faust/dsp/dsp.h" + +class one_sample_dsp : public dsp { + + public: + + one_sample_dsp() {} + + virtual ~one_sample_dsp() {} + + /** + * Return the number of 'int' typed values necessary to compute the internal DSP state + * + * @return the number of 'int' typed values. + */ + virtual int getNumIntControls() = 0; + + /** + * Return the number of 'float, double or quad' typed values necessary to compute the DSP control state + * + * @return the number of 'float, double or quad' typed values. + */ + virtual int getNumRealControls() = 0; + + /** + * Update the DSP control state. + * + * @param icontrol - an externally allocated array of 'int' typed values used to keep the DSP control state + * @param fcontrol - an externally allocated array of 'float, double or quad' typed values used to keep the DSP control state + */ + virtual void control(int* icontrol, FAUSTFLOAT* fcontrol) = 0; + + /** + * Compute one sample. + * + * @param inputs - the input audio buffers as an array of getNumInputs FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of getNumOutputs FAUSTFLOAT samples (either float, double or quad) + * @param icontrol - the externally allocated array of 'int' typed values used to keep the DSP control state + * @param fcontrol - the externally allocated array of 'float, double or quad' typed values used to keep the DSP control state + */ + virtual void compute(FAUSTFLOAT* inputs, FAUSTFLOAT* outputs, int* icontrol, FAUSTFLOAT* fcontrol) = 0; + + // The standard 'compute' expressed using the control/compute (one sample) model + virtual void compute(int count, FAUSTFLOAT** inputs_aux, FAUSTFLOAT** outputs_aux) + { + // Control + int int_control[getNumIntControls()]; + FAUSTFLOAT real_control[getNumRealControls()]; + control(int_control, real_control); + + // Compute + FAUSTFLOAT inputs[getNumInputs()]; + FAUSTFLOAT outputs[getNumOutputs()]; + for (int frame = 0; frame < count; frame++) { + for (int chan = 0; chan < getNumInputs(); chan++) { + inputs[chan] = inputs_aux[chan][frame]; + } + // One sample compute + compute(inputs, outputs, int_control, real_control); + for (int chan = 0; chan < getNumOutputs(); chan++) { + outputs_aux[chan][frame] = outputs[chan]; + } + } + } + + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + compute(count, inputs, outputs); + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/dsp/poly-dsp.h b/source/DEINDUGens/include/faust/dsp/poly-dsp.h index a18f291859..b09b1e3bf1 100644 --- a/source/DEINDUGens/include/faust/dsp/poly-dsp.h +++ b/source/DEINDUGens/include/faust/dsp/poly-dsp.h @@ -6,21 +6,19 @@ and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. - + This program 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 General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; If not, see . - + EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - - ************************************************************************ ************************************************************************/ #ifndef __poly_dsp__ @@ -28,16 +26,18 @@ #include #include -#include -#include +#include #include #include #include #include #include +#include +#include -#include "faust/gui/MidiUI.h" -#include "faust/gui/JSONUI.h" +#include "faust/midi/midi.h" +#include "faust/dsp/dsp-combiner.h" +#include "faust/gui/GUI.h" #include "faust/gui/MapUI.h" #include "faust/dsp/proxy-dsp.h" @@ -46,28 +46,14 @@ #define kReleaseVoice -2 #define kNoVoice -3 -#define VOICE_STOP_LEVEL 0.001 -#define MIX_BUFFER_SIZE 16384 - -#define FLOAT_MAX(a, b) (((a) < (b)) ? (b) : (a)) +#define VOICE_STOP_LEVEL 0.0005 // -70 db +#define MIX_BUFFER_SIZE 4096 // endsWith(,) : returns true if ends with -static inline bool endsWith(std::string const& str, std::string const& end) -{ - size_t l1 = str.length(); - size_t l2 = end.length(); - return (l1 >= l2) && (0 == str.compare(l1 - l2, l2, end)); -} - -static inline double midiToFreq(double note) +static double midiToFreq(double note) { - return 440.0 * pow(2.0, (note-69.0)/12.0); -} - -static inline unsigned int isPowerOfTwo(unsigned int n) -{ - return !(n & (n - 1)); + return 440.0 * std::pow(2.0, (note-69.0)/12.0); } /** @@ -83,9 +69,9 @@ class GroupUI : public GUI, public PathBuilder void insertMap(std::string label, FAUSTFLOAT* zone) { - if (!endsWith(label, "/gate") - && !endsWith(label, "/freq") - && !endsWith(label, "/gain")) { + if (!MapUI::endsWith(label, "/gate") + && !MapUI::endsWith(label, "/freq") + && !MapUI::endsWith(label, "/gain")) { // Groups all controller except 'freq', 'gate', and 'gain' if (fLabelZoneMap.find(label) != fLabelZoneMap.end()) { @@ -103,11 +89,12 @@ class GroupUI : public GUI, public PathBuilder GroupUI(FAUSTFLOAT* zone, uiCallback cb, void* arg) { fPanic = new uiCallbackItem(this, zone, cb, arg); - }; + } + virtual ~GroupUI() { // 'fPanic' is kept and deleted in GUI, so do not delete here - }; + } // -- widget's layouts void openTabBox(const char* label) @@ -167,109 +154,78 @@ class GroupUI : public GUI, public PathBuilder struct dsp_voice : public MapUI, public decorator_dsp { - int fNote; // Playing note actual pitch - int fDate; // KeyOn date - bool fTrigger; // True if stolen note and need for envelop trigger - FAUSTFLOAT fLevel; // Last audio block level - std::string fGatePath; // Path of 'gate' control - std::string fGainPath; // Path of 'gain' control - std::string fFreqPath; // Path of 'freq' control - + int fNote; // Playing note actual pitch + int fDate; // KeyOn date + FAUSTFLOAT fLevel; // Last audio block level + std::vector fGatePath; // Paths of 'gate' control + std::vector fGainPath; // Paths of 'gain' control + std::vector fFreqPath; // Paths of 'freq' control + dsp_voice(dsp* dsp):decorator_dsp(dsp) { dsp->buildUserInterface(this); fNote = kFreeVoice; fLevel = FAUSTFLOAT(0); fDate = 0; - fTrigger = false; extractPaths(fGatePath, fFreqPath, fGainPath); } + virtual ~dsp_voice() + {} - void extractPaths(std::string& gate, std::string& freq, std::string& gain) + void extractPaths(std::vector& gate, std::vector& freq, std::vector& gain) { // Keep gain, freq and gate labels std::map::iterator it; for (it = getMap().begin(); it != getMap().end(); it++) { std::string path = (*it).first; if (endsWith(path, "/gate")) { - gate = path; + gate.push_back(path); } else if (endsWith(path, "/freq")) { - freq = path; + freq.push_back(path); } else if (endsWith(path, "/gain")) { - gain = path; + gain.push_back(path); } } } // MIDI velocity [0..127] - void keyOn(int pitch, int velocity) + void keyOn(int pitch, int velocity, bool trigger) { - setParamValue(fFreqPath, midiToFreq(pitch)); - setParamValue(fGainPath, float(velocity)/127.f); - fNote = pitch; - fTrigger = true; // so that envelop is always re-initialized + keyOn(pitch, float(velocity)/127.f, trigger); } // Normalized MIDI velocity [0..1] - void keyOn(int pitch, float velocity) + void keyOn(int pitch, float velocity, bool trigger) { - setParamValue(fFreqPath, midiToFreq(pitch)); - setParamValue(fGainPath, velocity); + for (size_t i = 0; i < fFreqPath.size(); i++) { + setParamValue(fFreqPath[i], midiToFreq(pitch)); + } + for (size_t i = 0; i < fGatePath.size(); i++) { + setParamValue(fGatePath[i], FAUSTFLOAT(1)); + } + for (size_t i = 0; i < fGainPath.size(); i++) { + setParamValue(fGainPath[i], velocity); + } + fNote = pitch; - fTrigger = true; // so that envelop is always re-initialized } void keyOff(bool hard = false) { // No use of velocity for now... - setParamValue(fGatePath, FAUSTFLOAT(0)); + for (size_t i = 0; i < fGatePath.size(); i++) { + setParamValue(fGatePath[i], FAUSTFLOAT(0)); + } + if (hard) { - // Stop immediately + // Immediately stop voice fNote = kFreeVoice; - fTrigger = false; } else { // Release voice fNote = kReleaseVoice; } } - void play(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) - { - if (fTrigger) { - // New note, so trigger it - trigger(count, inputs, outputs); - } else { - // Compute the voice - compute(count, inputs, outputs); - } - } - - void trigger(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) - { - setParamValue(fGatePath, FAUSTFLOAT(0)); - computeSlice(0, 1, inputs, outputs); - setParamValue(fGatePath, FAUSTFLOAT(1)); - computeSlice(1, count - 1, inputs, outputs); - fTrigger = false; - } - - void computeSlice(int offset, int slice, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) - { - if (slice > 0) { - FAUSTFLOAT** inputs_slice = (FAUSTFLOAT**)alloca(getNumInputs() * sizeof(FAUSTFLOAT*)); - for (int chan = 0; chan < getNumInputs(); chan++) { - inputs_slice[chan] = &(inputs[chan][offset]); - } - - FAUSTFLOAT** outputs_slice = (FAUSTFLOAT**)alloca(getNumOutputs() * sizeof(FAUSTFLOAT*)); - for (int chan = 0; chan < getNumOutputs(); chan++) { - outputs_slice[chan] = &(outputs[chan][offset]); - } - - compute(slice, inputs_slice, outputs_slice); - } - } - }; /** @@ -296,7 +252,7 @@ struct dsp_voice_group { virtual ~dsp_voice_group() { - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { delete fVoiceTable[i]; } delete fVoiceGroup; @@ -317,7 +273,7 @@ struct dsp_voice_group { // Groups all uiItem for a given path fVoiceGroup = new proxy_dsp(fVoiceTable[0]); fVoiceGroup->buildUserInterface(&fGroups); - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { fVoiceTable[i]->buildUserInterface(&fGroups); } } @@ -333,11 +289,11 @@ struct dsp_voice_group { fVoiceGroup->buildUserInterface(ui_interface); ui_interface->closeBox(); - // In not group, also add individual voices UI + // If not grouped, also add individual voices UI if (!fGroupControl) { - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { char buffer[32]; - snprintf(buffer, 31, ((fVoiceTable.size() < 8) ? "Voice%d" : "V%d"), i+1); + snprintf(buffer, 32, ((fVoiceTable.size() < 8) ? "Voice%ld" : "V%ld"), long(i+1)); ui_interface->openHorizontalBox(buffer); fVoiceTable[i]->buildUserInterface(ui_interface); ui_interface->closeBox(); @@ -353,90 +309,136 @@ struct dsp_voice_group { }; /** - * Polyphonic DSP : group a set of DSP to be played together or triggered by MIDI. + * Base class for MIDI controllable DSP. */ -class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { +class dsp_poly : public decorator_dsp, public midi { + + public: + + dsp_poly(dsp* dsp):decorator_dsp(dsp) + {} + + virtual ~dsp_poly() {} + + // Group API + virtual void setGroup(bool group) = 0; + virtual bool getGroup() = 0; + +}; + +/** + * Polyphonic DSP: groups a set of DSP to be played together or triggered by MIDI. + * + * All voices are preallocated by cloning the single DSP voice given at creation time. + * Dynamic voice allocation is done in 'getFreeVoice' + */ + +class mydsp_poly : public dsp_voice_group, public dsp_poly { private: FAUSTFLOAT** fMixBuffer; int fDate; - inline FAUSTFLOAT mixVoice(int count, FAUSTFLOAT** outputBuffer, FAUSTFLOAT** mixBuffer) + FAUSTFLOAT mixVoice(int count, FAUSTFLOAT** outputBuffer, FAUSTFLOAT** mixBuffer) { FAUSTFLOAT level = 0; for (int i = 0; i < getNumOutputs(); i++) { FAUSTFLOAT* mixChannel = mixBuffer[i]; FAUSTFLOAT* outChannel = outputBuffer[i]; for (int j = 0; j < count; j++) { - level = FLOAT_MAX(level, (FAUSTFLOAT)fabs(outChannel[j])); + level = std::max(level, (FAUSTFLOAT)fabs(outChannel[j])); mixChannel[j] += outChannel[j]; } } return level; } - inline void clearOutput(int count, FAUSTFLOAT** mixBuffer) + void clearOutput(int count, FAUSTFLOAT** mixBuffer) { for (int i = 0; i < getNumOutputs(); i++) { memset(mixBuffer[i], 0, count * sizeof(FAUSTFLOAT)); } } - - inline int getVoice(int note, bool steal = false) - { - for (int i = 0; i < fVoiceTable.size(); i++) { - if (fVoiceTable[i]->fNote == note) { - if (steal) { - fVoiceTable[i]->fDate = fDate++; + + int getPlayingVoice(int pitch) + { + int voice_playing = kNoVoice; + int oldest_date_playing = INT_MAX; + + for (size_t i = 0; i < fVoiceTable.size(); i++) { + if (fVoiceTable[i]->fNote == pitch) { + // Keeps oldest playing voice + if (fVoiceTable[i]->fDate < oldest_date_playing) { + oldest_date_playing = fVoiceTable[i]->fDate; + voice_playing = int(i); } - return i; + } + } + + return voice_playing; + } + + // Always returns a voice + int getFreeVoice() + { + int voice = kNoVoice; + + // Looks for the first available voice + for (size_t i = 0; i < fVoiceTable.size(); i++) { + if (fVoiceTable[i]->fNote == kFreeVoice) { + voice = int(i); + goto result; } } - if (steal) { + { + // Otherwise steal one int voice_release = kNoVoice; int voice_playing = kNoVoice; + int oldest_date_release = INT_MAX; int oldest_date_playing = INT_MAX; // Scan all voices - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { if (fVoiceTable[i]->fNote == kReleaseVoice) { // Keeps oldest release voice if (fVoiceTable[i]->fDate < oldest_date_release) { oldest_date_release = fVoiceTable[i]->fDate; - voice_release = i; + voice_release = int(i); } } else { // Otherwise keeps oldest playing voice if (fVoiceTable[i]->fDate < oldest_date_playing) { oldest_date_playing = fVoiceTable[i]->fDate; - voice_playing = i; + voice_playing = int(i); } } } - + // Then decide which one to steal if (oldest_date_release != INT_MAX) { std::cout << "Steal release voice : voice_date " << fVoiceTable[voice_release]->fDate << " cur_date = " << fDate << " voice = " << voice_release << std::endl; - fVoiceTable[voice_release]->fDate = fDate++; - fVoiceTable[voice_release]->fTrigger = true; - return voice_release; + voice = voice_release; + goto result; } else if (oldest_date_playing != INT_MAX) { std::cout << "Steal playing voice : voice_date " << fVoiceTable[voice_playing]->fDate << " cur_date = " << fDate << " voice = " << voice_playing << std::endl; - fVoiceTable[voice_playing]->fDate = fDate++; - fVoiceTable[voice_playing]->fTrigger = true; - return voice_playing; + voice = voice_playing; + goto result; } else { assert(false); return kNoVoice; } - - } else { - return kNoVoice; } + + result: + // So that envelop is always re-initialized + fVoiceTable[voice]->instanceClear(); + fVoiceTable[voice]->fDate = fDate++; + fVoiceTable[voice]->fNote = kActiveVoice; + return voice; } static void panic(FAUSTFLOAT val, void* arg) @@ -446,7 +448,7 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { } } - inline bool checkPolyphony() + bool checkPolyphony() { if (fVoiceTable.size() > 0) { return true; @@ -456,17 +458,8 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { } } - // Always returns a voice - int newVoiceAux() - { - int voice = getVoice(kFreeVoice, true); - assert(voice != kNoVoice); - fVoiceTable[voice]->fNote = kActiveVoice; - return voice; - } - public: - + /** * Constructor. * @@ -477,16 +470,19 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { * @param group - if true, voices are not individually accessible, a global "Voices" tab will automatically dispatch * a given control on all voices, assuming GUI::updateAllGuis() is called. * If false, all voices can be individually controlled. + * setGroup/getGroup methods can be used to set/get the group state. * */ mydsp_poly(dsp* dsp, int nvoices, bool control = false, - bool group = true):decorator_dsp(dsp), dsp_voice_group(panic, this, control, group) + bool group = true) + : dsp_voice_group(panic, this, control, group), dsp_poly(dsp) // dsp parameter is deallocated by ~dsp_poly { fDate = 0; // Create voices + assert(nvoices > 0); for (int i = 0; i < nvoices; i++) { addVoice(new dsp_voice(dsp->clone())); } @@ -517,60 +513,73 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { void init(int samplingRate) { + decorator_dsp::init(samplingRate); + fVoiceGroup->init(samplingRate); + fPanic = FAUSTFLOAT(0); + // Init voices - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { fVoiceTable[i]->init(samplingRate); } } - - void instanceInit(int samplingRate) + + void instanceInit(int samplingFreq) { - // Init voices - for (int i = 0; i < fVoiceTable.size(); i++) { - fVoiceTable[i]->instanceInit(samplingRate); - } + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); } void instanceConstants(int samplingRate) { + decorator_dsp::instanceConstants(samplingRate); + fVoiceGroup->instanceConstants(samplingRate); + // Init voices - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { fVoiceTable[i]->instanceConstants(samplingRate); } } void instanceResetUserInterface() { - for (int i = 0; i < fVoiceTable.size(); i++) { + decorator_dsp::instanceResetUserInterface(); + fVoiceGroup->instanceResetUserInterface(); + fPanic = FAUSTFLOAT(0); + + for (size_t i = 0; i < fVoiceTable.size(); i++) { fVoiceTable[i]->instanceResetUserInterface(); } } void instanceClear() { - for (int i = 0; i < fVoiceTable.size(); i++) { + decorator_dsp::instanceClear(); + fVoiceGroup->instanceClear(); + + for (size_t i = 0; i < fVoiceTable.size(); i++) { fVoiceTable[i]->instanceClear(); } } virtual mydsp_poly* clone() { - return new mydsp_poly(fDSP->clone(), fVoiceTable.size(), fVoiceControl, fGroupControl); + return new mydsp_poly(fDSP->clone(), int(fVoiceTable.size()), fVoiceControl, fGroupControl); } void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - assert(count < MIX_BUFFER_SIZE); + assert(count <= MIX_BUFFER_SIZE); // First clear the outputs clearOutput(count, outputs); if (fVoiceControl) { // Mix all playing voices - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { dsp_voice* voice = fVoiceTable[i]; if (voice->fNote != kFreeVoice) { - voice->play(count, inputs, fMixBuffer); + voice->compute(count, inputs, fMixBuffer); // Mix it in result voice->fLevel = mixVoice(count, fMixBuffer, outputs); // Check the level to possibly set the voice in kFreeVoice again @@ -581,7 +590,7 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { } } else { // Mix all voices - for (int i = 0; i < fVoiceTable.size(); i++) { + for (size_t i = 0; i < fVoiceTable.size(); i++) { fVoiceTable[i]->compute(count, inputs, fMixBuffer); mixVoice(count, fMixBuffer, outputs); } @@ -592,11 +601,19 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { { compute(count, inputs, outputs); } + + // Terminate all active voices, gently or immediately (depending of 'hard' value) + void allNotesOff(bool hard = false) + { + for (size_t i = 0; i < fVoiceTable.size(); i++) { + fVoiceTable[i]->keyOff(hard); + } + } // Additional polyphonic API MapUI* newVoice() { - return fVoiceTable[newVoiceAux()]; + return fVoiceTable[getFreeVoice()]; } void deleteVoice(MapUI* voice) @@ -608,13 +625,16 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { std::cout << "Voice not found\n"; } } + + void setGroup(bool group) { fGroupControl = group; } + bool getGroup() { return fGroupControl; } // MIDI API MapUI* keyOn(int channel, int pitch, int velocity) { if (checkPolyphony()) { - int voice = newVoiceAux(); - fVoiceTable[voice]->keyOn(pitch, velocity); + int voice = getFreeVoice(); + fVoiceTable[voice]->keyOn(pitch, velocity, true); return fVoiceTable[voice]; } else { return 0; @@ -624,7 +644,7 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { void keyOff(int channel, int pitch, int velocity = 127) { if (checkPolyphony()) { - int voice = getVoice(pitch); + int voice = getPlayingVoice(pitch); if (voice != kNoVoice) { fVoiceTable[voice]->keyOff(); } else { @@ -655,14 +675,162 @@ class mydsp_poly : public decorator_dsp, public dsp_voice_group, public midi { void ctrlChange14bits(int channel, int ctrl, int value) {} - // Terminate all active voices, gently or immediately (depending of 'hard' value) - void allNotesOff(bool hard = false) +}; + +static std::string pathToContent(const std::string& path) +{ + std::ifstream file(path.c_str(), std::ifstream::binary); + + file.seekg(0, file.end); + int size = int(file.tellg()); + file.seekg(0, file.beg); + + // And allocate buffer to that a single line can be read... + char* buffer = new char[size + 1]; + file.read(buffer, size); + + // Terminate the string + buffer[size] = 0; + std::string result = buffer; + file.close(); + delete [] buffer; + return result; +} + +/** + * Polyphonic DSP with an integrated effect. fPolyDSP will respond to MIDI messages. + */ +class dsp_poly_effect : public dsp_poly { + + private: + + dsp_poly* fPolyDSP; + + public: + + dsp_poly_effect(dsp_poly* dsp1, dsp* dsp2) + :dsp_poly(dsp2), fPolyDSP(dsp1) + {} + + virtual ~dsp_poly_effect() { - for (int i = 0; i < fVoiceTable.size(); i++) { - fVoiceTable[i]->keyOff(hard); - } + // dsp_poly_effect is also a decorator_dsp, which will free fPolyDSP + } + + // MIDI API + MapUI* keyOn(int channel, int pitch, int velocity) + { + return fPolyDSP->keyOn(channel, pitch, velocity); + } + void keyOff(int channel, int pitch, int velocity) + { + fPolyDSP->keyOff(channel, pitch, velocity); + } + void keyPress(int channel, int pitch, int press) + { + fPolyDSP->keyPress(channel, pitch, press); + } + void chanPress(int channel, int press) + { + fPolyDSP->chanPress(channel, press); + } + void ctrlChange(int channel, int ctrl, int value) + { + fPolyDSP->ctrlChange(channel, ctrl, value); } + void ctrlChange14bits(int channel, int ctrl, int value) + { + fPolyDSP->ctrlChange14bits(channel, ctrl, value); + } + void pitchWheel(int channel, int wheel) + { + fPolyDSP->pitchWheel(channel, wheel); + } + void progChange(int channel, int pgm) + { + fPolyDSP->progChange(channel, pgm); + } + + // Group API + void setGroup(bool group) + { + fPolyDSP->setGroup(group); + } + bool getGroup() + { + return fPolyDSP->getGroup(); + } +}; + +/** + * Polyphonic DSP factory class. Helper code to support polyphonic DSP source with an integrated effect. + */ +struct dsp_poly_factory : public dsp_factory { + + dsp_factory* fProcessFactory; + dsp_factory* fEffectFactory; + + std::string getEffectCode(const std::string& dsp_content) + { + std::stringstream effect_code; + effect_code << "adapt(1,1) = _; adapt(2,2) = _,_; adapt(1,2) = _ <: _,_; adapt(2,1) = _,_ :> _;"; + effect_code << "adaptor(F,G) = adapt(outputs(F),inputs(G)); dsp_code = environment{ " << dsp_content << " };"; + effect_code << "process = adaptor(dsp_code.process, dsp_code.effect) : dsp_code.effect;"; + return effect_code.str(); + } + + dsp_poly_factory(dsp_factory* process_factory = NULL, + dsp_factory* effect_factory = NULL): + fProcessFactory(process_factory) + ,fEffectFactory(effect_factory) + {} + + virtual ~dsp_poly_factory() + {} + + virtual std::string getName() { return fProcessFactory->getName(); } + virtual std::string getSHAKey() { return fProcessFactory->getSHAKey(); } + virtual std::string getDSPCode() { return fProcessFactory->getDSPCode(); } + virtual std::string getCompileOptions() { return fProcessFactory->getCompileOptions(); } + virtual std::vector getLibraryList() { return fProcessFactory->getLibraryList(); } + virtual std::vector getIncludePathnames() { return fProcessFactory->getIncludePathnames(); } + + virtual void setMemoryManager(dsp_memory_manager* manager) + { + fProcessFactory->setMemoryManager(manager); + if (fEffectFactory) { + fEffectFactory->setMemoryManager(manager); + } + } + virtual dsp_memory_manager* getMemoryManager() { return fProcessFactory->getMemoryManager(); } + + /* Create a new polyphonic DSP instance with global effect, to be deleted with C++ 'delete' + * + * @param nvoices - number of polyphony voices + * @param control - whether voices will be dynamically allocated and controlled (typically by a MIDI controler). + * If false all voices are always running. + * @param group - if true, voices are not individually accessible, a global "Voices" tab will automatically dispatch + * a given control on all voices, assuming GUI::updateAllGuis() is called. + * If false, all voices can be individually controlled. + */ + dsp_poly* createPolyDSPInstance(int nvoices, bool control, bool group) + { + dsp_poly* dsp_poly = new mydsp_poly(fProcessFactory->createDSPInstance(), nvoices, control, group); + if (fEffectFactory) { + // the 'dsp_poly' object has to be controlled with MIDI, so kept separated from new dsp_sequencer(...) object + return new dsp_poly_effect(dsp_poly, new dsp_sequencer(dsp_poly, fEffectFactory->createDSPInstance())); + } else { + return new dsp_poly_effect(dsp_poly, dsp_poly); + } + } + + /* Create a new DSP instance, to be deleted with C++ 'delete' */ + dsp* createDSPInstance() + { + return fProcessFactory->createDSPInstance(); + } + }; #endif // __poly_dsp__ diff --git a/source/DEINDUGens/include/faust/dsp/poly-interpreter-dsp.h b/source/DEINDUGens/include/faust/dsp/poly-interpreter-dsp.h new file mode 100644 index 0000000000..6ff854c63b --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/poly-interpreter-dsp.h @@ -0,0 +1,104 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __poly_interpreter_dsp_tools__ +#define __poly_interpreter_dsp_tools__ + +#include "faust/dsp/interpreter-dsp.h" +#include "faust/dsp/poly-dsp.h" + +/** + * Interpreter backend based Polyphonic DSP factory class. + */ + +struct interpreter_dsp_poly_factory : public dsp_poly_factory { + + interpreter_dsp_poly_factory(const std::string& name_app, + const std::string& dsp_content, + int argc, const char* argv[], + std::string& error_msg) + { + fProcessFactory = createInterpreterDSPFactoryFromString(name_app, dsp_content, argc, argv, error_msg); + if (fProcessFactory) { + fEffectFactory = createInterpreterDSPFactoryFromString(name_app, getEffectCode(dsp_content), argc, argv, error_msg); + if (!fEffectFactory) { + std::cerr << "interpreter_dsp_poly_factory : fEffectFactory " << error_msg << std::endl; + // The error message is not really needed... + error_msg = ""; + } + } else { + std::cerr << "interpreter_dsp_poly_factory : fProcessFactory " << error_msg << std::endl; + throw std::bad_alloc(); + } + } + + virtual ~interpreter_dsp_poly_factory() + { + deleteInterpreterDSPFactory(static_cast(fProcessFactory)); + if (fEffectFactory) { deleteInterpreterDSPFactory(static_cast(fEffectFactory)); } + } + +}; + +/** + * Create a Faust Polyphonic DSP factory from a DSP source code as a file. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param error_msg - the error string to be filled + * since the maximum value may change with new LLVM versions) + * + * @return a Polyphonic DSP factory on success, otherwise a null pointer. + */ +static dsp_poly_factory* createInterpreterPolyDSPFactoryFromString(const std::string& name_app, + const std::string& dsp_content, + int argc, const char* argv[], + std::string& error_msg) +{ + try { + return new interpreter_dsp_poly_factory(name_app, dsp_content, argc, argv, error_msg); + } catch (...) { + return NULL; + } +} + +/** + * Create a Faust Polyphonic DSP factory from a DSP source code as a string. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param error_msg - the error string to be filled + * since the maximum value may change with new LLVM versions) + * + * @return a Polyphonic DSP factory on success, otherwise a null pointer. + */ +static dsp_poly_factory* createInterpreterPolyDSPFactoryFromFile(const std::string& filename, + int argc, const char* argv[], + std::string& error_msg) +{ + return createInterpreterPolyDSPFactoryFromString("FaustDSP", pathToContent(filename), argc, argv, error_msg); +} + +#endif // __poly_dsp_tools__ diff --git a/source/DEINDUGens/include/faust/dsp/poly-llvm-dsp.h b/source/DEINDUGens/include/faust/dsp/poly-llvm-dsp.h new file mode 100644 index 0000000000..e25c74c190 --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/poly-llvm-dsp.h @@ -0,0 +1,255 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __poly_llvm_dsp_tools__ +#define __poly_llvm_dsp_tools__ + +#include "faust/dsp/llvm-dsp.h" +#include "faust/dsp/poly-dsp.h" + +/** + * LLVM backend based Polyphonic DSP factory class. + */ + +struct llvm_dsp_poly_factory : public dsp_poly_factory { + + llvm_dsp_poly_factory(const std::string& name_app, + const std::string& dsp_content, + int argc, const char* argv[], + const std::string& target, + std::string& error_msg, + int opt_level = -1) + { + fProcessFactory = createDSPFactoryFromString(name_app, dsp_content, argc, argv, target, error_msg); + if (fProcessFactory) { + fEffectFactory = createDSPFactoryFromString(name_app, getEffectCode(dsp_content), argc, argv, target, error_msg); + if (!fEffectFactory) { + std::cerr << "llvm_dsp_poly_factory : fEffectFactory " << error_msg << std::endl; + // The error message is not really needed... + error_msg = ""; + } + } else { + std::cerr << "llvm_dsp_poly_factory : fProcessFactory " << error_msg << std::endl; + throw std::bad_alloc(); + } + } + + virtual ~llvm_dsp_poly_factory() + { + deleteDSPFactory(static_cast(fProcessFactory)); + if (fEffectFactory) { deleteDSPFactory(static_cast(fEffectFactory)); } + } + +}; + +/** + * Create a Faust Polyphonic DSP factory from a DSP source code as a file. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param target - the LLVM machine target (using empty string will take current machine settings) + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + * + * @return a Polyphonic DSP factory on success, otherwise a null pointer. + */ +static dsp_poly_factory* createPolyDSPFactoryFromString(const std::string& name_app, + const std::string& dsp_content, + int argc, const char* argv[], + const std::string& target, + std::string& error_msg, + int opt_level = -1) +{ + try { + return new llvm_dsp_poly_factory(name_app, dsp_content, argc, argv, target, error_msg, opt_level); + } catch (...) { + return NULL; + } +} + +/** + * Create a Faust Polyphonic DSP factory from a DSP source code as a string. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param target - the LLVM machine target (using empty string will take current machine settings) + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions) + * + * @return a Polyphonic DSP factory on success, otherwise a null pointer. + */ +static dsp_poly_factory* createPolyDSPFactoryFromFile(const std::string& filename, + int argc, const char* argv[], + const std::string& target, + std::string& error_msg, + int opt_level = -1) +{ + return createPolyDSPFactoryFromString("FaustDSP", pathToContent(filename), argc, argv, target, error_msg, opt_level); +} + +/** + * Create a Faust Polyphonic DSP factory from a LLVM bitcode file. + * + * @param bit_code_path - the LLVM bitcode file pathname + * @param target - the LLVM machine target (using empty string will takes current machine settings) + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when calling + * createDSPFactory can possibly be used. + * + * @return the Polyphonic DSP factory on success, otherwise a null pointer. + */ +static dsp_poly_factory* readPolyDSPFactoryFromBitcodeFile(const std::string& bit_code_path, const std::string& target, std::string& error_msg, int opt_level = -1) +{ + std::string process_path = bit_code_path + "_bitcode_process"; + std::string effect_path = bit_code_path + "_bicode_effect"; + llvm_dsp_factory* process_factory = readDSPFactoryFromBitcodeFile(process_path, target, error_msg, opt_level); + llvm_dsp_factory* effect_factory = readDSPFactoryFromBitcodeFile(effect_path, target, error_msg, opt_level); + if (process_factory) { + return new dsp_poly_factory(process_factory, effect_factory); + } else { + llvm_dsp_factory* process_factory = readDSPFactoryFromBitcodeFile(bit_code_path, target, error_msg, opt_level); + return (process_factory) ? new dsp_poly_factory(process_factory, NULL) : NULL; + } +} + +/** + * Write a Faust Polyphonic DSP factory into a LLVM bitcode file. + * + * @param factory - the DSP factory + * @param machine_code_path - the machine code file pathname + * @param target - the LLVM machine target (using empty string will takes current machine settings). + * + */ +static void writePolyDSPFactoryToBitcodeFile(dsp_poly_factory* factory, const std::string& bit_code_path) +{ + std::string process_path, effect_path; + if (factory->fEffectFactory) { + effect_path = bit_code_path + "_bicode_effect"; + process_path = bit_code_path + "_bitcode_process"; + writeDSPFactoryToBitcodeFile(static_cast(factory->fEffectFactory), effect_path); + } else { + process_path = bit_code_path; + } + writeDSPFactoryToBitcodeFile(static_cast(factory->fProcessFactory), process_path); +} + +/** + * Create a Faust Polyphonic DSP factory from a LLVM IR (textual) file. + * + * @param bit_code_path - the LLVM bitcode file pathname + * @param target - the LLVM machine target (using empty string will takes current machine settings) + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when calling + * createDSPFactory can possibly be used. + * + * @return the Polyphonic DSP factory on success, otherwise a null pointer. + */ +static dsp_poly_factory* readPolyDSPFactoryFromIRFile(const std::string& ir_code_path, const std::string& target, std::string& error_msg, int opt_level = -1) +{ + std::string process_path = ir_code_path + "_ir_process"; + std::string effect_path = ir_code_path + "_ir_process"; + llvm_dsp_factory* process_factory = readDSPFactoryFromIRFile(process_path, target, error_msg, opt_level); + llvm_dsp_factory* effect_factory = readDSPFactoryFromIRFile(effect_path, target, error_msg, opt_level); + if (process_factory) { + return new dsp_poly_factory(process_factory, effect_factory); + } else { + llvm_dsp_factory* process_factory = readDSPFactoryFromIRFile(ir_code_path, target, error_msg, opt_level); + return (process_factory) ? new dsp_poly_factory(process_factory, NULL) : NULL; + } +} + +/** + * Write a Faust Polyphonic DSP factory into a LLVM IR (textual) file. + * + * @param factory - the DSP factory + * @param machine_code_path - the machine code file pathname + * @param target - the LLVM machine target (using empty string will takes current machine settings). + * + */ +static void writePolyDSPFactoryToIRFile(dsp_poly_factory* factory, const std::string& ir_code_path) +{ + std::string process_path, effect_path; + if (factory->fEffectFactory) { + effect_path = ir_code_path + "_ir_process"; + process_path = ir_code_path + "_ir_effect"; + writeDSPFactoryToIRFile(static_cast(factory->fEffectFactory), effect_path); + } else { + process_path = ir_code_path; + } + writeDSPFactoryToIRFile(static_cast(factory->fProcessFactory), process_path); +} + +/** + * Create a Faust Polyphonic DSP factory from a machine code file. + * + * @param bit_code_path - the LLVM bitcode file pathname + * @param target - the LLVM machine target (using empty string will takes current machine settings) + * @param error_msg - the error string to be filled + * @param opt_level - LLVM IR to IR optimization level (from -1 to 4, -1 means 'maximum possible value' + * since the maximum value may change with new LLVM versions). A higher value than the one used when calling + * createDSPFactory can possibly be used. + * + * @return the Polyphonic DSP factory on success, otherwise a null pointer. + */ +static dsp_poly_factory* readPolyDSPFactoryFromMachineFile(const std::string& machine_code_path, const std::string& target, std::string& error_msg) +{ + std::string process_path = machine_code_path + "_machine_process"; + std::string effect_path = machine_code_path + "_machine_process"; + llvm_dsp_factory* process_factory = readDSPFactoryFromMachineFile(process_path, target, error_msg); + llvm_dsp_factory* effect_factory = readDSPFactoryFromMachineFile(effect_path, target, error_msg); + if (process_factory) { + return new dsp_poly_factory(process_factory, effect_factory); + } else { + llvm_dsp_factory* process_factory = readDSPFactoryFromMachineFile(machine_code_path, target, error_msg); + return (process_factory) ? new dsp_poly_factory(process_factory, NULL) : NULL; + } +} + +/** + * Write a Faust Polyphonic DSP factory into a machine code file. + * + * @param factory - the DSP factory + * @param machine_code_path - the machine code file pathname + * @param target - the LLVM machine target (using empty string will takes current machine settings). + * + */ +static void writePolyDSPFactoryToMachineFile(dsp_poly_factory* factory, const std::string& machine_code_path, const std::string& target) +{ + std::string process_path, effect_path; + if (factory->fEffectFactory) { + effect_path = machine_code_path + "_machine_process"; + process_path = machine_code_path + "_machine_effect"; + writeDSPFactoryToMachineFile(static_cast(factory->fEffectFactory), effect_path, target); + } else { + process_path = machine_code_path; + } + writeDSPFactoryToMachineFile(static_cast(factory->fProcessFactory), process_path, target); +} + +#endif // __poly_llvm_dsp_tools__ diff --git a/source/DEINDUGens/include/faust/dsp/poly-wasm-dsp.h b/source/DEINDUGens/include/faust/dsp/poly-wasm-dsp.h new file mode 100644 index 0000000000..b210d94dff --- /dev/null +++ b/source/DEINDUGens/include/faust/dsp/poly-wasm-dsp.h @@ -0,0 +1,128 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __poly_wasm_dsp_tools__ +#define __poly_wasm_dsp_tools__ + +#include "faust/dsp/wasm-dsp.h" +#include "faust/dsp/poly-dsp.h" + +/** + * wasm backend based Polyphonic DSP factory class. + */ + +struct wasm_dsp_poly_factory : public dsp_poly_factory { + + wasm_dsp_poly_factory(const std::string& name_app, + const std::string& dsp_content, + const std::vector& argv, + std::string& error_msg) + { + fProcessFactory = createWasmDSPFactoryFromString(name_app, dsp_content, argv, error_msg); + if (fProcessFactory) { + fEffectFactory = createWasmDSPFactoryFromString(name_app, getEffectCode(dsp_content), argv, error_msg); + if (!fEffectFactory) { + std::cerr << "wasm_dsp_poly_factory : fEffectFactory " << error_msg << std::endl; + // The error message is not really needed... + error_msg = ""; + } + } else { + std::cerr << "wasm_dsp_poly_factory : fProcessFactory " << error_msg << std::endl; + throw std::bad_alloc(); + } + } + + virtual ~wasm_dsp_poly_factory() + { + deleteWasmDSPFactory(static_cast(fProcessFactory)); + if (fEffectFactory) { deleteWasmDSPFactory(static_cast(fEffectFactory)); } + } + + /** + * Create a Faust Polyphonic DSP factory from a DSP source code as a file. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param error_msg - the error string to be filled + * since the maximum value may change with new LLVM versions) + * + * @return a Polyphonic DSP factory on success, otherwise a null pointer. + */ + static dsp_poly_factory* createWasmPolyDSPFactoryFromString(const std::string& name_app, + const std::string& dsp_content, + const std::vector& argv, + std::string& error_msg) + { + try { + return new wasm_dsp_poly_factory(name_app, dsp_content, argv, error_msg); + } catch (...) { + return NULL; + } + } + + /** + * Create a Faust Polyphonic DSP factory from a DSP source code as a string. + * + * @param filename - the DSP filename + * @param argc - the number of parameters in argv array + * @param argv - the array of parameters (Warning : aux files generation options will be filtered (-svg, ...) --> use generateAuxFiles) + * @param error_msg - the error string to be filled + * since the maximum value may change with new LLVM versions) + * + * @return a Polyphonic DSP factory on success, otherwise a null pointer. + */ + static dsp_poly_factory* createWasmPolyDSPFactoryFromFile(const std::string& filename, + const std::vector& argv, + std::string& error_msg) + { + return createWasmPolyDSPFactoryFromString("FaustDSP", pathToContent(filename), argv, error_msg); + } + +}; + + +#ifdef EMCC +#include +#include +using namespace emscripten; + +vector makeStringVector() +{ + vector v; + return v; +} + +EMSCRIPTEN_BINDINGS(CLASS_wasm_dynamic_dsp_factory) { + emscripten::function("makeStringVector", &makeStringVector); + register_vector("vector"); + class_("wasm_dsp_poly_factory") + .constructor() + .class_function("createWasmPolyDSPFactoryFromString", + &wasm_dsp_poly_factory::createWasmPolyDSPFactoryFromString, + allow_raw_pointers()); +} + +#endif + +#endif // __poly_wasm_dsp__ diff --git a/source/DEINDUGens/include/faust/dsp/proxy-dsp.h b/source/DEINDUGens/include/faust/dsp/proxy-dsp.h index aacecfc6a3..c37a5fc0b6 100644 --- a/source/DEINDUGens/include/faust/dsp/proxy-dsp.h +++ b/source/DEINDUGens/include/faust/dsp/proxy-dsp.h @@ -1,35 +1,24 @@ /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __proxy_dsp__ @@ -39,184 +28,9 @@ #include #include "faust/dsp/dsp.h" -#include "faust/gui/SimpleParser.h" +#include "faust/gui/JSONUIDecoder.h" #include "faust/gui/JSONUI.h" -#ifdef _WIN32 -#include -#define snprintf _snprintf -#endif - -inline FAUSTFLOAT STR2REAL(const std::string& s) { return (strtod(s.c_str(), NULL)); } - -//------------------------------------------------------------------- -// Decode a dsp JSON description and implement 'buildUserInterface' -//------------------------------------------------------------------- - -struct JSONUIDecoder { - - std::string fName; - - std::map fMetadatas; - std::vector fUiItems; - - FAUSTFLOAT* fInControl; - FAUSTFLOAT* fOutControl; - - std::string fJSON; - - int fNumInputs, fNumOutputs; - int fInputItems, fOutputItems; - - JSONUIDecoder(const std::string& json) - { - fJSON = json; - const char* p = fJSON.c_str(); - parseJson(p, fMetadatas, fUiItems); - - // fMetadatas will contain the "meta" section as well as , , pairs - if (fMetadatas.find("name") != fMetadatas.end()) { - fName = fMetadatas["name"]; - fMetadatas.erase("name"); - } else { - fName = ""; - } - - if (fMetadatas.find("inputs") != fMetadatas.end()) { - fNumInputs = atoi(fMetadatas["inputs"].c_str()); - fMetadatas.erase("inputs"); - } else { - fNumInputs = -1; - } - - if (fMetadatas.find("outputs") != fMetadatas.end()) { - fNumOutputs = atoi(fMetadatas["outputs"].c_str()); - fMetadatas.erase("outputs"); - } else { - fNumOutputs = -1; - } - - vector::iterator it; - fInputItems = 0; - fOutputItems = 0; - - for (it = fUiItems.begin(); it != fUiItems.end(); it++) { - string type = (*it)->type; - if (type == "vslider" || type == "hslider" || type == "nentry" || type == "button") { - fInputItems++; - } else if (type == "hbargraph" || type == "vbargraph") { - fOutputItems++; - } - } - - fInControl = new FAUSTFLOAT[fInputItems]; - fOutControl = new FAUSTFLOAT[fOutputItems]; - } - - virtual ~JSONUIDecoder() - { - vector::iterator it; - for (it = fUiItems.begin(); it != fUiItems.end(); it++) { - delete(*it); - } - delete [] fInControl; - delete [] fOutControl; - } - - void metadata(Meta* m) - { - std::map::iterator it; - for (it = fMetadatas.begin(); it != fMetadatas.end(); it++) { - m->declare((*it).first.c_str(), (*it).second.c_str()); - } - } - - void buildUserInterface(UI* ui) - { - // To be sure the floats are correctly encoded - char* tmp_local = setlocale(LC_ALL, NULL); - setlocale(LC_ALL, "C"); - - int counterIn = 0; - int counterOut = 0; - vector::iterator it; - - for (it = fUiItems.begin(); it != fUiItems.end(); it++) { - - bool isInItem = false; - bool isOutItem = false; - string type = (*it)->type; - - FAUSTFLOAT init = STR2REAL((*it)->init); - FAUSTFLOAT min = STR2REAL((*it)->min); - FAUSTFLOAT max = STR2REAL((*it)->max); - FAUSTFLOAT step = STR2REAL((*it)->step); - - if (type == "vslider" || type == "hslider" || type == "nentry" || type == "button") { - isInItem = true; - } else if (type == "hbargraph" || type == "vbargraph") { - isOutItem = true; - } - - // Meta data declaration for input items - if ((*it)->type.find("group") == string::npos && (*it)->type.find("bargraph") == string::npos && (*it)->type != "close") { - fInControl[counterIn] = init; - for (int i = 0; i < (*it)->meta.size(); i++) { - ui->declare(&fInControl[counterIn], (*it)->meta[i].first.c_str(), (*it)->meta[i].second.c_str()); - } - } - // Meta data declaration for output items - else if ((*it)->type.find("bargraph") != string::npos) { - fOutControl[counterOut] = init; - for (int i = 0; i < (*it)->meta.size(); i++) { - ui->declare(&fOutControl[counterOut], (*it)->meta[i].first.c_str(), (*it)->meta[i].second.c_str()); - } - } - // Meta data declaration for group opening or closing - else { - for (int i = 0; i < (*it)->meta.size(); i++) { - ui->declare(0, (*it)->meta[i].first.c_str(), (*it)->meta[i].second.c_str()); - } - } - - if (type == "hgroup") { - ui->openHorizontalBox((*it)->label.c_str()); - } else if (type == "vgroup") { - ui->openVerticalBox((*it)->label.c_str()); - } else if (type == "tgroup") { - ui->openTabBox((*it)->label.c_str()); - } else if (type == "vslider") { - ui->addVerticalSlider((*it)->label.c_str(), &fInControl[counterIn], init, min, max, step); - } else if (type == "hslider") { - ui->addHorizontalSlider((*it)->label.c_str(), &fInControl[counterIn], init, min, max, step); - } else if (type == "checkbox") { - ui->addCheckButton((*it)->label.c_str(), &fInControl[counterIn]); - } else if (type == "hbargraph") { - ui->addHorizontalBargraph((*it)->label.c_str(), &fOutControl[counterOut], min, max); - } else if (type == "vbargraph") { - ui->addVerticalBargraph((*it)->label.c_str(), &fOutControl[counterOut], min, max); - } else if (type == "nentry") { - ui->addNumEntry((*it)->label.c_str(), &fInControl[counterIn], init, min, max, step); - } else if (type == "button") { - ui->addButton((*it)->label.c_str(), &fInControl[counterIn]); - } else if (type == "close") { - ui->closeBox(); - } - - if (isInItem) { - counterIn++; - } - - if (isOutItem) { - counterOut++; - } - } - - setlocale(LC_ALL, tmp_local); - } - -}; - //---------------------------------------------------------------- // Proxy dsp definition created from the DSP JSON description // This class allows a 'proxy' dsp to control a real dsp @@ -232,7 +46,7 @@ class proxy_dsp : public dsp { public: - proxy_dsp(const string& json) + proxy_dsp(const std::string& json) { fDecoder = new JSONUIDecoder(json); fSamplingFreq = -1; @@ -252,16 +66,24 @@ class proxy_dsp : public dsp { delete fDecoder; } - virtual int getNumInputs() { return fDecoder->fNumInputs; } + virtual int getNumInputs() { return fDecoder->fNumInputs; } virtual int getNumOutputs() { return fDecoder->fNumOutputs; } virtual void buildUserInterface(UI* ui) { fDecoder->buildUserInterface(ui); } // To possibly implement in a concrete proxy dsp - virtual void init(int samplingRate) { fSamplingFreq = samplingRate; } - virtual void instanceInit(int samplingRate) {} - virtual void instanceConstants(int samplingRate) {} - virtual void instanceResetUserInterface() {} + virtual void init(int samplingRate) + { + instanceInit(samplingRate); + } + virtual void instanceInit(int samplingRate) + { + instanceConstants(samplingRate); + instanceResetUserInterface(); + instanceClear(); + } + virtual void instanceConstants(int samplingRate) { fSamplingFreq = samplingRate; } + virtual void instanceResetUserInterface() { fDecoder->resetUserInterface(); } virtual void instanceClear() {} virtual int getSampleRate() { return fSamplingFreq; } diff --git a/source/DEINDUGens/include/faust/dsp/sound-player.h b/source/DEINDUGens/include/faust/dsp/sound-player.h index 6b2889b01f..346d9f703e 100644 --- a/source/DEINDUGens/include/faust/dsp/sound-player.h +++ b/source/DEINDUGens/include/faust/dsp/sound-player.h @@ -1,26 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2019 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __sound_player__ @@ -29,90 +27,239 @@ #include #include #include +#include #include "faust/dsp/dsp.h" - -#ifdef FAUSTFLOAT - #if (FAUSTFLOAT == float) - #define SND_READ sf_readf_float - #else - #define SND_READ sf_readf_double - #endif -#endif +#include "faust/gui/ring-buffer.h" #define BUFFER_SIZE 512 +#define RING_BUFFER_SIZE BUFFER_SIZE * 32 +#define HALF_RING_BUFFER_SIZE RING_BUFFER_SIZE / 2 /** -* LibSndfile based player -*/ + * LibSndfile based player + */ -class sound_player : public dsp { - - private: +class sound_base_player : public dsp { + protected: + + typedef sf_count_t (* sample_read)(SNDFILE* sndfile, FAUSTFLOAT* ptr, sf_count_t frames); + SF_INFO fInfo; SNDFILE* fFile; std::string fFileName; - int fSamplingFreq; - int fFrames; // File current frame while playing (starts at fInfo.frames, ends at 0) - FAUSTFLOAT** fBuffer; // Buffer of non-interleased frames - + int fSamplingRate; + + // File current frame while playing + FAUSTFLOAT fCurFrames; + // Zones for UI management FAUSTFLOAT fPlayButton; FAUSTFLOAT fLoopButton; - FAUSTFLOAT fSpeedSlider; - - void playSlice(int count, int src, int dst, FAUSTFLOAT** outputs) - { - for (int i = 0; i < fInfo.channels; i++) { - memcpy(&(outputs[i])[dst], &(fBuffer[i])[src], sizeof(FAUSTFLOAT) * count); - } - } - + FAUSTFLOAT fSetFrames; + FAUSTFLOAT fLastSetFrames; + + // To protect position change + std::mutex fMutex; + + // Generic reader function + sample_read fReaderFun; + + virtual void playSlice(int count, int src, int dst, FAUSTFLOAT** outputs) {} + + virtual void setFrame(int frames) {} + void clearSlice(int count, int dst, FAUSTFLOAT** outputs) { for (int i = 0; i < fInfo.channels; i++) { memset(&(outputs[i])[dst], 0, sizeof(FAUSTFLOAT) * count); } } - + public: - - sound_player(const std::string& filename) + + sound_base_player(const std::string& filename) { fFileName = filename; - fSamplingFreq = -1; + fSamplingRate = -1; + + if (sizeof(FAUSTFLOAT) == 4) { + fReaderFun = reinterpret_cast(sf_readf_float); + } else { + fReaderFun = reinterpret_cast(sf_readf_double); + } fFile = sf_open(fFileName.c_str(), SFM_READ, &fInfo); if (!fFile) { std::cerr << sf_strerror(fFile) << std::endl; throw std::bad_alloc(); } - + } + + virtual ~sound_base_player() + {} + + virtual int getNumInputs() { return 0; } + virtual int getNumOutputs() { return fInfo.channels; } + + virtual void buildUserInterface(UI* ui_interface) + { + ui_interface->openVerticalBox("Transport"); + ui_interface->addCheckButton("Play", &fPlayButton); + ui_interface->addCheckButton("Loop", &fLoopButton); + ui_interface->addHorizontalSlider("Set position", &fSetFrames, FAUSTFLOAT(0), FAUSTFLOAT(0), FAUSTFLOAT(fInfo.frames), FAUSTFLOAT(100)); + ui_interface->addHorizontalBargraph("Current position", &fCurFrames, FAUSTFLOAT(0), FAUSTFLOAT(fInfo.frames)); + ui_interface->closeBox(); + } + + virtual int getSampleRate() { return fSamplingRate; } + + static void classInit(int samplingRate) {} + + virtual void init(int samplingRate) + { + classInit(samplingRate); + instanceInit(samplingRate); + } + + virtual void instanceInit(int samplingRate) + { + instanceConstants(samplingRate); + instanceResetUserInterface(); + instanceClear(); + } + + virtual void instanceConstants(int samplingRate) + { + fSamplingRate = samplingRate; + } + + virtual void instanceResetUserInterface() + { + // Play and loop by default + fPlayButton = FAUSTFLOAT(1); + fLoopButton = FAUSTFLOAT(1); + fSetFrames = FAUSTFLOAT(0); + fLastSetFrames = FAUSTFLOAT(0); + } + + virtual void instanceClear() + { + fCurFrames = FAUSTFLOAT(0); + } + + virtual sound_base_player* clone() { return new sound_base_player(fFileName); } + + virtual void metadata(Meta* m) + { + m->declare("name", fFileName.c_str()); + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + { + if (fPlayButton == FAUSTFLOAT(1) && fMutex.try_lock()) { + + int rcount = std::min(count, int(fInfo.frames - fCurFrames)); + playSlice(rcount, fCurFrames, 0, outputs); + + if (rcount < count) { + if (fLoopButton == FAUSTFLOAT(1)) { + // Loop buffer + playSlice(count - rcount, 0, rcount, outputs); + fCurFrames = count - rcount; + } else { + // Otherwise clear end of buffer and stops + clearSlice(count - rcount, rcount, outputs); + fCurFrames = FAUSTFLOAT(0); + fPlayButton = 0; + } + } else { + fCurFrames += count; + } + + fMutex.unlock(); + + } else { + // Clear output + clearSlice(count, 0, outputs); + } + } + + static void setFrame(FAUSTFLOAT val, void* arg) + { + static_cast(arg)->setFrame(int(val)); + } + + FAUSTFLOAT* getCurFramesZone() + { + return &fCurFrames; + } + + FAUSTFLOAT* getSetFramesZone() + { + return &fSetFrames; + } + +}; + +/** + * Memory player + */ + +class sound_memory_player : public sound_base_player { + + private: + + FAUSTFLOAT** fBuffer; // Buffer of non-interleased frames + + void playSlice(int count, int src, int dst, FAUSTFLOAT** outputs) + { + for (int i = 0; i < fInfo.channels; i++) { + memcpy(&(outputs[i])[dst], &(fBuffer[i])[src], sizeof(FAUSTFLOAT) * count); + } + } + + void setFrame(int frames) + { + // If position change + if (fSetFrames != fLastSetFrames + && std::abs(fSetFrames - fLastSetFrames) > BUFFER_SIZE + && std::abs(fSetFrames - fCurFrames) > BUFFER_SIZE) { + fMutex.lock(); + fLastSetFrames = fSetFrames; + fCurFrames = fSetFrames; + fMutex.unlock(); + } + } + + public: + + sound_memory_player(const std::string& filename):sound_base_player(filename) + { fBuffer = new FAUSTFLOAT*[fInfo.channels]; for (int chan = 0; chan < fInfo.channels; chan++) { fBuffer[chan] = new FAUSTFLOAT[fInfo.frames]; } FAUSTFLOAT buffer[BUFFER_SIZE * fInfo.channels]; - sf_count_t nbf; - int dst = 0; - + sf_count_t nbf, index = 0; + do { // Read buffer - nbf = SND_READ(fFile, buffer, BUFFER_SIZE); + nbf = fReaderFun(fFile, buffer, BUFFER_SIZE); // Deinterleave it for (int chan = 0; chan < fInfo.channels; chan++) { for (int frame = 0; frame < nbf; frame++) { - fBuffer[chan][dst + frame] = buffer[frame * fInfo.channels + chan]; + fBuffer[chan][index + frame] = buffer[frame * fInfo.channels + chan]; } } // Move write index - dst += nbf; + index += nbf; } while (nbf == BUFFER_SIZE); } - - virtual ~sound_player() + + virtual ~sound_memory_player() { for (int i = 0; i < fInfo.channels; i++) { delete [] fBuffer[i]; @@ -120,85 +267,160 @@ class sound_player : public dsp { delete [] fBuffer; sf_close(fFile); } + + sound_memory_player* clone() { return new sound_memory_player(fFileName); } + +}; + +/** + * DirectToDisk player + */ - int getNumInputs() { return 0; } - int getNumOutputs() { return fInfo.channels; } +class sound_dtd_player : public sound_base_player { - void buildUserInterface(UI* ui_interface) + private: + + ringbuffer_t* fBuffer; // Ringbuffer written in setFrame and read in playSlice + + void playSlice(int count, int src, int dst, FAUSTFLOAT** outputs) { - ui_interface->openVerticalBox("Transport"); - ui_interface->addCheckButton("Play", &fPlayButton); - ui_interface->addCheckButton("Loop", &fLoopButton); - ui_interface->addHorizontalSlider("Speed", &fSpeedSlider, FAUSTFLOAT(1), FAUSTFLOAT(0.5), FAUSTFLOAT(2), FAUSTFLOAT(0.1)); - ui_interface->closeBox(); + size_t read_space_frames = convertToFrames(ringbuffer_read_space(fBuffer)); + + if (read_space_frames >= count) { + + // Read from ringbuffer + FAUSTFLOAT buffer[count * fInfo.channels]; + ringbuffer_read(fBuffer, (char*)buffer, convertFromFrames(count)); + + // Deinterleave and write to output + for (int chan = 0; chan < fInfo.channels; chan++) { + for (int frame = 0; frame < count; frame++) { + outputs[chan][dst + frame] = buffer[frame * fInfo.channels + chan]; + } + } + + } else { + std::cerr << "PlaySlice : missing " << (count - read_space_frames) << " frames\n"; + } } - - int getSampleRate() { return fSamplingFreq; } - - static void classInit(int samplingFreq) {} - - void init(int samplingFreq) + + size_t readAndwrite(FAUSTFLOAT* buffer, size_t size) { - classInit(samplingFreq); - instanceInit(samplingFreq); + size_t nbf = fReaderFun(fFile, buffer, size); + ringbuffer_write(fBuffer, (char*)buffer, convertFromFrames(nbf)); + return nbf; } - - void instanceInit(int samplingFreq) + + void setFrame(int frames) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); + // If position change + if (fSetFrames != fLastSetFrames + && std::abs(fSetFrames - fLastSetFrames) > BUFFER_SIZE + && std::abs(fSetFrames - fCurFrames) > BUFFER_SIZE) { + fMutex.lock(); + // Reset ringbuffer + ringbuffer_reset(fBuffer); + // Reset fCurFrames and seek in the file + fLastSetFrames = fSetFrames; + sf_seek(fFile, fSetFrames, SEEK_SET); + fCurFrames = fSetFrames; + fMutex.unlock(); + } + + size_t write_space_frames = convertToFrames(ringbuffer_write_space(fBuffer)); + + // If ringbuffer has to be filled + if (write_space_frames > HALF_RING_BUFFER_SIZE) { + FAUSTFLOAT buffer[HALF_RING_BUFFER_SIZE * fInfo.channels]; + // Tries to read and write HALF_RING_BUFFER_SIZE frames + size_t nbf = readAndwrite(buffer, HALF_RING_BUFFER_SIZE); + // End of file is reached + if (nbf < HALF_RING_BUFFER_SIZE) { + // Read RING_BUFFER_SIZE/2 - nbf frame from the beginning of file + sf_seek(fFile, 0, SEEK_SET); + readAndwrite(buffer, HALF_RING_BUFFER_SIZE - nbf); + } + } } - - void instanceConstants(int samplingFreq) + + size_t convertToFrames(size_t bytes) { return bytes / (sizeof(FAUSTFLOAT) * fInfo.channels); } + size_t convertFromFrames(size_t frames) { return frames * sizeof(FAUSTFLOAT) * fInfo.channels; } + + public: + + sound_dtd_player(const std::string& filename):sound_base_player(filename) { - fSamplingFreq = samplingFreq; + // Create ringbuffer + fBuffer = ringbuffer_create(RING_BUFFER_SIZE * fInfo.channels * sizeof(FAUSTFLOAT)); + + // Read first buffer + setFrame(0); } - - void instanceResetUserInterface() + + virtual ~sound_dtd_player() { - fPlayButton = FAUSTFLOAT(0); - fLoopButton = FAUSTFLOAT(0); - fSpeedSlider = FAUSTFLOAT(1); + ringbuffer_free(fBuffer); + sf_close(fFile); } + + sound_dtd_player* clone() { return new sound_dtd_player(fFileName); } - void instanceClear() - { - fFrames = fInfo.frames; - } +}; + +/** + PositionManager is a GUI : changing the slider position of a sound_base_player + (sound_memory_player or sound_dtd_player) will be reflected in the internal buffer + position using the GUI::updateAllGuis mecanism. + */ + +class PositionManager : public GUI { - sound_player* clone() { return new sound_player(fFileName); } - - void metadata(Meta* m) + private: + + std::map > fFileReader; + + public: + + PositionManager() + {} + + ~PositionManager() + {} + + // Add a sound_base_player (sound_memory_player or sound_dtd_player) in the PositionManager + void addDSP(sound_base_player* dsp) { - m->declare("name", fFileName.c_str()); + fFileReader[dsp] = std::make_pair(new uiCallbackItem(this, dsp->getCurFramesZone(), sound_base_player::setFrame, dsp), + new uiCallbackItem(this, dsp->getSetFramesZone(), sound_base_player::setFrame, dsp)); } - - void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) + + // Remove a sound_base_player (sound_memory_player or sound_dtd_player) from the PositionManager + void removeDSP(sound_base_player* dsp) { - if (fPlayButton == FAUSTFLOAT(1)) { - int rcount = std::min(count, fFrames); - playSlice(rcount, fInfo.frames - fFrames, 0, outputs); - if (rcount < count) { - if (fLoopButton == FAUSTFLOAT(1)) { - // Loop buffer - playSlice(count - rcount, 0, rcount, outputs); - fFrames = fInfo.frames - (count - rcount); - } else { - // Otherwise clear end of buffer and stops - clearSlice(count - rcount, rcount, outputs); - fFrames = fInfo.frames; - fPlayButton = 0; - } - } else { - fFrames -= count; - } - } else { - // Clear output - clearSlice(count, 0, outputs); - } + fFileReader.erase(dsp); } - }; +/* + + // A unique manager is usually needed + PositionManager* manager = new PositionManager(); + + // Create memory or DirectToDisk sound players + dsp* player1 = new sound_dtd_player("toto.wav"); + dsp* player2 = new sound_memory_player("titi.flac"); + + // Add sound_plays to the manager, so that position changes are reflected in the internal buffer + manager->addDSP(player1); + manager->addDSP(player2); + + // When player1 and player2 are no needed anymore, before deleting them: + manager->removeDSP(player1); + manager->removeDSP(player2); + + // When the application quits... + delete manager; + + */ + #endif diff --git a/source/DEINDUGens/include/faust/dsp/timed-dsp.h b/source/DEINDUGens/include/faust/dsp/timed-dsp.h index 8924be16f6..ab9cec758d 100644 --- a/source/DEINDUGens/include/faust/dsp/timed-dsp.h +++ b/source/DEINDUGens/include/faust/dsp/timed-dsp.h @@ -1,39 +1,38 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __timed_dsp__ #define __timed_dsp__ -#include "faust/dsp/dsp.h" -#include "faust/gui/GUI.h" -#include "faust/gui/ring-buffer.h" - #include #include #include +#include "faust/dsp/dsp.h" +#include "faust/gui/GUI.h" +#include "faust/gui/DecoratorUI.h" +#include "faust/gui/ring-buffer.h" + namespace { #if __APPLE__ @@ -75,13 +74,13 @@ inline double GetCurrentTimeInUsec(void) * ZoneUI : this class collect zones in a set. */ -struct ZoneUI : public UI +struct ZoneUI : public GenericUI { std::set fZoneSet; - ZoneUI() {}; - virtual ~ZoneUI() {}; + ZoneUI():GenericUI() {} + virtual ~ZoneUI() {} void insertZone(FAUSTFLOAT* zone) { @@ -90,16 +89,6 @@ struct ZoneUI : public UI } } - // -- widget's layouts - void openTabBox(const char* label) - {} - void openHorizontalBox(const char* label) - {} - void openVerticalBox(const char* label) - {} - void closeBox() - {} - // -- active widgets void addButton(const char* label, FAUSTFLOAT* zone) { @@ -125,17 +114,13 @@ struct ZoneUI : public UI // -- passive widgets void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT fmin, FAUSTFLOAT fmax) { - insertZone(zone); + insertZone(zone); } void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT fmin, FAUSTFLOAT fmax) { insertZone(zone); } - - // -- metadata declarations - void declare(FAUSTFLOAT* zone, const char* key, const char* val) - {} - + }; /** @@ -152,21 +137,20 @@ class timed_dsp : public decorator_dsp { double fOffsetUsec; // Compute call offset in usec bool fFirstCallback; ZoneUI fZoneUI; - + + FAUSTFLOAT** fInputsSlice; + FAUSTFLOAT** fOutputsSlice; + void computeSlice(int offset, int slice, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { if (slice > 0) { - FAUSTFLOAT** inputs_slice = (FAUSTFLOAT**)alloca(fDSP->getNumInputs() * sizeof(FAUSTFLOAT*)); for (int chan = 0; chan < fDSP->getNumInputs(); chan++) { - inputs_slice[chan] = &(inputs[chan][offset]); + fInputsSlice[chan] = &(inputs[chan][offset]); } - - FAUSTFLOAT** outputs_slice = (FAUSTFLOAT**)alloca(fDSP->getNumOutputs() * sizeof(FAUSTFLOAT*)); for (int chan = 0; chan < fDSP->getNumOutputs(); chan++) { - outputs_slice[chan] = &(outputs[chan][offset]); + fOutputsSlice[chan] = &(outputs[chan][offset]); } - - fDSP->compute(slice, inputs_slice, outputs_slice); + fDSP->compute(slice, fInputsSlice, fOutputsSlice); } } @@ -175,7 +159,7 @@ class timed_dsp : public decorator_dsp { return std::max(0., (double(getSampleRate()) * (usec - fDateUsec)) / 1000000.); } - ztimedmap::iterator getNextControl(DatedControl& res, bool convert_ts) + ztimedmap::iterator getNextControl(DatedControl& res) { DatedControl date1(DBL_MAX, 0); ztimedmap::iterator it1, it2 = GUI::gTimedZoneMap.end(); @@ -195,11 +179,6 @@ class timed_dsp : public decorator_dsp { } } - // If needed, convert date1 in samples from begining of the buffer, possible moving to 0 (if negative) - if (convert_ts) { - date1.fDate = convertUsecToSample(date1.fDate); - } - res = date1; return it2; } @@ -211,7 +190,12 @@ class timed_dsp : public decorator_dsp { DatedControl next_control; // Do audio computation "slice" by "slice" - while ((it = getNextControl(next_control, convert_ts)) != GUI::gTimedZoneMap.end()) { + while ((it = getNextControl(next_control)) != GUI::gTimedZoneMap.end()) { + + // If needed, convert next_control in samples from begining of the buffer, possible moving to 0 (if negative) + if (convert_ts) { + next_control.fDate = convertUsecToSample(next_control.fDate); + } // Compute audio slice slice = int(next_control.fDate) - offset; @@ -234,9 +218,15 @@ class timed_dsp : public decorator_dsp { public: timed_dsp(dsp* dsp):decorator_dsp(dsp), fDateUsec(0), fOffsetUsec(0), fFirstCallback(true) - {} + { + fInputsSlice = new FAUSTFLOAT*[dsp->getNumInputs()]; + fOutputsSlice = new FAUSTFLOAT*[dsp->getNumOutputs()]; + } virtual ~timed_dsp() - {} + { + delete [] fInputsSlice; + delete [] fOutputsSlice; + } virtual void init(int samplingRate) { @@ -269,12 +259,13 @@ class timed_dsp : public decorator_dsp { } else { // Save the timestamp offset in the first callback if (fFirstCallback) { - fOffsetUsec = ::GetCurrentTimeInUsec() - date_usec; - fDateUsec = date_usec + fOffsetUsec; fFirstCallback = false; + double current_date_usec = ::GetCurrentTimeInUsec(); + fDateUsec = current_date_usec; + fOffsetUsec = current_date_usec - date_usec; } - // RtMidi mode : timestamp must be converted in frames + // RtMidi mode: timestamp must be converted in frames computeAux(count, inputs, outputs, true); // Keep call date diff --git a/source/DEINDUGens/include/faust/gui/APIUI.h b/source/DEINDUGens/include/faust/gui/APIUI.h index 8670f9940a..809360c657 100644 --- a/source/DEINDUGens/include/faust/gui/APIUI.h +++ b/source/DEINDUGens/include/faust/gui/APIUI.h @@ -1,50 +1,53 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef API_UI_H #define API_UI_H -#include "faust/gui/meta.h" -#include "faust/gui/UI.h" -#include "faust/gui/PathBuilder.h" -#include "faust/gui/ValueConverter.h" #include #include #include #include #include +#include "faust/gui/meta.h" +#include "faust/gui/UI.h" +#include "faust/gui/PathBuilder.h" +#include "faust/gui/ValueConverter.h" + class APIUI : public PathBuilder, public Meta, public UI { + public: + + enum ItemType { kButton = 0, kCheckButton, kVSlider, kHSlider, kNumEntry, kHBargraph, kVBargraph }; + protected: enum { kLin = 0, kLog = 1, kExp = 2 }; int fNumParameters; - std::vector fName; + std::vector fPaths; + std::vector fLabels; std::map fPathMap; std::map fLabelMap; std::vector fConversion; @@ -53,8 +56,8 @@ class APIUI : public PathBuilder, public Meta, public UI std::vector fMin; std::vector fMax; std::vector fStep; - std::vector fUnit; - std::vector fTooltip; + std::vector fItemType; + std::vector > fMetaData; std::vector fAcc[3]; std::vector fGyr[3]; @@ -72,37 +75,38 @@ class APIUI : public PathBuilder, public Meta, public UI std::string fCurrentGyr; std::string fCurrentColor; std::string fCurrentTooltip; - + std::map fCurrentMetadata; + // Add a generic parameter virtual void addParameter(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, - FAUSTFLOAT step) + FAUSTFLOAT step, + ItemType type) { std::string path = buildPath(label); fPathMap[path] = fLabelMap[label] = fNumParameters++; - fName.push_back(path); + fPaths.push_back(path); + fLabels.push_back(label); fZone.push_back(zone); fInit.push_back(init); fMin.push_back(min); fMax.push_back(max); fStep.push_back(step); - - //handle unit metadata - fUnit.push_back(fCurrentUnit); - fCurrentUnit = ""; + fItemType.push_back(type); - //handle tooltip metadata - fTooltip.push_back(fCurrentTooltip); - fCurrentTooltip = ""; - - //handle scale metadata + // handle scale metadata switch (fCurrentScale) { - case kLin : fConversion.push_back(new LinearValueConverter(0, 1, min, max)); break; - case kLog : fConversion.push_back(new LogValueConverter(0, 1, min, max)); break; - case kExp : fConversion.push_back(new ExpValueConverter(0, 1, min, max)); break; + case kLin: + fConversion.push_back(new LinearValueConverter(0, 1, min, max)); + break; + case kLog: + fConversion.push_back(new LogValueConverter(0, 1, min, max)); + break; + case kExp: fConversion.push_back(new ExpValueConverter(0, 1, min, max)); + break; } fCurrentScale = kLin; @@ -146,7 +150,7 @@ class APIUI : public PathBuilder, public Meta, public UI fCurrentGyr = ""; } - // handle screencolor metadata "...[screencolor:red|green|blue]..." + // handle screencolor metadata "...[screencolor:red|green|blue|white]..." if (fCurrentColor.size() > 0) { if ((fCurrentColor == "red") && (fRedReader == 0)) { fRedReader = new ZoneReader(zone, min, max); @@ -167,13 +171,16 @@ class APIUI : public PathBuilder, public Meta, public UI } } fCurrentColor = ""; + + fMetaData.push_back(fCurrentMetadata); + fCurrentMetadata.clear(); } int getZoneIndex(std::vector* table, int p, int val) { FAUSTFLOAT* zone = fZone[p]; - for (int i = 0; i < table[val].size(); i++) { - if (zone == table[val][i]->getZone()) return i; + for (size_t i = 0; i < table[val].size(); i++) { + if (zone == table[val][i]->getZone()) return int(i); } return -1; } @@ -235,8 +242,8 @@ class APIUI : public PathBuilder, public Meta, public UI public: enum Type { kAcc = 0, kGyr = 1, kNoType }; - - APIUI() : fNumParameters(0), fHasScreenControl(false), fRedReader(0), fGreenReader(0), fBlueReader(0) + + APIUI() : fNumParameters(0), fHasScreenControl(false), fRedReader(0), fGreenReader(0), fBlueReader(0), fCurrentScale(kLin) {} virtual ~APIUI() @@ -272,46 +279,53 @@ class APIUI : public PathBuilder, public Meta, public UI virtual void addButton(const char* label, FAUSTFLOAT* zone) { - addParameter(label, zone, 0, 0, 1, 1); + addParameter(label, zone, 0, 0, 1, 1, kButton); } virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { - addParameter(label, zone, 0, 0, 1, 1); + addParameter(label, zone, 0, 0, 1, 1, kCheckButton); } virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { - addParameter(label, zone, init, min, max, step); + addParameter(label, zone, init, min, max, step, kVSlider); } virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { - addParameter(label, zone, init, min, max, step); + addParameter(label, zone, init, min, max, step, kHSlider); } virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { - addParameter(label, zone, init, min, max, step); + addParameter(label, zone, init, min, max, step, kNumEntry); } // -- passive widgets virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { - addParameter(label, zone, min, min, max, (max-min)/1000.0); + addParameter(label, zone, min, min, max, (max-min)/1000.0, kHBargraph); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { - addParameter(label, zone, min, min, max, (max-min)/1000.0); + addParameter(label, zone, min, min, max, (max-min)/1000.0, kVBargraph); } + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} // -- metadata declarations virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { - if (strcmp(key, "scale") == 0) { + // Keep matadata + fCurrentMetadata[key] = val; + + if (strcmp(key, "scale") == 0) { if (strcmp(val, "log") == 0) { fCurrentScale = kLog; } else if (strcmp(val, "exp") == 0) { @@ -319,14 +333,14 @@ class APIUI : public PathBuilder, public Meta, public UI } else { fCurrentScale = kLin; } - } else if (strcmp(key, "unit") == 0) { - fCurrentUnit = val; - } else if (strcmp(key, "acc") == 0) { - fCurrentAcc = val; - } else if (strcmp(key, "gyr") == 0) { - fCurrentGyr = val; - } else if (strcmp(key, "screencolor") == 0) { - fCurrentColor = val; // val = "red", "green" or "blue" + } else if (strcmp(key, "unit") == 0) { + fCurrentUnit = val; + } else if (strcmp(key, "acc") == 0) { + fCurrentAcc = val; + } else if (strcmp(key, "gyr") == 0) { + fCurrentGyr = val; + } else if (strcmp(key, "screencolor") == 0) { + fCurrentColor = val; // val = "red", "green", "blue" or "white" } else if (strcmp(key, "tooltip") == 0) { fCurrentTooltip = val; } @@ -338,7 +352,7 @@ class APIUI : public PathBuilder, public Meta, public UI //------------------------------------------------------------------------------- // Simple API part //------------------------------------------------------------------------------- - int getParamsCount() { return fNumParameters; } + int getParamsCount() { return fNumParameters; } int getParamIndex(const char* path) { if (fPathMap.find(path) != fPathMap.end()) { @@ -349,26 +363,40 @@ class APIUI : public PathBuilder, public Meta, public UI return -1; } } - const char* getParamAddress(int p) { return fName[p].c_str(); } - const char* getParamUnit(int p) { return fUnit[p].c_str(); } - const char* getParamTooltip(int p) { return fTooltip[p].c_str(); } - FAUSTFLOAT getParamMin(int p) { return fMin[p]; } - FAUSTFLOAT getParamMax(int p) { return fMax[p]; } - FAUSTFLOAT getParamStep(int p) { return fStep[p]; } - FAUSTFLOAT getParamInit(int p) { return fInit[p]; } - - FAUSTFLOAT* getParamZone(int p) { return fZone[p]; } - FAUSTFLOAT getParamValue(int p) { return *fZone[p]; } - void setParamValue(int p, FAUSTFLOAT v) { *fZone[p] = v; } - - double getParamRatio(int p) { return fConversion[p]->faust2ui(*fZone[p]); } - void setParamRatio(int p, double r) { *fZone[p] = fConversion[p]->ui2faust(r); } - - double value2ratio(int p, double r) { return fConversion[p]->faust2ui(r); } - double ratio2value(int p, double r) { return fConversion[p]->ui2faust(r); } + const char* getParamAddress(int p) { return fPaths[p].c_str(); } + const char* getParamLabel(int p) { return fLabels[p].c_str(); } + std::map getMetadata(int p) + { + std::map res; + std::map metadata = fMetaData[p]; + std::map::iterator it; + for (it = metadata.begin(); it != metadata.end(); ++it) { + res[(*it).first.c_str()] = (*it).second.c_str(); + } + return res; + } + + const char* getMetadata(int p, const char* key) + { + return (fMetaData[p].find(key) != fMetaData[p].end()) ? fMetaData[p][key].c_str() : ""; + } + FAUSTFLOAT getParamMin(int p) { return fMin[p]; } + FAUSTFLOAT getParamMax(int p) { return fMax[p]; } + FAUSTFLOAT getParamStep(int p) { return fStep[p]; } + FAUSTFLOAT getParamInit(int p) { return fInit[p]; } + + FAUSTFLOAT* getParamZone(int p) { return fZone[p]; } + FAUSTFLOAT getParamValue(int p) { return *fZone[p]; } + void setParamValue(int p, FAUSTFLOAT v) { *fZone[p] = v; } + + double getParamRatio(int p) { return fConversion[p]->faust2ui(*fZone[p]); } + void setParamRatio(int p, double r) { *fZone[p] = fConversion[p]->ui2faust(r); } + + double value2ratio(int p, double r) { return fConversion[p]->faust2ui(r); } + double ratio2value(int p, double r) { return fConversion[p]->ui2faust(r); } /** - * Return the control type (kAcc, kGyr, or -1) for a given paramater + * Return the control type (kAcc, kGyr, or -1) for a given parameter * * @param p - the UI parameter index * @@ -389,6 +417,18 @@ class APIUI : public PathBuilder, public Meta, public UI } return kNoType; } + + /** + * Return the Item type (kButton = 0, kCheckButton, kVSlider, kHSlider, kNumEntry, kHBargraph, kVBargraph) for a given parameter + * + * @param p - the UI parameter index + * + * @return the Item type + */ + ItemType getParamItemType(int p) + { + return fItemType[p]; + } /** * Set a new value coming from an accelerometer, propagate it to all relevant float* zones. @@ -399,7 +439,7 @@ class APIUI : public PathBuilder, public Meta, public UI */ void propagateAcc(int acc, double value) { - for (int i = 0; i < fAcc[acc].size(); i++) { + for (size_t i = 0; i < fAcc[acc].size(); i++) { fAcc[acc][i]->update(value); } } @@ -477,7 +517,7 @@ class APIUI : public PathBuilder, public Meta, public UI */ void propagateGyr(int gyr, double value) { - for (int i = 0; i < fGyr[gyr].size(); i++) { + for (size_t i = 0; i < fGyr[gyr].size(); i++) { fGyr[gyr][i]->update(value); } } diff --git a/source/DEINDUGens/include/faust/gui/BelaOSCUI.h b/source/DEINDUGens/include/faust/gui/BelaOSCUI.h new file mode 100644 index 0000000000..73e95808e8 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/BelaOSCUI.h @@ -0,0 +1,181 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __BelaOSCUI__ +#define __BelaOSCUI__ + +#include +#include +#include +#include +#include + +#include +#include + +#include "faust/gui/APIUI.h" + +/**************************BEGIN OSC SECTION **************************/ + +class oscItem : public uiItem { + + protected: + + OSCClient* fSender; + string fPath; + + public: + + oscItem(OSCClient* sender, GUI* ui, const string& path, FAUSTFLOAT* zone) + :uiItem(ui, zone), fSender(sender), fPath(path) {} + virtual ~oscItem() + {} + + virtual void reflectZone() + { + // To test + /* + FAUSTFLOAT v = *fZone; + fCache = v; + fSender->queueMessage(fSender->newMessage.to(fPath).add(v)); + */ + } + +}; + +class BelaOSCUI : public GUI { + + private: + + string fIP; + int fInputPort; + int fOutputPort; + APIUI fAPIUI; + + vector fOSCItems; // Pointers are kept and desallocated by the GUI class + AuxiliaryTask fOSCTask; + OSCServer fReceiver; + OSCClient fSender; + + static void OSCTask(void* arg) + { + static_cast(arg)->oscMessageReceived(); + } + + public: + + BelaOSCUI(const string& ip, int in_port, int out_port) + :fIP(ip), fInputPort(in_port), fOutputPort(out_port) + {} + + virtual ~BelaOSCUI() + {} + + // for auxiliaryTask: + void oscMessageReceived() + { + while (fReceiver.messageWaiting()) { + oscpkt::Message msg = fReceiver.popMessage(); + string msgAdress = msg.addressPattern(); + int paramIndex = fAPIUI.getParamIndex(msgAdress.c_str()); + float floatArg; + if (msg.match(msgAdress).popFloat(floatArg).isOkNoMoreArgs() && paramIndex != -1) { + fAPIUI.setParamValue(paramIndex, floatArg); + // "get" message with correct address + } else if (msg.match("/get").isOkNoMoreArgs()) { + for (int p = 0; p < fAPIUI.getParamsCount(); ++p) { + // show data to console + rt_printf("%s %f to %f\n", fAPIUI.getParamAddress(p), fAPIUI.getParamMin(p), fAPIUI.getParamMax(p)); + // set data by OSC + fSender.queueMessage(fSender.newMessage.to(std::string(fAPIUI.getParamAddress(p))).add(fAPIUI.getParamMin(p)).add(fAPIUI.getParamMax(p)).end()); + } + // "hello" message + } else if (msg.match("/hello").isOkNoMoreArgs()) { + // show datat to console. + rt_printf("adresses:%s, in:%i, out:%i\n", fIP.c_str(), fInputPort, fOutputPort); + // set data by OSC + std::string s = fAPIUI.getParamAddress(0); + s.erase(0, 1); + s = s.substr(0, s.find("/")); + s.insert(0, 1, '/'); + fSender.queueMessage(fSender.newMessage.to(s).add(std::string(fIP)).add(fInputPort).add(fOutputPort).end()); + } + } + } + + bool run() override + { + fReceiver.setup(fInputPort); + fSender.setup(fOutputPort, fIP.c_str()); + rt_printf("initconnect\n"); + if (fOSCItems.size() == 0) { + rt_printf("%i widgets, OSC Adresses:\n", fAPIUI.getParamsCount()); + for (int p = 0; p < fAPIUI.getParamsCount(); ++p) { + rt_printf("%s %f to %f\n", fAPIUI.getParamAddress(p), fAPIUI.getParamMin(p), fAPIUI.getParamMax(p)); + fOSCItems.push_back(new oscItem(&fSender, this, fAPIUI.getParamAddress(p), fAPIUI.getParamZone(p))); + } + } + rt_printf("connected\n"); + fOSCTask = Bela_createAuxiliaryTask(OSCTask, 50, "bela-osc", this); + return true; + } + + void scheduleOSC() + { + Bela_scheduleAuxiliaryTask(fOSCTask); + } + + // -- widget's layouts + void openTabBox(const char* label) override { fAPIUI.openTabBox(label); } + void openHorizontalBox(const char* label) override { fAPIUI.openHorizontalBox(label); } + void openVerticalBox(const char* label) override { fAPIUI.openVerticalBox(label); } + void closeBox() override { fAPIUI.closeBox(); } + + // -- active widgets + + void addButton(const char* label, FAUSTFLOAT* zone) override { fAPIUI.addButton(label, zone); } + void addCheckButton(const char* label, FAUSTFLOAT* zone) override { fAPIUI.addCheckButton(label, zone); } + + void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) override + { fAPIUI.addVerticalSlider(label, zone, init, min, max, step); } + + void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) override + { fAPIUI.addHorizontalSlider(label, zone, init, min, max, step); } + void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) override + { fAPIUI.addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + + void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) override + { fAPIUI.addHorizontalBargraph(label, zone, min, max); } + void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) override + { fAPIUI.addVerticalBargraph(label, zone, min, max); } + + // -- metadata declarations + + void declare(FAUSTFLOAT* zone, const char* key, const char* val) override { fAPIUI.declare(zone, key, val); } +}; + +/***************************END OSC SECTION ***************************/ + +#endif // __BelaOSCUI__ diff --git a/source/DEINDUGens/include/faust/gui/CGlue.h b/source/DEINDUGens/include/faust/gui/CGlue.h new file mode 100644 index 0000000000..3734d75cca --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/CGlue.h @@ -0,0 +1,483 @@ +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2013 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef CGLUE_H +#define CGLUE_H + +#include "faust/gui/UI.h" +#include "faust/gui/CInterface.h" +#include "faust/gui/meta.h" +#include "faust/dsp/dsp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************* + * UI glue code + ******************************************************************************/ + +class UIFloat +{ + + public: + + UIFloat() {} + + virtual ~UIFloat() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, float* zone) = 0; + virtual void addCheckButton(const char* label, float* zone) = 0; + virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float step) = 0; + virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) = 0; + virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, float* zone, float min, float max) = 0; + virtual void addVerticalBargraph(const char* label, float* zone, float min, float max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(float* zone, const char* key, const char* val) {} +}; + +static void openTabBoxGlueFloat(void* cpp_interface, const char* label) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->openTabBox(label); +} + +static void openHorizontalBoxGlueFloat(void* cpp_interface, const char* label) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->openHorizontalBox(label); +} + +static void openVerticalBoxGlueFloat(void* cpp_interface, const char* label) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->openVerticalBox(label); +} + +static void closeBoxGlueFloat(void* cpp_interface) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->closeBox(); +} + +static void addButtonGlueFloat(void* cpp_interface, const char* label, float* zone) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addButton(label, zone); +} + +static void addCheckButtonGlueFloat(void* cpp_interface, const char* label, float* zone) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addCheckButton(label, zone); +} + +static void addVerticalSliderGlueFloat(void* cpp_interface, const char* label, float* zone, float init, float min, float max, float step) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addVerticalSlider(label, zone, init, min, max, step); +} + +static void addHorizontalSliderGlueFloat(void* cpp_interface, const char* label, float* zone, float init, float min, float max, float step) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addHorizontalSlider(label, zone, init, min, max, step); +} + +static void addNumEntryGlueFloat(void* cpp_interface, const char* label, float* zone, float init, float min, float max, float step) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addNumEntry(label, zone, init, min, max, step); +} + +static void addHorizontalBargraphGlueFloat(void* cpp_interface, const char* label, float* zone, float min, float max) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addHorizontalBargraph(label, zone, min, max); +} + +static void addVerticalBargraphGlueFloat(void* cpp_interface, const char* label, float* zone, float min, float max) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addVerticalBargraph(label, zone, min, max); +} + +static void addSoundfileGlueFloat(void* cpp_interface, const char* label, const char* url, Soundfile** sf_zone) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->addSoundfile(label, url, sf_zone); +} + +static void declareGlueFloat(void* cpp_interface, float* zone, const char* key, const char* value) +{ + UIFloat* ui_interface = static_cast(cpp_interface); + ui_interface->declare(zone, key, value); +} + +class UIDouble +{ + + public: + + UIDouble() {} + + virtual ~UIDouble() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, double* zone) = 0; + virtual void addCheckButton(const char* label, double* zone) = 0; + virtual void addVerticalSlider(const char* label, double* zone, double init, double min, double max, double step) = 0; + virtual void addHorizontalSlider(const char* label, double* zone, double init, double min, double max, double step) = 0; + virtual void addNumEntry(const char* label, double* zone, double init, double min, double max, double step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, double* zone, double min, double max) = 0; + virtual void addVerticalBargraph(const char* label, double* zone, double min, double max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(double* zone, const char* key, const char* val) {} +}; + +static void openTabBoxGlueDouble(void* cpp_interface, const char* label) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->openTabBox(label); +} + +static void openHorizontalBoxGlueDouble(void* cpp_interface, const char* label) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->openHorizontalBox(label); +} + +static void openVerticalBoxGlueDouble(void* cpp_interface, const char* label) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->openVerticalBox(label); +} + +static void closeBoxGlueDouble(void* cpp_interface) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->closeBox(); +} + +static void addButtonGlueDouble(void* cpp_interface, const char* label, double* zone) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addButton(label, zone); +} + +static void addCheckButtonGlueDouble(void* cpp_interface, const char* label, double* zone) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addCheckButton(label, zone); +} + +static void addVerticalSliderGlueDouble(void* cpp_interface, const char* label, double* zone, double init, double min, double max, double step) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addVerticalSlider(label, zone, init, min, max, step); +} + +static void addHorizontalSliderGlueDouble(void* cpp_interface, const char* label, double* zone, double init, double min, double max, double step) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addHorizontalSlider(label, zone, init, min, max, step); +} + +static void addNumEntryGlueDouble(void* cpp_interface, const char* label, double* zone, double init, double min, double max, double step) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addNumEntry(label, zone, init, min, max, step); +} + +static void addHorizontalBargraphGlueDouble(void* cpp_interface, const char* label, double* zone, double min, double max) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addHorizontalBargraph(label, zone, min, max); +} + +static void addVerticalBargraphGlueDouble(void* cpp_interface, const char* label, double* zone, double min, double max) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addVerticalBargraph(label, zone, min, max); +} + +static void addSoundfileGlueDouble(void* cpp_interface, const char* label, const char* url, Soundfile** sf_zone) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->addSoundfile(label, url, sf_zone); +} + +static void declareGlueDouble(void* cpp_interface, double* zone, const char* key, const char* value) +{ + UIDouble* ui_interface = static_cast(cpp_interface); + ui_interface->declare(zone, key, value); +} + +static void buildUIGlue(UIGlue* glue, UI* ui_interface, bool is_double) +{ + glue->uiInterface = ui_interface; + + if (is_double) { + glue->openTabBox = (openTabBoxFun)openTabBoxGlueDouble; + glue->openHorizontalBox = (openHorizontalBoxFun)openHorizontalBoxGlueDouble; + glue->openVerticalBox = (openVerticalBoxFun)openVerticalBoxGlueDouble; + glue->closeBox = (closeBoxFun)closeBoxGlueDouble; + glue->addButton = (addButtonFun)addButtonGlueDouble; + glue->addCheckButton = (addCheckButtonFun)addCheckButtonGlueDouble; + glue->addVerticalSlider = (addVerticalSliderFun)addVerticalSliderGlueDouble; + glue->addHorizontalSlider = (addHorizontalSliderFun)addHorizontalSliderGlueDouble; + glue->addNumEntry = (addNumEntryFun)addNumEntryGlueDouble; + glue->addHorizontalBargraph = (addHorizontalBargraphFun)addHorizontalBargraphGlueDouble; + glue->addVerticalBargraph = (addVerticalBargraphFun)addVerticalBargraphGlueDouble; + glue->addSoundfile = (addSoundfileFun)addSoundfileGlueDouble; + glue->declare = (declareFun)declareGlueDouble; + } else { + glue->openTabBox = (openTabBoxFun)openTabBoxGlueFloat; + glue->openHorizontalBox = (openHorizontalBoxFun)openHorizontalBoxGlueFloat; + glue->openVerticalBox = (openVerticalBoxFun)openVerticalBoxGlueFloat; + glue->closeBox = (closeBoxFun)closeBoxGlueFloat; + glue->addButton = (addButtonFun)addButtonGlueFloat; + glue->addCheckButton = (addCheckButtonFun)addCheckButtonGlueFloat; + glue->addVerticalSlider = (addVerticalSliderFun)addVerticalSliderGlueFloat; + glue->addHorizontalSlider = (addHorizontalSliderFun)addHorizontalSliderGlueFloat; + glue->addNumEntry = (addNumEntryFun)addNumEntryGlueFloat; + glue->addHorizontalBargraph = (addHorizontalBargraphFun)addHorizontalBargraphGlueFloat; + glue->addVerticalBargraph = (addVerticalBargraphFun)addVerticalBargraphGlueFloat; + glue->addSoundfile = (addSoundfileFun)addSoundfileGlueFloat; + glue->declare = (declareFun)declareGlueFloat; + } +} + +class UITemplate +{ + + private: + + void* fCPPInterface; + + public: + + UITemplate(void* cpp_interface):fCPPInterface(cpp_interface) + {} + + virtual ~UITemplate() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) + { + openTabBoxGlueFloat(fCPPInterface, label); + } + virtual void openHorizontalBox(const char* label) + { + openHorizontalBoxGlueFloat(fCPPInterface, label); + } + virtual void openVerticalBox(const char* label) + { + openVerticalBoxGlueFloat(fCPPInterface, label); + } + virtual void closeBox() + { + closeBoxGlueFloat(fCPPInterface); + } + + // float version + + // -- active widgets + + virtual void addButton(const char* label, float* zone) + { + addButtonGlueFloat(fCPPInterface, label, zone); + } + virtual void addCheckButton(const char* label, float* zone) + { + addCheckButtonGlueFloat(fCPPInterface, label, zone); + } + + virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float step) + { + addVerticalSliderGlueFloat(fCPPInterface, label, zone, init, min, max, step); + } + + virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) + { + addHorizontalSliderGlueFloat(fCPPInterface, label, zone, init, min, max, step); + } + + virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) + { + addNumEntryGlueFloat(fCPPInterface, label, zone, init, min, max, step); + } + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, float* zone, float min, float max) + { + addHorizontalBargraphGlueFloat(fCPPInterface, label, zone, min, max); + } + + virtual void addVerticalBargraph(const char* label, float* zone, float min, float max) + { + addVerticalBargraphGlueFloat(fCPPInterface, label, zone, min, max); + } + + // -- metadata declarations + + virtual void declare(float* zone, const char* key, const char* val) + { + declareGlueFloat(fCPPInterface, zone, key, val); + } + + // double version + + virtual void addButton(const char* label, double* zone) + { + addButtonGlueDouble(fCPPInterface, label, zone); + } + virtual void addCheckButton(const char* label, double* zone) + { + addCheckButtonGlueDouble(fCPPInterface, label, zone); + } + + virtual void addVerticalSlider(const char* label, double* zone, double init, double min, double max, double step) + { + addVerticalSliderGlueDouble(fCPPInterface, label, zone, init, min, max, step); + } + + virtual void addHorizontalSlider(const char* label, double* zone, double init, double min, double max, double step) + { + addHorizontalSliderGlueDouble(fCPPInterface, label, zone, init, min, max, step); + } + + virtual void addNumEntry(const char* label, double* zone, double init, double min, double max, double step) + { + addNumEntryGlueDouble(fCPPInterface, label, zone, init, min, max, step); + } + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* url, Soundfile** sf_zone) + { + addSoundfileGlueFloat(fCPPInterface, label, url, sf_zone); + } + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, double* zone, double min, double max) + { + addHorizontalBargraphGlueDouble(fCPPInterface, label, zone, min, max); + } + + virtual void addVerticalBargraph(const char* label, double* zone, double min, double max) + { + addVerticalBargraphGlueDouble(fCPPInterface, label, zone, min, max); + } + + // -- metadata declarations + + virtual void declare(double* zone, const char* key, const char* val) + { + declareGlueDouble(fCPPInterface, zone, key, val); + } + + +}; + +/******************************************************************************* + * Meta glue code + ******************************************************************************/ + +static void declareMetaGlue(void* cpp_interface, const char* key, const char* value) +{ + Meta* meta_interface = static_cast(cpp_interface); + meta_interface->declare(key, value); +} + +static void buildMetaGlue(MetaGlue* glue, Meta* meta) +{ + glue->metaInterface = meta; + glue->declare = declareMetaGlue; +} + +/******************************************************************************* + * Memory manager glue code + ******************************************************************************/ + +static void* allocateManagerGlue(void* cpp_interface, size_t size) +{ + dsp_memory_manager* manager_interface = static_cast(cpp_interface); + return manager_interface->allocate(size); +} + +static void destroyManagerGlue(void* cpp_interface, void* ptr) +{ + dsp_memory_manager* manager_interface = static_cast(cpp_interface); + manager_interface->destroy(ptr); +} + +static void buildManagerGlue(ManagerGlue* glue, dsp_memory_manager* manager) +{ + glue->managerInterface = manager; + glue->allocate = allocateManagerGlue; + glue->destroy = destroyManagerGlue; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/DEINDUGens/include/faust/gui/CInterface.h b/source/DEINDUGens/include/faust/gui/CInterface.h new file mode 100644 index 0000000000..0b93dc1a0f --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/CInterface.h @@ -0,0 +1,136 @@ +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2013 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef CINTERFACE_H +#define CINTERFACE_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct Soundfile; + +/******************************************************************************* + * UI and Meta classes for C or LLVM generated code. + ******************************************************************************/ + +// -- widget's layouts + +typedef void (* openTabBoxFun) (void* ui_interface, const char* label); +typedef void (* openHorizontalBoxFun) (void* ui_interface, const char* label); +typedef void (* openVerticalBoxFun) (void* ui_interface, const char* label); +typedef void (*closeBoxFun) (void* ui_interface); + +// -- active widgets + +typedef void (* addButtonFun) (void* ui_interface, const char* label, FAUSTFLOAT* zone); +typedef void (* addCheckButtonFun) (void* ui_interface, const char* label, FAUSTFLOAT* zone); +typedef void (* addVerticalSliderFun) (void* ui_interface, const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step); +typedef void (* addHorizontalSliderFun) (void* ui_interface, const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step); +typedef void (* addNumEntryFun) (void* ui_interface, const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step); + +// -- passive widgets + +typedef void (* addHorizontalBargraphFun) (void* ui_interface, const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max); +typedef void (* addVerticalBargraphFun) (void* ui_interface, const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max); + +// -- soundfiles + +typedef void (* addSoundfileFun) (void* ui_interface, const char* label, const char* url, struct Soundfile** sf_zone); + +typedef void (* declareFun) (void* ui_interface, FAUSTFLOAT* zone, const char* key, const char* value); + +typedef struct { + + void* uiInterface; + + openTabBoxFun openTabBox; + openHorizontalBoxFun openHorizontalBox; + openVerticalBoxFun openVerticalBox; + closeBoxFun closeBox; + addButtonFun addButton; + addCheckButtonFun addCheckButton; + addVerticalSliderFun addVerticalSlider; + addHorizontalSliderFun addHorizontalSlider; + addNumEntryFun addNumEntry; + addHorizontalBargraphFun addHorizontalBargraph; + addVerticalBargraphFun addVerticalBargraph; + addSoundfileFun addSoundfile; + declareFun declare; + +} UIGlue; + +typedef void (* metaDeclareFun) (void* ui_interface, const char* key, const char* value); + +typedef struct { + + void* metaInterface; + + metaDeclareFun declare; + +} MetaGlue; + +/*************************************** + * Interface for the DSP object + ***************************************/ + +struct dsp_imp; + +typedef struct dsp_imp* (* newDspFun) (); +typedef void (* deleteDspFun) (struct dsp_imp* dsp); +typedef int (* getNumInputsFun) (struct dsp_imp* dsp); +typedef int (* getNumOutputsFun) (struct dsp_imp* dsp); +typedef void (* buildUserInterfaceFun) (struct dsp_imp* dsp, UIGlue* ui); +typedef void (* initFun) (struct dsp_imp* dsp, int freq); +typedef void (* clearFun) (struct dsp_imp* dsp); +typedef int (* getSampleRateFun) (struct dsp_imp* dsp); +typedef void (* computeFun) (struct dsp_imp* dsp, int len, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs); +typedef void (* metadataFun) (MetaGlue* meta); +typedef const char* (* getJSONFun) (); +typedef void (* setDefaultSoundFun) (struct Soundfile* sf); + +/*************************************** + * DSP memory manager functions + ***************************************/ + +typedef void* (* allocateFun) (void* manager_interface, size_t size); +typedef void (* destroyFun) (void* manager_interface, void* ptr); + +typedef struct { + + void* managerInterface; + + allocateFun allocate; + destroyFun destroy; + +} ManagerGlue; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/DEINDUGens/include/faust/gui/ControlUI.h b/source/DEINDUGens/include/faust/gui/ControlUI.h index e84f814cbf..70cc31bcdd 100644 --- a/source/DEINDUGens/include/faust/gui/ControlUI.h +++ b/source/DEINDUGens/include/faust/gui/ControlUI.h @@ -1,37 +1,35 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef CONTROL_UI_H #define CONTROL_UI_H -#include "faust/gui/UI.h" #include #include #include +#include "faust/gui/UI.h" + class ControlUI : public UI { protected: @@ -59,10 +57,17 @@ class ControlUI : public UI { void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { fControlOut.push_back(zone); }; void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { fControlOut.push_back(zone); }; - + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + public: + + ControlUI() {} + virtual ~ControlUI() {} - void encode_control(float* control_buffer, unsigned int frames) + void encodeControl(float* control_buffer, unsigned int frames) { assert(fControlOut.size() <= frames); @@ -71,7 +76,7 @@ class ControlUI : public UI { } } - void decode_control(float* control_buffer, unsigned int frames) + void decodeControl(float* control_buffer, unsigned int frames) { assert(fControlIn.size() <= frames); @@ -80,7 +85,7 @@ class ControlUI : public UI { } } - void encode_midi_control(void* midi_control_buffer, unsigned int frames) + void encodeMidiControl(void* midi_control_buffer, unsigned int frames) { assert(fControlOut.size() <= frames); jack_midi_reset_buffer(midi_control_buffer); @@ -92,7 +97,7 @@ class ControlUI : public UI { } } - static void encode_midi_control(void* midi_control_buffer, float* control_buffer, int count) + static void encodeMidiControl(void* midi_control_buffer, float* control_buffer, int count) { jack_midi_reset_buffer(midi_control_buffer); @@ -103,7 +108,7 @@ class ControlUI : public UI { } } - void decode_midi_control(void* midi_control_buffer, unsigned int frames) + void decodeMidiControl(void* midi_control_buffer, unsigned int frames) { assert(jack_midi_get_event_count(midi_control_buffer) <= frames); @@ -114,7 +119,7 @@ class ControlUI : public UI { } } - static void decode_midi_control(void* midi_control_buffer, float* control_buffer, int count) + static void decodeMidiControl(void* midi_control_buffer, float* control_buffer, int count) { assert(jack_midi_get_event_count(midi_control_buffer) <= count); diff --git a/source/DEINDUGens/include/faust/gui/DecoratorUI.h b/source/DEINDUGens/include/faust/gui/DecoratorUI.h new file mode 100644 index 0000000000..481c425a77 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/DecoratorUI.h @@ -0,0 +1,110 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef Decorator_UI_H +#define Decorator_UI_H + +#include "faust/gui/UI.h" + +//---------------------------------------------------------------- +// Generic UI empty implementation +//---------------------------------------------------------------- + +class GenericUI : public UI +{ + + public: + + GenericUI() {} + virtual ~GenericUI() {} + + // -- widget's layouts + virtual void openTabBox(const char* label) {} + virtual void openHorizontalBox(const char* label) {} + virtual void openVerticalBox(const char* label) {} + virtual void closeBox() {} + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) {} + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) {} + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) {} + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) {} + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) {} + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* soundpath, Soundfile** sf_zone) {} + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) {} + +}; + +//---------------------------------------------------------------- +// Generic UI decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) {} + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) { fUI->addSoundfile(label, filename, sf_zone); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/gui/FUI.h b/source/DEINDUGens/include/faust/gui/FUI.h index 0c3e52e7db..ee25bd2437 100644 --- a/source/DEINDUGens/include/faust/gui/FUI.h +++ b/source/DEINDUGens/include/faust/gui/FUI.h @@ -1,34 +1,29 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_FUI_H #define FAUST_FUI_H -#include "faust/gui/UI.h" - #include #include #include @@ -37,7 +32,8 @@ #include #include -#if 1 +#include "faust/gui/UI.h" +#include "faust/gui/PathBuilder.h" /******************************************************************************* * FUI : used to save and recall the state of the user interface @@ -46,128 +42,102 @@ * The file is human readable and editable ******************************************************************************/ -class FUI : public UI +class FUI : public UI, public PathBuilder { protected: - std::stack fGroupStack; - std::vector fNameList; std::map fName2Zone; - std::map fButtons; - - // labels are normalized by replacing white spaces by underscores and by removing parenthesis - std::string normalizeLabel(const char* label) - { - std::string s; - char c; - - while ((c = *label++)) { - if (isspace(c)) { s += '_'; } - //else if ((c == '(') | (c == ')') ) { } - else { s += c; } - } - return s; - } + std::vector fButtons; // add an element by relating its full name and memory zone virtual void addElement(const char* label, FAUSTFLOAT* zone, bool button = false) { - std::string fullname (fGroupStack.top() + '/' + normalizeLabel(label)); - fNameList.push_back(fullname); - fName2Zone[fullname] = zone; - fButtons[zone] = button; - } - - // keep track of full group names in a stack - virtual void pushGroupLabel(const char* label) - { - if (fGroupStack.empty()) { - fGroupStack.push(normalizeLabel(label)); - } else { - fGroupStack.push(fGroupStack.top() + '/' + normalizeLabel(label)); + std::string path = buildPath(label); + fName2Zone[path] = zone; + if (button) { + fButtons.push_back(zone); } } - virtual void popGroupLabel() - { - fGroupStack.pop(); - } - - + public: - FUI() {} - virtual ~FUI() {} + FUI() {} + virtual ~FUI() {} // -- Save and recall methods // save the zones values and full names virtual void saveState(const char* filename) { - std::ofstream f(filename); + std::ofstream file(filename); + std::map::iterator it; + + if (file.is_open()) { + for (it = fName2Zone.begin(); it != fName2Zone.end(); ++it) { + file << *(*it).second << ' ' << (*it).first << std::endl; + } - for (unsigned int i = 0; i < fNameList.size(); i++) { - std::string n = fNameList[i]; - FAUSTFLOAT* z = fName2Zone[n]; - f << *z << ' ' << n.c_str() << std::endl; + file << std::endl; + file.close(); + } else { + std::cerr << "Error opening " << filename << " file\n"; } - - f << std::endl; - f.close(); } // recall the zones values and full names virtual void recallState(const char* filename) { - std::ifstream f(filename); - FAUSTFLOAT v; - std::string n; - - while (f.good()) { - f >> v >> n; - if (fName2Zone.count(n) > 0) { - *(fName2Zone[n]) = v; - } else if (n.size() > 0) { - std::cerr << "recallState : parameter not found : " << n << " with value : " << v << std::endl; + std::ifstream file(filename); + FAUSTFLOAT value; + std::string path1, path2; + while (file.good()) { + file >> value >> path1; + path2 = "/" + path1; + if (fName2Zone.count(path1) > 0) { // Old path system + *(fName2Zone[path1]) = value; + } else if (fName2Zone.count(path2) > 0) { // New path system with the starting '/' + *(fName2Zone[path2]) = value; + } else if (path1.size() > 0) { + std::cerr << "recallState : parameter not found : " << path1 << " with value : " << value << std::endl; } } - f.close(); + file.close(); } void setButtons(bool state) { - std::map::iterator it; - for (it = fButtons.begin(); it != fButtons.end(); it++) { - FAUSTFLOAT* zone = (*it).first; - if ((*it).second) { - *zone = state; - } + for (size_t i = 0; i < fButtons.size(); i++) { + *fButtons[i] = state; } } // -- widget's layouts (just keep track of group labels) - virtual void openTabBox(const char* label) { pushGroupLabel(label); } - virtual void openHorizontalBox(const char* label) { pushGroupLabel(label); } - virtual void openVerticalBox(const char* label) { pushGroupLabel(label); } - virtual void closeBox() { popGroupLabel(); }; + virtual void openTabBox(const char* label) { fControlsLevel.push_back(label); } + virtual void openHorizontalBox(const char* label) { fControlsLevel.push_back(label); } + virtual void openVerticalBox(const char* label) { fControlsLevel.push_back(label); } + virtual void closeBox() { fControlsLevel.pop_back(); }; // -- active widgets (just add an element) virtual void addButton(const char* label, FAUSTFLOAT* zone) { addElement(label, zone, true); } virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { addElement(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT , FAUSTFLOAT , FAUSTFLOAT , FAUSTFLOAT) + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT, FAUSTFLOAT, FAUSTFLOAT, FAUSTFLOAT) { addElement(label, zone); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT , FAUSTFLOAT , FAUSTFLOAT , FAUSTFLOAT) + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT, FAUSTFLOAT, FAUSTFLOAT, FAUSTFLOAT) { addElement(label, zone); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT , FAUSTFLOAT , FAUSTFLOAT , FAUSTFLOAT) + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT, FAUSTFLOAT, FAUSTFLOAT, FAUSTFLOAT) { addElement(label, zone); } // -- passive widgets (are ignored) virtual void addHorizontalBargraph(const char*, FAUSTFLOAT*, FAUSTFLOAT, FAUSTFLOAT) {}; virtual void addVerticalBargraph(const char*, FAUSTFLOAT*, FAUSTFLOAT, FAUSTFLOAT) {}; + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} // -- metadata are not used @@ -177,5 +147,3 @@ class FUI : public UI #endif -#endif - diff --git a/source/DEINDUGens/include/faust/gui/faustgtk.h b/source/DEINDUGens/include/faust/gui/GTKUI.h similarity index 95% rename from source/DEINDUGens/include/faust/gui/faustgtk.h rename to source/DEINDUGens/include/faust/gui/GTKUI.h index e4b137eaa6..9564534a74 100644 --- a/source/DEINDUGens/include/faust/gui/faustgtk.h +++ b/source/DEINDUGens/include/faust/gui/GTKUI.h @@ -1,35 +1,29 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef FAUST_GTKUI_H #define FAUST_GTKUI_H -#include "faust/gui/GUI.h" -#include "faust/gui/MetaDataUI.h" - /****************************************************************************** ******************************************************************************* @@ -49,7 +43,10 @@ #include #include -#define stackSize 256 +#include "faust/gui/GUI.h" +#include "faust/gui/MetaDataUI.h" + +#define kStackSize 256 // Insertion modes @@ -72,7 +69,7 @@ namespace gtk_knob class GtkKnob { private: - double start_x, start_y, max_value; + public: GtkRange parent; int last_quadrant; @@ -518,8 +515,8 @@ class GTKUI : public GUI, public MetaDataUI GtkWidget* fWindow; int fTop; - GtkWidget* fBox[stackSize]; - int fMode[stackSize]; + GtkWidget* fBox[kStackSize]; + int fMode[kStackSize]; bool fStopped; GtkWidget* addWidget(const char* label, GtkWidget* w); @@ -531,7 +528,7 @@ class GTKUI : public GUI, public MetaDataUI static const gboolean fill = true; static const gboolean homogene = false; - GTKUI(char * name, int* pargc, char*** pargv); + GTKUI(char* name, int* pargc, char*** pargv); // -- Labels and metadata @@ -633,7 +630,7 @@ GTKUI::GTKUI(char * name, int* pargc, char*** pargv) void GTKUI::pushBox(int mode, GtkWidget* w) { ++fTop; - assert(fTop < stackSize); + assert(fTop < kStackSize); fMode[fTop] = mode; fBox[fTop] = w; } @@ -679,7 +676,7 @@ int GTKUI::checkLabelOptions(GtkWidget* widget, const std::string& fullLabel, st extractMetadata(fullLabel, simplifiedLabel, metadata); if (metadata.count("tooltip")) { - gtk_tooltips_set_tip (gtk_tooltips_new (), widget, metadata["tooltip"].c_str(), NULL); + gtk_tooltips_set_tip(gtk_tooltips_new(), widget, metadata["tooltip"].c_str(), NULL); } if (metadata["option"] == "detachable") { openHandleBox(simplifiedLabel.c_str()); @@ -688,7 +685,7 @@ int GTKUI::checkLabelOptions(GtkWidget* widget, const std::string& fullLabel, st //--------------------- if (fGroupTooltip != "") { - gtk_tooltips_set_tip (gtk_tooltips_new (), widget, fGroupTooltip.c_str(), NULL); + gtk_tooltips_set_tip(gtk_tooltips_new(), widget, fGroupTooltip.c_str(), NULL); fGroupTooltip = ""; } @@ -703,7 +700,7 @@ int GTKUI::checkLabelOptions(GtkWidget* widget, const std::string& fullLabel, st void GTKUI::checkForTooltip(FAUSTFLOAT* zone, GtkWidget* widget) { if (fTooltip.count(zone)) { - gtk_tooltips_set_tip(gtk_tooltips_new (), widget, fTooltip[zone].c_str(), NULL); + gtk_tooltips_set_tip(gtk_tooltips_new(), widget, fTooltip[zone].c_str(), NULL); } } @@ -740,7 +737,7 @@ void GTKUI::openHorizontalBox(const char* fullLabel) label = startWith(label, "0x") ? "" : label; if (fMode[fTop] != kTabMode && label[0] != 0) { - GtkWidget* frame = addWidget(label.c_str(), gtk_frame_new (label.c_str())); + GtkWidget* frame = addWidget(label.c_str(), gtk_frame_new(label.c_str())); gtk_container_add (GTK_CONTAINER(frame), box); gtk_widget_show(box); pushBox(kBoxMode, box); @@ -762,7 +759,7 @@ void GTKUI::openVerticalBox(const char* fullLabel) label = startWith(label, "0x") ? "" : label; if (fMode[fTop] != kTabMode && label[0] != 0) { - GtkWidget* frame = addWidget(label.c_str(), gtk_frame_new (label.c_str())); + GtkWidget* frame = addWidget(label.c_str(), gtk_frame_new(label.c_str())); gtk_container_add (GTK_CONTAINER(frame), box); gtk_widget_show(box); pushBox(kBoxMode, box); @@ -780,7 +777,7 @@ void GTKUI::openHandleBox(const char* label) gtk_container_set_border_width (GTK_CONTAINER (box), 2); label = startWith(label, "0x") ? "" : label; if (fMode[fTop] != kTabMode && label[0] != 0) { - GtkWidget* frame = addWidget(label, gtk_handle_box_new ()); + GtkWidget* frame = addWidget(label, gtk_handle_box_new()); gtk_container_add(GTK_CONTAINER(frame), box); gtk_widget_show(box); pushBox(kBoxMode, box); diff --git a/source/DEINDUGens/include/faust/gui/GUI.h b/source/DEINDUGens/include/faust/gui/GUI.h index f50a151866..a289b9d035 100644 --- a/source/DEINDUGens/include/faust/gui/GUI.h +++ b/source/DEINDUGens/include/faust/gui/GUI.h @@ -1,37 +1,42 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ -#ifndef FAUST_GUI_H -#define FAUST_GUI_H - -#include "faust/gui/UI.h" -#include "faust/gui/ring-buffer.h" +#ifndef __GUI_H__ +#define __GUI_H__ #include #include #include +#include + +#ifdef _WIN32 +# pragma warning (disable: 4100) +#else +# pragma GCC diagnostic ignored "-Wunused-parameter" +#endif + +#include "faust/gui/UI.h" +#include "faust/gui/ring-buffer.h" /******************************************************************************* * GUI : Abstract Graphic User Interface @@ -40,16 +45,40 @@ ******************************************************************************/ class uiItem; +class GUI; +struct clist; + typedef void (*uiCallback)(FAUSTFLOAT val, void* data); -class clist : public std::list +struct uiItemBase +{ + + uiItemBase(GUI* ui, FAUSTFLOAT* zone) {} + + virtual ~uiItemBase() + {} + + virtual void modifyZone(FAUSTFLOAT v) = 0; + virtual void modifyZone(double date, FAUSTFLOAT v) {} + virtual double cache() = 0; + virtual void reflectZone() = 0; +}; + + +static void deleteClist(clist* cl); + +struct clist : public std::list { - public: - virtual ~clist(); + virtual ~clist() + { + deleteClist(this); + } }; +static void createUiCallbackItem(GUI* ui, FAUSTFLOAT* zone, uiCallback foo, void* data); + typedef std::map zmap; typedef std::map ztimedmap; @@ -59,23 +88,23 @@ class GUI : public UI private: - static std::list fGuiList; - zmap fZoneMap; - bool fStopped; + static std::list fGuiList; + zmap fZoneMap; + bool fStopped; public: - GUI() : fStopped(false) + GUI():fStopped(false) { fGuiList.push_back(this); } virtual ~GUI() { - // delete all - zmap::iterator g; - for (g = fZoneMap.begin(); g != fZoneMap.end(); g++) { - delete (*g).second; + // delete all items + zmap::iterator it; + for (it = fZoneMap.begin(); it != fZoneMap.end(); it++) { + delete (*it).second; } // suppress 'this' in static fGuiList fGuiList.remove(this); @@ -83,16 +112,35 @@ class GUI : public UI // -- registerZone(z,c) : zone management - void registerZone(FAUSTFLOAT* z, uiItem* c) + void registerZone(FAUSTFLOAT* z, uiItemBase* c) { if (fZoneMap.find(z) == fZoneMap.end()) fZoneMap[z] = new clist(); fZoneMap[z]->push_back(c); } - - void updateAllZones(); - - void updateZone(FAUSTFLOAT* z); + + void updateAllZones() + { + for (zmap::iterator m = fZoneMap.begin(); m != fZoneMap.end(); m++) { + FAUSTFLOAT* z = m->first; + clist* l = m->second; + if (z) { + FAUSTFLOAT v = *z; + for (clist::iterator c = l->begin(); c != l->end(); c++) { + if ((*c)->cache() != v) (*c)->reflectZone(); + } + } + } + } + void updateZone(FAUSTFLOAT* z) + { + FAUSTFLOAT v = *z; + clist* l = fZoneMap[z]; + for (clist::iterator c = l->begin(); c != l->end(); c++) { + if ((*c)->cache() != v) (*c)->reflectZone(); + } + } + static void updateAllGuis() { std::list::iterator g; @@ -100,9 +148,21 @@ class GUI : public UI (*g)->updateAllZones(); } } - void addCallback(FAUSTFLOAT* zone, uiCallback foo, void* data); + + void addCallback(FAUSTFLOAT* zone, uiCallback foo, void* data) + { + createUiCallbackItem(this, zone, foo, data); + } + virtual void show() {}; virtual bool run() { return false; }; + + static void runAllGuis() { + std::list::iterator g; + for (g = fGuiList.begin(); g != fGuiList.end(); g++) { + (*g)->run(); + } + } virtual void stop() { fStopped = true; } bool stopped() { return fStopped; } @@ -127,9 +187,13 @@ class GUI : public UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + // -- metadata declarations - virtual void declare(FAUSTFLOAT* , const char* , const char*) {} + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} // Static global for timed zones, shared between all UI that will set timed values static ztimedmap gTimedZoneMap; @@ -140,35 +204,60 @@ class GUI : public UI * User Interface Item: abstract definition */ -class uiItem +template +class uiTypedItem : public uiItemBase { protected: - - GUI* fGUI; - FAUSTFLOAT* fZone; - FAUSTFLOAT fCache; - - uiItem(GUI* ui, FAUSTFLOAT* zone):fGUI(ui), fZone(zone), fCache(FAUSTFLOAT(-123456.654321)) - { - ui->registerZone(zone, this); + + GUI* fGUI; + REAL* fZone; + REAL fCache; + + uiTypedItem(GUI* ui, REAL* zone):uiItemBase(ui, static_cast(zone)), + fGUI(ui), fZone(zone), fCache(REAL(-123456.654321)) + { + ui->registerZone(zone, this); } - + public: - - virtual ~uiItem() + + virtual ~uiTypedItem() {} - - void modifyZone(FAUSTFLOAT v) - { + + void modifyZone(REAL v) + { fCache = v; if (*fZone != v) { *fZone = v; fGUI->updateZone(fZone); } } - - FAUSTFLOAT cache() { return fCache; } - virtual void reflectZone() = 0; + + double cache() { return fCache; } + +}; + +class uiItem : public uiTypedItem { + + protected: + + uiItem(GUI* ui, FAUSTFLOAT* zone):uiTypedItem(ui, zone) + {} + + public: + + virtual ~uiItem() + {} + + void modifyZone(FAUSTFLOAT v) + { + fCache = v; + if (*fZone != v) { + *fZone = v; + fGUI->updateZone(fZone); + } + } + }; /** @@ -194,27 +283,89 @@ class uiOwnedItem : public uiItem { * Callback Item */ -struct uiCallbackItem : public uiItem +class uiCallbackItem : public uiItem { + + protected: + + uiCallback fCallback; + void* fData; + + public: + + uiCallbackItem(GUI* ui, FAUSTFLOAT* zone, uiCallback foo, void* data) + : uiItem(ui, zone), fCallback(foo), fData(data) {} + + virtual void reflectZone() + { + FAUSTFLOAT v = *fZone; + fCache = v; + fCallback(v, fData); + } +}; + +/** + * For timestamped control + */ + +struct DatedControl { + + double fDate; + FAUSTFLOAT fValue; + + DatedControl(double d = 0., FAUSTFLOAT v = FAUSTFLOAT(0)):fDate(d), fValue(v) {} + +}; + +/** + * Base class for timed items + */ + +class uiTimedItem : public uiItem { - uiCallback fCallback; - void* fData; - - uiCallbackItem(GUI* ui, FAUSTFLOAT* zone, uiCallback foo, void* data) - : uiItem(ui, zone), fCallback(foo), fData(data) {} - - virtual void reflectZone() - { - FAUSTFLOAT v = *fZone; - fCache = v; - fCallback(v, fData); - } + + protected: + + bool fDelete; + + public: + + using uiItem::modifyZone; + + uiTimedItem(GUI* ui, FAUSTFLOAT* zone):uiItem(ui, zone) + { + if (GUI::gTimedZoneMap.find(fZone) == GUI::gTimedZoneMap.end()) { + GUI::gTimedZoneMap[fZone] = ringbuffer_create(8192); + fDelete = true; + } else { + fDelete = false; + } + } + + virtual ~uiTimedItem() + { + ztimedmap::iterator it; + if (fDelete && ((it = GUI::gTimedZoneMap.find(fZone)) != GUI::gTimedZoneMap.end())) { + ringbuffer_free((*it).second); + GUI::gTimedZoneMap.erase(it); + } + } + + virtual void modifyZone(double date, FAUSTFLOAT v) + { + size_t res; + DatedControl dated_val(date, v); + if ((res = ringbuffer_write(GUI::gTimedZoneMap[fZone], (const char*)&dated_val, sizeof(DatedControl))) != sizeof(DatedControl)) { + std::cerr << "ringbuffer_write error DatedControl" << std::endl; + } + } + }; /** - * Allows to group a set of zones. + * Allows to group a set of zones */ - -class uiGroupItem : public uiItem + +class uiGroupItem : public uiItem { protected: @@ -243,46 +394,17 @@ class uiGroupItem : public uiItem }; -/** - * Update all user items reflecting zone z - */ +// Can not be defined as method in the classes -inline void GUI::updateZone(FAUSTFLOAT* z) +static void createUiCallbackItem(GUI* ui, FAUSTFLOAT* zone, uiCallback foo, void* data) { - FAUSTFLOAT v = *z; - clist* l = fZoneMap[z]; - for (clist::iterator c = l->begin(); c != l->end(); c++) { - if ((*c)->cache() != v) (*c)->reflectZone(); - } + new uiCallbackItem(ui, zone, foo, data); } -/** - * Update all user items not up to date - */ - -inline void GUI::updateAllZones() +static void deleteClist(clist* cl) { - for (zmap::iterator m = fZoneMap.begin(); m != fZoneMap.end(); m++) { - FAUSTFLOAT* z = m->first; - clist* l = m->second; - if (z) { - FAUSTFLOAT v = *z; - for (clist::iterator c = l->begin(); c != l->end(); c++) { - if ((*c)->cache() != v) (*c)->reflectZone(); - } - } - } -} - -inline void GUI::addCallback(FAUSTFLOAT* zone, uiCallback foo, void* data) -{ - new uiCallbackItem(this, zone, foo, data); -}; - -inline clist::~clist() -{ - std::list::iterator it; - for (it = begin(); it != end(); it++) { + std::list::iterator it; + for (it = cl->begin(); it != cl->end(); it++) { uiOwnedItem* owned = dynamic_cast(*it); // owned items are deleted by external code if (!owned) { @@ -291,14 +413,4 @@ inline clist::~clist() } } -// For precise timestamped control -struct DatedControl { - - double fDate; - FAUSTFLOAT fValue; - - DatedControl(double d = 0., FAUSTFLOAT v = FAUSTFLOAT(0)):fDate(d), fValue(v) {} - -}; - #endif diff --git a/source/DEINDUGens/include/faust/gui/JSONUI.h b/source/DEINDUGens/include/faust/gui/JSONUI.h index 54f3d2f07d..5f032ba887 100644 --- a/source/DEINDUGens/include/faust/gui/JSONUI.h +++ b/source/DEINDUGens/include/faust/gui/JSONUI.h @@ -1,53 +1,46 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef FAUST_JSONUI_H #define FAUST_JSONUI_H -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -#include "faust/gui/UI.h" -#include "faust/gui/PathBuilder.h" -#include "faust/gui/meta.h" - #include #include #include #include #include -#include + +#include "faust/gui/UI.h" +#include "faust/gui/PathBuilder.h" +#include "faust/gui/meta.h" /******************************************************************************* * JSONUI : Faust User Interface * This class produce a complete JSON decription of the DSP instance. ******************************************************************************/ -class JSONUI : public PathBuilder, public Meta, public UI +template +class JSONUIAux : public PathBuilder, public Meta, public UI { protected: @@ -56,9 +49,16 @@ class JSONUI : public PathBuilder, public Meta, public UI std::stringstream fUI; std::stringstream fMeta; std::vector > fMetaAux; + std::string fVersion; // Compiler version + std::string fCompileOptions; // Compilation options + std::vector fLibraryList; + std::vector fIncludePathnames; std::string fName; + std::string fFileName; std::string fExpandedCode; std::string fSHAKey; + std::string fDSPSize; // In bytes + std::map fPathTable; char fCloseUIPar; char fCloseMetaPar; @@ -88,38 +88,18 @@ class JSONUI : public PathBuilder, public Meta, public UI fMetaAux.clear(); } } - - void init(const std::string& name, int inputs, int outputs, const std::string& sha_key, const std::string& dsp_code) - { - fTab = 1; - - // Start Meta generation - tab(fTab, fMeta); fMeta << "\"meta\": ["; - fCloseMetaPar = ' '; - - // Start UI generation - tab(fTab, fUI); fUI << "\"ui\": ["; - fCloseUIPar = ' '; - fTab += 1; - - fName = name; - fInputs = inputs; - fOutputs = outputs; - fExpandedCode = dsp_code; - fSHAKey = sha_key; - } - - inline std::string flatten(const std::string& src) + + std::string flatten(const std::string& src) { std::stringstream dst; for (size_t i = 0; i < src.size(); i++) { switch (src[i]) { case '\n': case '\t': - dst << ' '; break; - case '"': - dst << "\\" << '"'; + // add escape for single quote + case '\'': + dst << "\\'"; break; default: dst << src[i]; @@ -128,31 +108,96 @@ class JSONUI : public PathBuilder, public Meta, public UI } return dst.str(); } + + std::string getAddressIndex(const std::string& path) + { + if (fPathTable.find(path) != fPathTable.end()) { + std::stringstream num; num << fPathTable[path]; + return num.str(); + } else { + return "-1"; + } + } public: - JSONUI(const std::string& name, int inputs, int outputs, const std::string& sha_key, const std::string& dsp_code) + JSONUIAux(const std::string& name, + const std::string& filename, + int inputs, + int outputs, + const std::string& sha_key, + const std::string& dsp_code, + const std::string& version, + const std::string& compile_options, + const std::vector& library_list, + const std::vector& include_pathnames, + const std::string& size, + const std::map& path_table) { - init(name, inputs, outputs, sha_key, dsp_code); + init(name, filename, inputs, outputs, sha_key, dsp_code, version, compile_options, library_list, include_pathnames, size, path_table); } - JSONUI(const std::string& name, int inputs, int outputs) + JSONUIAux(const std::string& name, const std::string& filename, int inputs, int outputs) { - init(name, inputs, outputs, "", ""); + init(name, filename, inputs, outputs, "", "", "", "", std::vector(), std::vector(), "", std::map()); } - JSONUI(int inputs, int outputs) + JSONUIAux(int inputs, int outputs) { - init("", inputs, outputs, "", ""); + init("", "", inputs, outputs, "", "","", "", std::vector(), std::vector(), "", std::map()); } - JSONUI() + JSONUIAux() { - init("", -1, -1, "", ""); + init("", "", -1, -1, "", "", "", "", std::vector(), std::vector(), "", std::map()); } - virtual ~JSONUI() {} - + virtual ~JSONUIAux() {} + + void setInputs(int inputs) { fInputs = inputs; } + void setOutputs(int outputs) { fOutputs = outputs; } + + // Init may be called multiple times so fMeta and fUI are reinitialized + void init(const std::string& name, + const std::string& filename, + int inputs, + int outputs, + const std::string& sha_key, + const std::string& dsp_code, + const std::string& version, + const std::string& compile_options, + const std::vector& library_list, + const std::vector& include_pathnames, + const std::string& size, + const std::map& path_table) + { + fTab = 1; + + // Start Meta generation + fMeta.str(""); + tab(fTab, fMeta); fMeta << "\"meta\": ["; + fCloseMetaPar = ' '; + + // Start UI generation + fUI.str(""); + tab(fTab, fUI); fUI << "\"ui\": ["; + fCloseUIPar = ' '; + fTab += 1; + + fName = name; + fFileName = filename; + fInputs = inputs; + fOutputs = outputs; + fExpandedCode = dsp_code; + fSHAKey = sha_key; + fDSPSize = size; + fPathTable = path_table; + fVersion = version; + fCompileOptions = compile_options; + fLibraryList = library_list; + fIncludePathnames = include_pathnames; + } + // -- widget's layouts virtual void openGenericGroup(const char* label, const char* name) @@ -195,36 +240,48 @@ class JSONUI : public PathBuilder, public Meta, public UI } // -- active widgets - + virtual void addGenericButton(const char* label, const char* name) { + std::string path = buildPath(label); + fUI << fCloseUIPar; tab(fTab, fUI); fUI << "{"; tab(fTab + 1, fUI); fUI << "\"type\": \"" << name << "\","; - tab(fTab + 1, fUI); fUI << "\"label\": \"" << label << "\"" << ","; - tab(fTab + 1, fUI); fUI << "\"address\": \"" << buildPath(label) << "\"" << ((fMetaAux.size() > 0) ? "," : ""); + tab(fTab + 1, fUI); fUI << "\"label\": \"" << label << "\","; + if (fPathTable.size() > 0) { + tab(fTab + 1, fUI); fUI << "\"address\": \"" << path << "\","; + tab(fTab + 1, fUI); fUI << "\"index\": \"" << getAddressIndex(path) << "\"" << ((fMetaAux.size() > 0) ? "," : ""); + } else { + tab(fTab + 1, fUI); fUI << "\"address\": \"" << path << "\"" << ((fMetaAux.size() > 0) ? "," : ""); + } addMeta(fTab + 1, false); tab(fTab, fUI); fUI << "}"; fCloseUIPar = ','; } - virtual void addButton(const char* label, FAUSTFLOAT* zone) + virtual void addButton(const char* label, REAL* zone) { addGenericButton(label, "button"); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + virtual void addCheckButton(const char* label, REAL* zone) { addGenericButton(label, "checkbox"); } - virtual void addGenericEntry(const char* label, const char* name, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + virtual void addGenericEntry(const char* label, const char* name, REAL init, REAL min, REAL max, REAL step) { + std::string path = buildPath(label); + fUI << fCloseUIPar; tab(fTab, fUI); fUI << "{"; tab(fTab + 1, fUI); fUI << "\"type\": \"" << name << "\","; - tab(fTab + 1, fUI); fUI << "\"label\": \"" << label << "\"" << ","; - tab(fTab + 1, fUI); fUI << "\"address\": \"" << buildPath(label) << "\"" << ","; + tab(fTab + 1, fUI); fUI << "\"label\": \"" << label << "\","; + tab(fTab + 1, fUI); fUI << "\"address\": \"" << path << "\","; + if (fPathTable.size() > 0) { + tab(fTab + 1, fUI); fUI << "\"index\": \"" << getAddressIndex(path) << "\","; + } addMeta(fTab + 1); tab(fTab + 1, fUI); fUI << "\"init\": \"" << init << "\","; tab(fTab + 1, fUI); fUI << "\"min\": \"" << min << "\","; @@ -234,30 +291,35 @@ class JSONUI : public PathBuilder, public Meta, public UI fCloseUIPar = ','; } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) { addGenericEntry(label, "vslider", init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) { addGenericEntry(label, "hslider", init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) { addGenericEntry(label, "nentry", init, min, max, step); } // -- passive widgets - virtual void addGenericBargraph(const char* label, const char* name, FAUSTFLOAT min, FAUSTFLOAT max) + virtual void addGenericBargraph(const char* label, const char* name, REAL min, REAL max) { + std::string path = buildPath(label); + fUI << fCloseUIPar; tab(fTab, fUI); fUI << "{"; tab(fTab + 1, fUI); fUI << "\"type\": \"" << name << "\","; - tab(fTab + 1, fUI); fUI << "\"label\": \"" << label << "\"" << ","; - tab(fTab + 1, fUI); fUI << "\"address\": \"" << buildPath(label) << "\"" << ","; + tab(fTab + 1, fUI); fUI << "\"label\": \"" << label << "\","; + tab(fTab + 1, fUI); fUI << "\"address\": \"" << path << "\","; + if (fPathTable.size() > 0) { + tab(fTab + 1, fUI); fUI << "\"index\": \"" << getAddressIndex(path) << "\","; + } addMeta(fTab + 1); tab(fTab + 1, fUI); fUI << "\"min\": \"" << min << "\","; tab(fTab + 1, fUI); fUI << "\"max\": \"" << max << "\""; @@ -265,19 +327,36 @@ class JSONUI : public PathBuilder, public Meta, public UI fCloseUIPar = ','; } - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) { addGenericBargraph(label, "hbargraph", min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) { addGenericBargraph(label, "vbargraph", min, max); } + + virtual void addSoundfile(const char* label, const char* url, Soundfile** zone) + { + std::string path = buildPath(label); + + fUI << fCloseUIPar; + tab(fTab, fUI); fUI << "{"; + tab(fTab + 1, fUI); fUI << "\"type\": \"" << "soundfile" << "\","; + tab(fTab + 1, fUI); fUI << "\"label\": \"" << label << "\"" << ","; + tab(fTab + 1, fUI); fUI << "\"url\": \"" << url << "\"" << ","; + tab(fTab + 1, fUI); fUI << "\"address\": \"" << path << "\"" << ((fPathTable.size() > 0) ? "," : ""); + if (fPathTable.size() > 0) { + tab(fTab + 1, fUI); fUI << "\"index\": \"" << getAddressIndex(path) << "\""; + } + tab(fTab, fUI); fUI << "}"; + fCloseUIPar = ','; + } // -- metadata declarations - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) + virtual void declare(REAL* zone, const char* key, const char* val) { fMetaAux.push_back(std::make_pair(key, val)); } @@ -286,7 +365,10 @@ class JSONUI : public PathBuilder, public Meta, public UI virtual void declare(const char* key, const char* value) { fMeta << fCloseMetaPar; + // fName found in metadata if ((strcmp(key, "name") == 0) && (fName == "")) fName = value; + // fFileName found in metadata + if ((strcmp(key, "filename") == 0) && (fFileName == "")) fFileName = value; tab(fTab, fMeta); fMeta << "{ " << "\"" << key << "\"" << ": " << "\"" << value << "\" }"; fCloseMetaPar = ','; } @@ -297,6 +379,28 @@ class JSONUI : public PathBuilder, public Meta, public UI fJSON << "{"; fTab += 1; tab(fTab, fJSON); fJSON << "\"name\": \"" << fName << "\","; + tab(fTab, fJSON); fJSON << "\"filename\": \"" << fFileName << "\","; + if (fVersion != "") { tab(fTab, fJSON); fJSON << "\"version\": \"" << fVersion << "\","; } + if (fCompileOptions != "") { tab(fTab, fJSON); fJSON << "\"compile_options\": \"" << fCompileOptions << "\","; } + if (fLibraryList.size() > 0) { + tab(fTab, fJSON); + fJSON << "\"library_list\": ["; + for (size_t i = 0; i < fLibraryList.size(); i++) { + fJSON << "\"" << fLibraryList[i] << "\""; + if (i < (fLibraryList.size() - 1)) fJSON << ","; + } + fJSON << "],"; + } + if (fIncludePathnames.size() > 0) { + tab(fTab, fJSON); + fJSON << "\"include_pathnames\": ["; + for (size_t i = 0; i < fIncludePathnames.size(); i++) { + fJSON << "\"" << fIncludePathnames[i] << "\""; + if (i < (fIncludePathnames.size() - 1)) fJSON << ","; + } + fJSON << "],"; + } + if (fDSPSize != "") { tab(fTab, fJSON); fJSON << "\"size\": \"" << fDSPSize << "\","; } if (fSHAKey != "") { tab(fTab, fJSON); fJSON << "\"sha_key\": \"" << fSHAKey << "\","; } if (fExpandedCode != "") { tab(fTab, fJSON); fJSON << "\"code\": \"" << fExpandedCode << "\","; } tab(fTab, fJSON); fJSON << "\"inputs\": \"" << fInputs << "\","; @@ -309,10 +413,50 @@ class JSONUI : public PathBuilder, public Meta, public UI } else { fJSON << fUI.str(); } - tab(fTab, fJSON); fJSON << "}" << std::endl; + tab(fTab, fJSON); fJSON << "}"; return (flat) ? flatten(fJSON.str()) : fJSON.str(); } }; +// Externally available class using FAUSTFLOAT + +class JSONUI : public JSONUIAux +{ + public : + + JSONUI(const std::string& name, + const std::string& filename, + int inputs, + int outputs, + const std::string& sha_key, + const std::string& dsp_code, + const std::string& version, + const std::string& compile_options, + const std::vector& library_list, + const std::vector& include_pathnames, + const std::string& size, + const std::map& path_table): + JSONUIAux(name, filename, + inputs, outputs, + sha_key, dsp_code, + version, compile_options, + library_list, include_pathnames, + size, path_table) + {} + + JSONUI(const std::string& name, const std::string& filename, int inputs, int outputs): + JSONUIAux(name, filename, inputs, outputs) + {} + + JSONUI(int inputs, int outputs):JSONUIAux(inputs, outputs) + {} + + JSONUI():JSONUIAux() + {} + + virtual ~JSONUI() {} + +}; + #endif // FAUST_JSONUI_H diff --git a/source/DEINDUGens/include/faust/gui/JSONUIDecoder.h b/source/DEINDUGens/include/faust/gui/JSONUIDecoder.h new file mode 100644 index 0000000000..66512f49b6 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/JSONUIDecoder.h @@ -0,0 +1,317 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __JSONUIDecoder__ +#define __JSONUIDecoder__ + +#include +#include +#include +#include +#include + +#include "faust/gui/UI.h" +#include "faust/gui/meta.h" +#include "faust/gui/SimpleParser.h" + +#ifdef _WIN32 +#include +#define snprintf _snprintf +#endif + +static FAUSTFLOAT STR2REAL(const std::string& s) { return FAUSTFLOAT(std::strtod(s.c_str(), NULL)); } + +//------------------------------------------------------------------- +// Decode a dsp JSON description and implement 'buildUserInterface' +//------------------------------------------------------------------- + +struct Soundfile; + +struct JSONUIDecoder { + + typedef std::map > controlMap; + + std::string fName; + std::string fFileName; + + std::map fMetadatas; + std::vector fUiItems; + + FAUSTFLOAT* fInControl; + FAUSTFLOAT* fOutControl; + Soundfile** fSoundfiles; + + std::string fJSON; + + int fNumInputs, fNumOutputs; + int fInputItems, fOutputItems, fSoundfileItems; + + std::string fVersion; + std::string fCompileOptions; + + std::vector fLibraryList; + std::vector fIncludePathnames; + + int fDSPSize; + + controlMap fPathInputTable; // [path, ] + controlMap fPathOutputTable; // [path, ] + + bool isInput(const std::string& type) { return (type == "vslider" || type == "hslider" || type == "nentry" || type == "button" || type == "checkbox"); } + bool isOutput(const std::string& type) { return (type == "hbargraph" || type == "vbargraph"); } + bool isSoundfile(const std::string& type) { return (type == "soundfile"); } + + JSONUIDecoder(const std::string& json) + { + fJSON = json; + const char* p = fJSON.c_str(); + std::map > meta_datas; + parseJson(p, fMetadatas, meta_datas, fUiItems); + + // fMetadatas will contain the "meta" section as well as , , pairs + if (fMetadatas.find("name") != fMetadatas.end()) { + fName = fMetadatas["name"]; + fMetadatas.erase("name"); + } else { + fName = ""; + } + + if (fMetadatas.find("filename") != fMetadatas.end()) { + fFileName = fMetadatas["filename"]; + fMetadatas.erase("filename"); + } else { + fName = ""; + } + + if (fMetadatas.find("version") != fMetadatas.end()) { + fVersion = fMetadatas["version"]; + fMetadatas.erase("version"); + } else { + fVersion = ""; + } + + if (fMetadatas.find("compile_options") != fMetadatas.end()) { + fCompileOptions = fMetadatas["compile_options"]; + fMetadatas.erase("compile_options"); + } else { + fCompileOptions = ""; + } + + if (meta_datas.find("library_list") != meta_datas.end()) { + fLibraryList = meta_datas["library_list"]; + meta_datas.erase("library_list"); + } + + if (meta_datas.find("include_pathnames") != meta_datas.end()) { + fIncludePathnames = meta_datas["include_pathnames"]; + meta_datas.erase("include_pathnames"); + } + + if (fMetadatas.find("size") != fMetadatas.end()) { + fDSPSize = std::atoi(fMetadatas["size"].c_str()); + fMetadatas.erase("size"); + } else { + fDSPSize = -1; + } + + if (fMetadatas.find("inputs") != fMetadatas.end()) { + fNumInputs = std::atoi(fMetadatas["inputs"].c_str()); + fMetadatas.erase("inputs"); + } else { + fNumInputs = -1; + } + + if (fMetadatas.find("outputs") != fMetadatas.end()) { + fNumOutputs = std::atoi(fMetadatas["outputs"].c_str()); + fMetadatas.erase("outputs"); + } else { + fNumOutputs = -1; + } + + fInputItems = 0; + fOutputItems = 0; + fSoundfileItems = 0; + + std::vector::iterator it; + for (it = fUiItems.begin(); it != fUiItems.end(); it++) { + std::string type = (*it)->type; + if (isInput(type)) { + fInputItems++; + } else if (isOutput(type)) { + fOutputItems++; + } else if (isSoundfile(type)) { + fSoundfileItems++; + } + } + + fInControl = new FAUSTFLOAT[fInputItems]; + fOutControl = new FAUSTFLOAT[fOutputItems]; + fSoundfiles = new Soundfile*[fSoundfileItems]; + + int counterIn = 0; + int counterOut = 0; + + // Prepare the fPathTable and init zone + for (it = fUiItems.begin(); it != fUiItems.end(); it++) { + std::string type = (*it)->type; + // Meta data declaration for input items + if (isInput(type)) { + if ((*it)->address != "") { + fPathInputTable[(*it)->address] = std::make_pair(std::atoi((*it)->index.c_str()), &fInControl[counterIn]); + } + fInControl[counterIn] = STR2REAL((*it)->init); + counterIn++; + } + // Meta data declaration for output items + else if (isOutput(type)) { + if ((*it)->address != "") { + fPathOutputTable[(*it)->address] = std::make_pair(std::atoi((*it)->index.c_str()), &fOutControl[counterOut]); + } + fOutControl[counterOut] = FAUSTFLOAT(0); + counterOut++; + } + } + } + + virtual ~JSONUIDecoder() + { + std::vector::iterator it; + for (it = fUiItems.begin(); it != fUiItems.end(); it++) { + delete(*it); + } + delete [] fInControl; + delete [] fOutControl; + delete [] fSoundfiles; + } + + void metadata(Meta* m) + { + std::map::iterator it; + for (it = fMetadatas.begin(); it != fMetadatas.end(); it++) { + m->declare((*it).first.c_str(), (*it).second.c_str()); + } + } + + void resetUserInterface() + { + std::vector::iterator it; + int item = 0; + for (it = fUiItems.begin(); it != fUiItems.end(); it++) { + if (isInput((*it)->type)) { + fInControl[item++] = STR2REAL((*it)->init); + } + } + } + + void buildUserInterface(UI* ui) + { + // To be sure the floats are correctly encoded + char* tmp_local = setlocale(LC_ALL, NULL); + setlocale(LC_ALL, "C"); + + int counterIn = 0; + int counterOut = 0; + int counterSound = 0; + std::vector::iterator it; + + for (it = fUiItems.begin(); it != fUiItems.end(); it++) { + + std::string type = (*it)->type; + + FAUSTFLOAT init = STR2REAL((*it)->init); + FAUSTFLOAT min = STR2REAL((*it)->min); + FAUSTFLOAT max = STR2REAL((*it)->max); + FAUSTFLOAT step = STR2REAL((*it)->step); + + // Meta data declaration for input items + if (isInput(type)) { + fInControl[counterIn] = init; + for (size_t i = 0; i < (*it)->meta.size(); i++) { + ui->declare(&fInControl[counterIn], (*it)->meta[i].first.c_str(), (*it)->meta[i].second.c_str()); + } + } + // Meta data declaration for output items + else if (isOutput(type)) { + fOutControl[counterOut] = init; + for (size_t i = 0; i < (*it)->meta.size(); i++) { + ui->declare(&fOutControl[counterOut], (*it)->meta[i].first.c_str(), (*it)->meta[i].second.c_str()); + } + } + // Meta data declaration for group opening or closing + else { + for (size_t i = 0; i < (*it)->meta.size(); i++) { + ui->declare(0, (*it)->meta[i].first.c_str(), (*it)->meta[i].second.c_str()); + } + } + + if (type == "hgroup") { + ui->openHorizontalBox((*it)->label.c_str()); + } else if (type == "vgroup") { + ui->openVerticalBox((*it)->label.c_str()); + } else if (type == "tgroup") { + ui->openTabBox((*it)->label.c_str()); + } else if (type == "vslider") { + ui->addVerticalSlider((*it)->label.c_str(), &fInControl[counterIn], init, min, max, step); + } else if (type == "hslider") { + ui->addHorizontalSlider((*it)->label.c_str(), &fInControl[counterIn], init, min, max, step); + } else if (type == "checkbox") { + ui->addCheckButton((*it)->label.c_str(), &fInControl[counterIn]); + } else if (type == "soundfile") { + ui->addSoundfile((*it)->label.c_str(), (*it)->url.c_str(), &fSoundfiles[counterSound]); + } else if (type == "hbargraph") { + ui->addHorizontalBargraph((*it)->label.c_str(), &fOutControl[counterOut], min, max); + } else if (type == "vbargraph") { + ui->addVerticalBargraph((*it)->label.c_str(), &fOutControl[counterOut], min, max); + } else if (type == "nentry") { + ui->addNumEntry((*it)->label.c_str(), &fInControl[counterIn], init, min, max, step); + } else if (type == "button") { + ui->addButton((*it)->label.c_str(), &fInControl[counterIn]); + } else if (type == "close") { + ui->closeBox(); + } + + if (isInput(type)) { + counterIn++; + } else if (isOutput(type)) { + counterOut++; + } else if (isSoundfile(type)) { + counterSound++; + } + } + + setlocale(LC_ALL, tmp_local); + } + + bool hasCompileOption(const std::string& option) + { + std::istringstream iss(fCompileOptions); + std::string token; + while (std::getline(iss, token, ' ')) { + if (token == option) return true; + } + return false; + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/gui/JuceGUI.h b/source/DEINDUGens/include/faust/gui/JuceGUI.h old mode 100755 new mode 100644 index 4a7dc89a1e..b4e037efe5 --- a/source/DEINDUGens/include/faust/gui/JuceGUI.h +++ b/source/DEINDUGens/include/faust/gui/JuceGUI.h @@ -1,26 +1,24 @@ /************************************************************************ FAUST Architecture File - Copyright (C) 2016 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- This Architecture section is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. - + This program 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 General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; If not, see . - + EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - - ************************************************************************ ************************************************************************/ #ifndef FAUSTFLOAT @@ -497,7 +495,7 @@ class uiSlider : public uiComponent, private juce::Slider::Listener * \param scale Scale of the slider, exponential, logarithmic, or linear. * \param type Type of slider (see SliderType). */ - uiSlider(GUI* gui, FAUSTFLOAT* zone, FAUSTFLOAT w, FAUSTFLOAT h, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT cur, FAUSTFLOAT step, String name, String unit, String tooltip, MetaDataUI::Scale scale, SliderType type) : uiComponent(gui, zone, w, h, name), fType(type) + uiSlider(GUI* gui, FAUSTFLOAT* zone, FAUSTFLOAT w, FAUSTFLOAT h, FAUSTFLOAT cur, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step, String name, String unit, String tooltip, MetaDataUI::Scale scale, SliderType type) : uiComponent(gui, zone, w, h, name), fType(type) { if (scale == MetaDataUI::kLog) { fConverter = new LogValueConverter(min, max, min, max); @@ -751,7 +749,7 @@ class uiMenu : public uiComponent, private juce::ComboBox::Listener private: ComboBox fComboBox; - vector fValues; + std::vector fValues; public: /** @@ -775,8 +773,8 @@ class uiMenu : public uiComponent, private juce::ComboBox::Listener fComboBox.addListener(this); addAndMakeVisible(fComboBox); - vector names; - vector values; + std::vector names; + std::vector values; if (parseMenuList(mdescr, names, values)) { @@ -862,7 +860,7 @@ class uiRadioButton : public uiComponent, private juce::Button::Listener bool fIsVertical; OwnedArray fButtons; - vector fValues; + std::vector fValues; public: /** @@ -881,10 +879,10 @@ class uiRadioButton : public uiComponent, private juce::Button::Listener * \param vert True if vertical, false if horizontal. * \param names Contain the names of the different items. * \param values Contain the "values" of the different items. - * \param fRadioGroupID RadioButton being multiple CheckButton in JUCE, + * \param fRadioGroupID RadioButton being multiple CheckButton in JUCE, * we need an ID to know which are linked together. */ - uiRadioButton(GUI* gui, FAUSTFLOAT* zone, String label, FAUSTFLOAT w, FAUSTFLOAT h, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, bool vert, vector& names, vector& values, String tooltip, int radioGroupID) : uiComponent(gui, zone, w, h, label), fIsVertical(vert) + uiRadioButton(GUI* gui, FAUSTFLOAT* zone, String label, FAUSTFLOAT w, FAUSTFLOAT h, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, bool vert, std::vector& names, std::vector& values, String tooltip, int radioGroupID) : uiComponent(gui, zone, w, h, label), fIsVertical(vert) { ToggleButton* defaultbutton = 0; double mindelta = FLT_MAX; @@ -1824,14 +1822,20 @@ class JuceGUI : public GUI, public MetaDataUI, public Component { private: - + + bool fDefault = true; std::stack fBoxStack; uiBase* fCurrentBox = nullptr; // Current box used in buildUserInterface logic. int fRadioGroupID; // In case of radio buttons. //ScopedPointer fLaf = new CustomLookAndFeel(); - ScopedPointer fLaf = new LookAndFeel_V3(); - + ScopedPointer fLaf = new LookAndFeel_V4(); + + FAUSTFLOAT defaultVal(FAUSTFLOAT* zone, FAUSTFLOAT def) + { + return (fDefault) ? def : *zone; + } + /** Add generic box to the user interface. */ void openBox(uiBase* box) { @@ -1846,21 +1850,21 @@ class JuceGUI : public GUI, public MetaDataUI, public Component void addSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step, int kWidth, int kHeight, SliderType type) { if (isKnob(zone)) { - addKnob(label, zone, init, min, max, step); + addKnob(label, zone, defaultVal(zone, init), min, max, step); } else if (isRadio(zone)) { - addRadioButtons(label, zone, init, min, max, step, fRadioDescription[zone].c_str(), false); + addRadioButtons(label, zone, defaultVal(zone, init), min, max, step, fRadioDescription[zone].c_str(), false); } else if (isMenu(zone)) { - addMenu(label, zone, init, min, max, step, fMenuDescription[zone].c_str()); + addMenu(label, zone, defaultVal(zone, init), min, max, step, fMenuDescription[zone].c_str()); } else { - fCurrentBox->add(new uiSlider(this, zone, kWidth, kHeight, min, max, init, step, String(label), String(fUnit[zone]), String(fTooltip[zone]), getScale(zone), type)); + fCurrentBox->add(new uiSlider(this, zone, kWidth, kHeight, defaultVal(zone, init), min, max, step, String(label), String(fUnit[zone]), String(fTooltip[zone]), getScale(zone), type)); } } /** Add a radio buttons to the user interface. */ void addRadioButtons(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step, const char* mdescr, bool vert) { - vector names; - vector values; + std::vector names; + std::vector values; parseMenuList(mdescr, names, values); // Set names and values vectors // and not just n checkButtons : @@ -1872,21 +1876,21 @@ class JuceGUI : public GUI, public MetaDataUI, public Component } if (vert) { - fCurrentBox->add(new uiRadioButton(this, zone, String(label), kCheckButtonWidth, names.size() * (kRadioButtonHeight - 25) + 25, init, min, max, true, names, values, String(fTooltip[zone]), fRadioGroupID++)); + fCurrentBox->add(new uiRadioButton(this, zone, String(label), kCheckButtonWidth, names.size() * (kRadioButtonHeight - 25) + 25, defaultVal(zone, init), min, max, true, names, values, String(fTooltip[zone]), fRadioGroupID++)); } else { - fCurrentBox->add(new uiRadioButton(this, zone, String(label), kCheckButtonWidth, kRadioButtonHeight, init, min, max, false, names, values, String(fTooltip[zone]), fRadioGroupID++)); + fCurrentBox->add(new uiRadioButton(this, zone, String(label), kCheckButtonWidth, kRadioButtonHeight, defaultVal(zone, init), min, max, false, names, values, String(fTooltip[zone]), fRadioGroupID++)); } } /** Add a menu to the user interface. */ void addMenu(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step, const char* mdescr) { - fCurrentBox->add(new uiMenu(this, zone, String(label), kMenuWidth, kMenuHeight, init, min, max, String(fTooltip[zone]), mdescr)); + fCurrentBox->add(new uiMenu(this, zone, String(label), kMenuWidth, kMenuHeight, defaultVal(zone, init), min, max, String(fTooltip[zone]), mdescr)); } /** Add a ciruclar slider to the user interface. */ void addKnob(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { - fCurrentBox->add(new uiSlider(this, zone, kKnobWidth, kKnobHeight, min, max, init, step, String(label), String(fUnit[zone]), String(fTooltip[zone]), getScale(zone), Knob)); + fCurrentBox->add(new uiSlider(this, zone, kKnobWidth, kKnobHeight, defaultVal(zone, init), min, max, step, String(label), String(fUnit[zone]), String(fTooltip[zone]), getScale(zone), Knob)); } /** Add a bargraph to the user interface. */ @@ -1906,15 +1910,18 @@ class JuceGUI : public GUI, public MetaDataUI, public Component * \brief Constructor. * \details Initialize the JuceGUI specific variables. */ - JuceGUI():fRadioGroupID(0) - {} + JuceGUI(bool def = true):fDefault(def), fRadioGroupID(1) // fRadioGroupID must start at 1 + { + setLookAndFeel(fLaf); + } /** * \brief Destructor. * \details Delete root box used in buildUserInterface logic. */ - ~JuceGUI() + virtual ~JuceGUI() { + setLookAndFeel(nullptr); delete fCurrentBox; } @@ -1998,7 +2005,7 @@ class JuceGUI : public GUI, public MetaDataUI, public Component { // kMargin pixels between the slider and his name int newWidth = Font().getStringWidth(String(label)) + kNumEntryWidth + kMargin; - fCurrentBox->add(new uiSlider(this, zone, newWidth, kNumEntryHeight, min, max, init, step, String(label), String(fUnit[zone]), String(fTooltip[zone]), getScale(zone), NumEntry)); + fCurrentBox->add(new uiSlider(this, zone, newWidth, kNumEntryHeight, defaultVal(zone, init), min, max, step, String(label), String(fUnit[zone]), String(fTooltip[zone]), getScale(zone), NumEntry)); } /** Add a vertical bargraph to the user interface. */ diff --git a/source/DEINDUGens/include/faust/gui/JuceOSCUI.h b/source/DEINDUGens/include/faust/gui/JuceOSCUI.h old mode 100755 new mode 100644 index 3cebdd6529..85b7e311f6 --- a/source/DEINDUGens/include/faust/gui/JuceOSCUI.h +++ b/source/DEINDUGens/include/faust/gui/JuceOSCUI.h @@ -1,26 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __juce_osc__ @@ -134,7 +132,7 @@ class JuceOSCUI : private OSCReceiver, private OSCReceiver::Listener. - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef JuceParameterUI_H #define JuceParameterUI_H #include "../JuceLibraryCode/JuceHeader.h" #include "faust/gui/GUI.h" +#include "faust/gui/PathBuilder.h" // Link AudioParameterBool with on/off parameter struct FaustPlugInAudioParameterBool : public AudioParameterBool, public uiOwnedItem { - FaustPlugInAudioParameterBool(GUI* gui, FAUSTFLOAT* zone, const char* label) - :AudioParameterBool(label, label, false), uiOwnedItem(gui, zone) + FaustPlugInAudioParameterBool(GUI* gui, FAUSTFLOAT* zone, const std::string& path, const std::string& label) + :AudioParameterBool(path, label, false), uiOwnedItem(gui, zone) {} + virtual ~FaustPlugInAudioParameterBool() {} + void reflectZone() override { FAUSTFLOAT v = *fZone; @@ -56,15 +57,19 @@ struct FaustPlugInAudioParameterBool : public AudioParameterBool, public uiOwned struct FaustPlugInAudioParameterFloat : public AudioParameterFloat, public uiOwnedItem { - FaustPlugInAudioParameterFloat(GUI* gui, FAUSTFLOAT* zone, const char* label, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - :AudioParameterFloat(label, label, float(min), float(max), float(init)), uiOwnedItem(gui, zone) + FaustPlugInAudioParameterFloat(GUI* gui, FAUSTFLOAT* zone, const std::string& path, const std::string& label, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + :AudioParameterFloat(path, label, float(min), float(max), float(init)), uiOwnedItem(gui, zone) {} + virtual ~FaustPlugInAudioParameterFloat() {} + void reflectZone() override { FAUSTFLOAT v = *fZone; fCache = v; - setValueNotifyingHost(range.convertTo0to1(float(v))); + if (v >= range.start && v <= range.end) { + setValueNotifyingHost(range.convertTo0to1(float(v))); + } } virtual void setValue (float newValue) override @@ -76,7 +81,7 @@ struct FaustPlugInAudioParameterFloat : public AudioParameterFloat, public uiOwn // A class to create AudioProcessorParameter objects for each zone -class JuceParameterUI : public GUI { +class JuceParameterUI : public GUI, public PathBuilder { private: @@ -86,43 +91,64 @@ class JuceParameterUI : public GUI { JuceParameterUI(AudioProcessor* processor):fProcessor(processor) {} + + virtual ~JuceParameterUI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) + { + fControlsLevel.push_back(label); + } + virtual void openHorizontalBox(const char* label) + { + fControlsLevel.push_back(label); + } + virtual void openVerticalBox(const char* label) + { + fControlsLevel.push_back(label); + } + virtual void closeBox() + { + fControlsLevel.pop_back(); + } // -- active widgets virtual void addButton(const char* label, FAUSTFLOAT* zone) { - fProcessor->addParameter(new FaustPlugInAudioParameterBool(this, zone, label)); + fProcessor->addParameter(new FaustPlugInAudioParameterBool(this, zone, buildPath(label), label)); } virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { - fProcessor->addParameter(new FaustPlugInAudioParameterBool(this, zone, label)); + fProcessor->addParameter(new FaustPlugInAudioParameterBool(this, zone, buildPath(label), label)); } virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { - fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, label, init, min, max, step)); + fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, buildPath(label), label, init, min, max, step)); } virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { - fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, label, init, min, max, step)); + fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, buildPath(label), label, init, min, max, step)); } virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { - fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, label, init, min, max, step)); + fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, buildPath(label), label, init, min, max, step)); } // -- passive widgets virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { - fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, label, 0, min, max, 0)); + fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, buildPath(label), label, 0, min, max, 0)); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { - fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, label, 0, min, max, 0)); + fProcessor->addParameter(new FaustPlugInAudioParameterFloat(this, zone, buildPath(label), label, 0, min, max, 0)); } }; diff --git a/source/DEINDUGens/include/faust/gui/JuceReader.h b/source/DEINDUGens/include/faust/gui/JuceReader.h new file mode 100644 index 0000000000..35411f4c31 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/JuceReader.h @@ -0,0 +1,89 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __JuceReader__ +#define __JuceReader__ + +#include + +#include "faust/gui/Soundfile.h" + +struct JuceReader : public SoundfileReader { + + AudioFormatManager fFormatManager; + + JuceReader() { fFormatManager.registerBasicFormats(); } + + bool checkFile(const std::string& path_name) + { + File file(path_name); + if (file.existsAsFile()) { + return true; + } else { + std::cerr << "ERROR : cannot open '" << path_name << std::endl; + return false; + } + } + + void getParamsFile(const std::string& path_name, int& channels, int& length) + { + ScopedPointer formatReader = fFormatManager.createReaderFor(File(path_name)); + assert(formatReader); + channels = int(formatReader->numChannels); + length = int(formatReader->lengthInSamples); + } + + void readFile(Soundfile* soundfile, const std::string& path_name, int part, int& offset, int max_chan) + { + ScopedPointer formatReader = fFormatManager.createReaderFor(File(path_name)); + + int channels = std::min(max_chan, int(formatReader->numChannels)); + + soundfile->fLength[part] = int(formatReader->lengthInSamples); + soundfile->fSampleRate[part] = int(formatReader->sampleRate); + soundfile->fOffset[part] = offset; + + FAUSTFLOAT* buffers[soundfile->fChannels]; + getBuffersOffset(soundfile, buffers, offset); + + if (formatReader->read(reinterpret_cast(buffers), int(formatReader->numChannels), 0, int(formatReader->lengthInSamples), false)) { + + // Possibly concert samples + if (!formatReader->usesFloatingPointData) { + for (int chan = 0; chan < int(formatReader->numChannels); ++chan) { + FAUSTFLOAT* buffer = &soundfile->fBuffers[chan][soundfile->fOffset[part]]; + FloatVectorOperations::convertFixedToFloat(buffer, reinterpret_cast(buffer), 1.0f/0x7fffffff, int(formatReader->lengthInSamples)); + } + } + + } else { + std::cerr << "Error reading the file : " << path_name << std::endl; + } + + // Update offset + offset += soundfile->fLength[part]; + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/gui/JuceStateUI.h b/source/DEINDUGens/include/faust/gui/JuceStateUI.h index 0e81d84c0b..a09aff9747 100644 --- a/source/DEINDUGens/include/faust/gui/JuceStateUI.h +++ b/source/DEINDUGens/include/faust/gui/JuceStateUI.h @@ -1,102 +1,86 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef JuceStateUI_H #define JuceStateUI_H -#include - #include "../JuceLibraryCode/JuceHeader.h" -#include "faust/gui/UI.h" - -// A class to save/restore DSP state using JUCE - -class JuceStateUI : public UI { +#include "faust/gui/MapUI.h" - private: - - std::vector fZones; +// A class to save/restore DSP state using JUCE, which also set default values at construction time. +class JuceStateUI : public MapUI { + public: - + + JuceStateUI() {} + virtual ~JuceStateUI() {} + void getStateInformation (MemoryBlock& destData) { MemoryOutputStream stream (destData, true); - + + // Write path and values + std::map::iterator it; if (sizeof(FAUSTFLOAT) == sizeof(float)) { - for (int i = 0; i < fZones.size(); i++) { - stream.writeFloat(*fZones[i]); + for (it = fPathZoneMap.begin(); it != fPathZoneMap.end(); ++it) { + stream.writeString((*it).first); + stream.writeFloat(*(*it).second); } } else { - for (int i = 0; i < fZones.size(); i++) { - stream.writeDouble(*fZones[i]); + for (it = fPathZoneMap.begin(); it != fPathZoneMap.end(); ++it) { + stream.writeString((*it).first); + stream.writeDouble(*(*it).second); } } } - + void setStateInformation (const void* data, int sizeInBytes) { MemoryInputStream stream (data, static_cast (sizeInBytes), false); - + std::string path; + + // Read path then value and try to restore them if (sizeof(FAUSTFLOAT) == sizeof(float)) { - for (int i = 0; i < sizeInBytes / sizeof(float); i++) { - *fZones[i] = stream.readFloat(); + while ((path = stream.readString().toStdString()) != "") { + setParamValue(path, stream.readFloat()); } } else { - for (int i = 0; i < sizeInBytes / sizeof(double); i++) { - *fZones[i] = stream.readDouble(); + while ((path = stream.readString().toStdString()) != "") { + setParamValue(path, stream.readDouble()); } } } - - // -- widget's layouts - - virtual void openTabBox(const char* label) {}; - virtual void openHorizontalBox(const char* label) {} - virtual void openVerticalBox(const char* label) {} - virtual void closeBox() {} - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fZones.push_back(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fZones.push_back(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { fZones.push_back(zone); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { fZones.push_back(zone); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) { fZones.push_back(zone); }; + // use MapUI derived methods // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} - - + // empty si we don't want to save/restore them + void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT fmin, FAUSTFLOAT fmax) {} + void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT fmin, FAUSTFLOAT fmax) {} + }; #endif diff --git a/source/DEINDUGens/include/faust/gui/LibsndfileReader.h b/source/DEINDUGens/include/faust/gui/LibsndfileReader.h new file mode 100644 index 0000000000..0ffd9a3e47 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/LibsndfileReader.h @@ -0,0 +1,109 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __LibsndfileReader__ +#define __LibsndfileReader__ + +#include +#include +#include +#include +#include +#include + +#include "faust/gui/Soundfile.h" + +struct LibsndfileReader : public SoundfileReader { + + LibsndfileReader() {} + + typedef sf_count_t (* sample_read)(SNDFILE* sndfile, FAUSTFLOAT* ptr, sf_count_t frames); + + bool checkFile(const std::string& path_name) + { + SF_INFO snd_info; + snd_info.format = 0; + SNDFILE* snd_file = sf_open(path_name.c_str(), SFM_READ, &snd_info); + if (snd_file) { + sf_close(snd_file); + return true; + } else { + std::cerr << "ERROR : cannot open '" << path_name << "' (" << sf_strerror(NULL) << ")" << std::endl; + return false; + } + } + + // Open the file and returns its length and channels + void getParamsFile(const std::string& path_name, int& channels, int& length) + { + SF_INFO snd_info; + snd_info.format = 0; + SNDFILE* snd_file = sf_open(path_name.c_str(), SFM_READ, &snd_info); + assert(snd_file); + channels = int(snd_info.channels); + length = int(snd_info.frames); + sf_close(snd_file); + } + + // Will be called to fill all parts from 0 to MAX_SOUNDFILE_PARTS-1 + void readFile(Soundfile* soundfile, const std::string& path_name, int part, int& offset, int max_chan) + { + // Open sndfile + SF_INFO snd_info; + snd_info.format = 0; + SNDFILE* snd_file = sf_open(path_name.c_str(), SFM_READ, &snd_info); + assert(snd_file); + + int channels = std::min(max_chan, snd_info.channels); + + soundfile->fLength[part] = int(snd_info.frames); + soundfile->fSampleRate[part] = snd_info.samplerate; + soundfile->fOffset[part] = offset; + + // Read and fill snd_info.channels number of channels + sf_count_t nbf; + FAUSTFLOAT* buffer = (FAUSTFLOAT*)alloca(BUFFER_SIZE * sizeof(FAUSTFLOAT) * snd_info.channels); + sample_read reader; + + if (sizeof(FAUSTFLOAT) == 4) { + reader = reinterpret_cast(sf_readf_float); + } else { + reader = reinterpret_cast(sf_readf_double); + } + do { + nbf = reader(snd_file, buffer, BUFFER_SIZE); + for (int sample = 0; sample < nbf; sample++) { + for (int chan = 0; chan < channels; chan++) { + soundfile->fBuffers[chan][offset + sample] = buffer[sample * snd_info.channels + chan]; + } + } + // Update offset + offset += nbf; + } while (nbf == BUFFER_SIZE); + + sf_close(snd_file); + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/gui/MapUI.h b/source/DEINDUGens/include/faust/gui/MapUI.h index a9cd2fa3d1..c23fb926a5 100644 --- a/source/DEINDUGens/include/faust/gui/MapUI.h +++ b/source/DEINDUGens/include/faust/gui/MapUI.h @@ -1,36 +1,29 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef FAUST_MAPUI_H #define FAUST_MAPUI_H -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - #include #include #include @@ -115,6 +108,9 @@ class MapUI : public UI, public PathBuilder fPathZoneMap[buildPath(label)] = zone; fLabelZoneMap[label] = zone; } + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} // -- metadata declarations void declare(FAUSTFLOAT* zone, const char* key, const char* val) @@ -144,7 +140,7 @@ class MapUI : public UI, public PathBuilder // map access std::map& getMap() { return fPathZoneMap; } - int getParamsCount() { return fPathZoneMap.size(); } + int getParamsCount() { return int(fPathZoneMap.size()); } std::string getParamAddress(int index) { @@ -152,6 +148,24 @@ class MapUI : public UI, public PathBuilder while (index-- > 0 && it++ != fPathZoneMap.end()) {} return (*it).first; } + + std::string getParamAddress(FAUSTFLOAT* zone) + { + std::map::iterator it = fPathZoneMap.begin(); + do { + if ((*it).second == zone) return (*it).first; + } + while (it++ != fPathZoneMap.end()); + return ""; + } + + static bool endsWith(std::string const& str, std::string const& end) + { + size_t l1 = str.length(); + size_t l2 = end.length(); + return (l1 >= l2) && (0 == str.compare(l1 - l2, l2, end)); + } }; + #endif // FAUST_MAPUI_H diff --git a/source/DEINDUGens/include/faust/gui/MemoryReader.h b/source/DEINDUGens/include/faust/gui/MemoryReader.h new file mode 100644 index 0000000000..3efa6bfcf2 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/MemoryReader.h @@ -0,0 +1,96 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __MemoryReader__ +#define __MemoryReader__ + +#include "faust/gui/Soundfile.h" + +/* + A 'MemoryReader' object can be used to prepare a set of sound resources in memory, to be used by SoundUI::addSoundfile. + + A Soundfile* object will have to be filled with a list of sound resources: the fLength, fOffset, fSampleRate and fBuffers fields + have to be completed with the appropriate values, and will be accessed in the DSP object while running. + * + */ + +// To adapt + +#define SOUND_CHAN 2 +#define SOUND_LENGTH 4096 +#define SOUND_SR 40100 + +struct MemoryReader : public SoundfileReader { + + /** + * Check the availability of a sound resource. + * + * @param path_name - the name of the file, or sound resource identified this way + * + * @return true if the sound resource is available, false otherwise. + */ + virtual bool checkFile(const std::string& path_name) { return true; } + + /** + * Get the channels and length values of the given sound resource. + * + * @param path_name - the name of the file, or sound resource identified this way + * @param channels - the channels value to be filled with the sound resource number of channels + * @param length - the length value to be filled with the sound resource length in frames + * + */ + virtual void getParamsFile(const std::string& path_name, int& channels, int& length) + { + channels = SOUND_CHAN; + length = SOUND_LENGTH; + } + + /** + * Read one sound resource and fill the 'soundfile' structure accordingly + * + * @param path_name - the name of the file, or sound resource identified this way + * @param part - the part number to be filled in the soundfile + * @param offset - the offset value to be incremented with the actual sound resource length in frames + * @param max_chan - the maximum number of mono channels to fill + * + */ + virtual void readFile(Soundfile* soundfile, const std::string& path_name, int part, int& offset, int max_chan) + { + soundfile->fLength[part] = SOUND_LENGTH; + soundfile->fSampleRate[part] = SOUND_SR; + soundfile->fOffset[part] = offset; + + // Audio frames have to be written for each chan + for (int sample = 0; sample < SOUND_LENGTH; sample++) { + for (int chan = 0; chan < SOUND_CHAN; chan++) { + soundfile->fBuffers[chan][offset + sample] = 0.f; + } + } + + // Update offset + offset += SOUND_LENGTH; + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/gui/MetaDataUI.h b/source/DEINDUGens/include/faust/gui/MetaDataUI.h index bce9beff5b..1910a5d647 100644 --- a/source/DEINDUGens/include/faust/gui/MetaDataUI.h +++ b/source/DEINDUGens/include/faust/gui/MetaDataUI.h @@ -1,32 +1,33 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef MetaData_UI_H #define MetaData_UI_H +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + #include #include #include @@ -34,11 +35,7 @@ #include "faust/gui/SimpleParser.h" -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -static inline bool startWith(const std::string& str, const std::string& prefix) +static bool startWith(const std::string& str, const std::string& prefix) { return (str.substr(0, prefix.size()) == prefix); } @@ -46,7 +43,7 @@ static inline bool startWith(const std::string& str, const std::string& prefix) /** * Convert a dB value into a scale between 0 and 1 (following IEC standard ?) */ -static inline FAUSTFLOAT dB2Scale(FAUSTFLOAT dB) +static FAUSTFLOAT dB2Scale(FAUSTFLOAT dB) { FAUSTFLOAT scale = FAUSTFLOAT(1.0); @@ -80,263 +77,275 @@ static inline FAUSTFLOAT dB2Scale(FAUSTFLOAT dB) class MetaDataUI { -protected: - - std::string fGroupTooltip; - std::map fGuiSize; // map widget zone with widget size coef - std::map fTooltip; // map widget zone with tooltip strings - std::map fUnit; // map widget zone to unit string (i.e. "dB") - std::map fRadioDescription; // map zone to {'low':440; ...; 'hi':1000.0} - std::map fMenuDescription; // map zone to {'low':440; ...; 'hi':1000.0} - std::set fKnobSet; // set of widget zone to be knobs - std::set fLedSet; // set of widget zone to be LEDs - std::set fNumSet; // set of widget zone to be numerical bargraphs - std::set fLogSet; // set of widget zone having a log UI scale - std::set fExpSet; // set of widget zone having an exp UI scale - - void clearMetadata() - { - fGuiSize.clear(); - fTooltip.clear(); - fUnit.clear(); - fRadioDescription.clear(); - fMenuDescription.clear(); - fKnobSet.clear(); - fLedSet.clear(); - fNumSet.clear(); - fLogSet.clear(); - fExpSet.clear(); - } - - bool isKnob(FAUSTFLOAT* zone) - { - return fKnobSet.count(zone) > 0; - } - - bool isRadio(FAUSTFLOAT* zone) - { - return fRadioDescription.count(zone) > 0; - } - - bool isMenu(FAUSTFLOAT* zone) - { - return fMenuDescription.count(zone) > 0; - } - - bool isLed(FAUSTFLOAT* zone) - { - return fLedSet.count(zone) > 0; - } - - bool isNumerical(FAUSTFLOAT* zone) - { - return fNumSet.count(zone) > 0; - } - - /** - * rmWhiteSpaces(): Remove the leading and trailing white spaces of a string - * (but not those in the middle of the string) - */ - std::string rmWhiteSpaces(const std::string& s) - { - size_t i = s.find_first_not_of(" \t"); - size_t j = s.find_last_not_of(" \t"); - if ((i != std::string::npos) && (j != std::string::npos)) { - return s.substr(i, 1+j-i); - } else { - return ""; + protected: + + std::string fGroupTooltip; + std::map fGuiSize; // map widget zone with widget size coef + std::map fTooltip; // map widget zone with tooltip strings + std::map fUnit; // map widget zone to unit string (i.e. "dB") + std::map fRadioDescription; // map zone to {'low':440; ...; 'hi':1000.0} + std::map fMenuDescription; // map zone to {'low':440; ...; 'hi':1000.0} + std::set fKnobSet; // set of widget zone to be knobs + std::set fLedSet; // set of widget zone to be LEDs + std::set fNumSet; // set of widget zone to be numerical bargraphs + std::set fLogSet; // set of widget zone having a log UI scale + std::set fExpSet; // set of widget zone having an exp UI scale + std::set fHiddenSet; // set of hidden widget zone + + void clearMetadata() + { + fGuiSize.clear(); + fTooltip.clear(); + fUnit.clear(); + fRadioDescription.clear(); + fMenuDescription.clear(); + fKnobSet.clear(); + fLedSet.clear(); + fNumSet.clear(); + fLogSet.clear(); + fExpSet.clear(); + fHiddenSet.clear(); } - } - - /** - * Extracts metdata from a label : 'vol [unit: dB]' -> 'vol' + metadata(unit=dB) - */ - void extractMetadata(const std::string& fulllabel, std::string& label, std::map& metadata) - { - enum {kLabel, kEscape1, kEscape2, kEscape3, kKey, kValue}; - int state = kLabel; int deep = 0; - std::string key, value; - for (unsigned int i = 0; i < fulllabel.size(); i++) { - char c = fulllabel[i]; - switch (state) { - case kLabel : - assert(deep == 0); - switch (c) { - case '\\' : state = kEscape1; break; - case '[' : state = kKey; deep++; break; - default : label += c; - } - break; - - case kEscape1: - label += c; - state = kLabel; - break; - - case kEscape2: - key += c; - state = kKey; - break; - - case kEscape3: - value += c; - state = kValue; - break; - - case kKey: - assert(deep > 0); - switch (c) { - case '\\': - state = kEscape2; - break; - - case '[': - deep++; - key += c; - break; - - case ':': - if (deep == 1) { - state = kValue; - } else { - key += c; + /** + * rmWhiteSpaces(): Remove the leading and trailing white spaces of a string + * (but not those in the middle of the string) + */ + std::string rmWhiteSpaces(const std::string& s) + { + size_t i = s.find_first_not_of(" \t"); + size_t j = s.find_last_not_of(" \t"); + if ((i != std::string::npos) && (j != std::string::npos)) { + return s.substr(i, 1+j-i); + } else { + return ""; + } + } + + /** + * Extracts metdata from a label : 'vol [unit: dB]' -> 'vol' + metadata(unit=dB) + */ + void extractMetadata(const std::string& fulllabel, std::string& label, std::map& metadata) + { + enum {kLabel, kEscape1, kEscape2, kEscape3, kKey, kValue}; + int state = kLabel; int deep = 0; + std::string key, value; + + for (unsigned int i = 0; i < fulllabel.size(); i++) { + char c = fulllabel[i]; + switch (state) { + case kLabel : + assert(deep == 0); + switch (c) { + case '\\' : state = kEscape1; break; + case '[' : state = kKey; deep++; break; + default : label += c; } - break; - case ']': - deep--; - if (deep < 1) { - metadata[rmWhiteSpaces(key)] = ""; - state = kLabel; - key=""; - value=""; + break; + + case kEscape1: + label += c; + state = kLabel; + break; + + case kEscape2: + key += c; + state = kKey; + break; + + case kEscape3: + value += c; + state = kValue; + break; + + case kKey: + assert(deep > 0); + switch (c) { + case '\\': + state = kEscape2; + break; + + case '[': + deep++; + key += c; + break; + + case ':': + if (deep == 1) { + state = kValue; } else { key += c; } - break; - default : key += c; - } - break; - - case kValue: - assert(deep > 0); - switch (c) { - case '\\': - state = kEscape3; - break; - - case '[': - deep++; - value += c; - break; - - case ']': - deep--; - if (deep < 1) { - metadata[rmWhiteSpaces(key)] = rmWhiteSpaces(value); - state = kLabel; - key = ""; - value = ""; - } else { + break; + case ']': + deep--; + if (deep < 1) { + metadata[rmWhiteSpaces(key)] = ""; + state = kLabel; + key=""; + value=""; + } else { + key += c; + } + break; + default : key += c; + } + break; + + case kValue: + assert(deep > 0); + switch (c) { + case '\\': + state = kEscape3; + break; + + case '[': + deep++; value += c; - } - break; - default : value += c; - } - break; - - default: - std::cerr << "ERROR unrecognized state " << state << std::endl; + break; + + case ']': + deep--; + if (deep < 1) { + metadata[rmWhiteSpaces(key)] = rmWhiteSpaces(value); + state = kLabel; + key = ""; + value = ""; + } else { + value += c; + } + break; + default : value += c; + } + break; + + default: + std::cerr << "ERROR unrecognized state " << state << std::endl; + } } + label = rmWhiteSpaces(label); } - label = rmWhiteSpaces(label); - } - - /** - * Format tooltip string by replacing some white spaces by - * return characters so that line width doesn't exceed n. - * Limitation : long words exceeding n are not cut - */ - std::string formatTooltip(int n, const std::string& tt) - { - std::string ss = tt; // ss string we are going to format - int lws = 0; // last white space encountered - int lri = 0; // last return inserted - for (int i = 0; i < (int)tt.size(); i++) { - if (tt[i] == ' ') lws = i; - if (((i-lri) >= n) && (lws > lri)) { - // insert return here - ss[lws] = '\n'; - lri = lws; + + /** + * Format tooltip string by replacing some white spaces by + * return characters so that line width doesn't exceed n. + * Limitation : long words exceeding n are not cut + */ + std::string formatTooltip(int n, const std::string& tt) + { + std::string ss = tt; // ss string we are going to format + int lws = 0; // last white space encountered + int lri = 0; // last return inserted + for (int i = 0; i < (int)tt.size(); i++) { + if (tt[i] == ' ') lws = i; + if (((i-lri) >= n) && (lws > lri)) { + // insert return here + ss[lws] = '\n'; + lri = lws; + } } + return ss; + } + + public: + + virtual ~MetaDataUI() + {} + + enum Scale { + kLin, + kLog, + kExp + }; + + Scale getScale(FAUSTFLOAT* zone) + { + if (fLogSet.count(zone) > 0) return kLog; + if (fExpSet.count(zone) > 0) return kExp; + return kLin; } - return ss; - } - -public: - - virtual ~MetaDataUI() - {} - enum Scale { - kLin, - kLog, - kExp - }; + bool isKnob(FAUSTFLOAT* zone) + { + return fKnobSet.count(zone) > 0; + } + + bool isRadio(FAUSTFLOAT* zone) + { + return fRadioDescription.count(zone) > 0; + } + + bool isMenu(FAUSTFLOAT* zone) + { + return fMenuDescription.count(zone) > 0; + } + + bool isLed(FAUSTFLOAT* zone) + { + return fLedSet.count(zone) > 0; + } + + bool isNumerical(FAUSTFLOAT* zone) + { + return fNumSet.count(zone) > 0; + } - Scale getScale(FAUSTFLOAT* zone) - { - if (fLogSet.count(zone) > 0) return kLog; - if (fExpSet.count(zone) > 0) return kExp; - return kLin; - } + bool isHidden(FAUSTFLOAT* zone) + { + return fHiddenSet.count(zone) > 0; + } - /** - * Analyses the widget zone metadata declarations and takes appropriate actions - */ - void declare(FAUSTFLOAT* zone, const char* key, const char* value) - { - if (zone == 0) { - // special zone 0 means group metadata - if (strcmp(key,"tooltip") == 0) { - // only group tooltip are currently implemented - fGroupTooltip = formatTooltip(30, value); - } - } else { - if (strcmp(key,"size") == 0) { - fGuiSize[zone] = atof(value); - } - else if (strcmp(key,"tooltip") == 0) { - fTooltip[zone] = formatTooltip(30, value); - } - else if (strcmp(key,"unit") == 0) { - fUnit[zone] = value ; - } - else if (strcmp(key,"scale") == 0) { - if (strcmp(value,"log") == 0) { - fLogSet.insert(zone); - } else if (strcmp(value,"exp") == 0) { - fExpSet.insert(zone); + /** + * Analyses the widget zone metadata declarations and takes appropriate actions + */ + void declare(FAUSTFLOAT* zone, const char* key, const char* value) + { + if (zone == 0) { + // special zone 0 means group metadata + if (strcmp(key, "tooltip") == 0) { + // only group tooltip are currently implemented + fGroupTooltip = formatTooltip(30, value); + } else if (strcmp(key, "hidden") == 0) { + fHiddenSet.insert(zone); } - } - else if (strcmp(key,"style") == 0) { - if (strcmp(value,"knob") == 0) { - fKnobSet.insert(zone); - } else if (strcmp(value,"led") == 0) { - fLedSet.insert(zone); - } else if (strcmp(value,"numerical") == 0) { - fNumSet.insert(zone); - } else { - const char* p = value; - if (parseWord(p, "radio")) { - fRadioDescription[zone] = std::string(p); - } else if (parseWord(p, "menu")) { - fMenuDescription[zone] = std::string(p); + } else { + if (strcmp(key, "size") == 0) { + fGuiSize[zone] = atof(value); + } + else if (strcmp(key, "tooltip") == 0) { + fTooltip[zone] = formatTooltip(30, value); + } + else if (strcmp(key, "unit") == 0) { + fUnit[zone] = value; + } + else if (strcmp(key, "hidden") == 0) { + fHiddenSet.insert(zone); + } + else if (strcmp(key, "scale") == 0) { + if (strcmp(value, "log") == 0) { + fLogSet.insert(zone); + } else if (strcmp(value, "exp") == 0) { + fExpSet.insert(zone); + } + } + else if (strcmp(key, "style") == 0) { + if (strcmp(value, "knob") == 0) { + fKnobSet.insert(zone); + } else if (strcmp(value, "led") == 0) { + fLedSet.insert(zone); + } else if (strcmp(value, "numerical") == 0) { + fNumSet.insert(zone); + } else { + const char* p = value; + if (parseWord(p, "radio")) { + fRadioDescription[zone] = std::string(p); + } else if (parseWord(p, "menu")) { + fMenuDescription[zone] = std::string(p); + } } } } } - } }; diff --git a/source/DEINDUGens/include/faust/gui/MidiUI.h b/source/DEINDUGens/include/faust/gui/MidiUI.h index c3baba0044..5e49bcdd66 100644 --- a/source/DEINDUGens/include/faust/gui/MidiUI.h +++ b/source/DEINDUGens/include/faust/gui/MidiUI.h @@ -1,44 +1,41 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef FAUST_MIDIUI_H #define FAUST_MIDIUI_H -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - #include #include #include #include +#include +#include #include "faust/dsp/dsp.h" #include "faust/gui/meta.h" #include "faust/gui/GUI.h" #include "faust/gui/JSONUI.h" +#include "faust/gui/MapUI.h" #include "faust/midi/midi.h" #include "faust/gui/ValueConverter.h" @@ -68,93 +65,108 @@ struct MidiMeta : public Meta, public std::map } } - static void analyse(dsp* tmp_dsp, bool& midi_sync, int& nvoices) + static void analyse(dsp* mono_dsp, bool& midi_sync, int& nvoices) { JSONUI jsonui; - tmp_dsp->buildUserInterface(&jsonui); + mono_dsp->buildUserInterface(&jsonui); std::string json = jsonui.JSON(); midi_sync = ((json.find("midi") != std::string::npos) && ((json.find("start") != std::string::npos) || (json.find("stop") != std::string::npos) || - (json.find("clock") != std::string::npos))); + (json.find("clock") != std::string::npos) || + (json.find("timestamp") != std::string::npos))); #if defined(NVOICES) && NVOICES!=NUM_VOICES nvoices = NVOICES; #else MidiMeta meta; - tmp_dsp->metadata(&meta); + mono_dsp->metadata(&meta); std::string numVoices = meta.get("nvoices", "0"); - nvoices = atoi(numVoices.c_str()); + nvoices = std::atoi(numVoices.c_str()); if (nvoices < 0) nvoices = 0; #endif } + + static bool checkPolyphony(dsp* mono_dsp) + { + MapUI map_ui; + mono_dsp->buildUserInterface(&map_ui); + bool has_freq = false; + bool has_gate = false; + bool has_gain = false; + for (int i = 0; i < map_ui.getParamsCount(); i++) { + std::string path = map_ui.getParamAddress(i); + has_freq |= MapUI::endsWith(path, "/freq"); + has_gate |= MapUI::endsWith(path, "/gate"); + has_gain |= MapUI::endsWith(path, "/gain"); + } + return (has_freq && has_gate && has_gain); + } + }; /******************************************************************************* * MidiUI : Faust User Interface * This class decodes MIDI meta data and maps incoming MIDI messages to them. - * Currently ctrl, keyon/keyoff, keypress, pgm, chanpress, pitchwheel/pitchbend + * Currently ctrl, keyon/keyoff, keypress, pgm, chanpress, pitchwheel/pitchbend * start/stop/clock meta data is handled. ******************************************************************************/ - -class uiMidiItem : public uiItem { - - protected: - - midi* fMidiOut; - bool fInputCtrl; +class uiMidi { + + protected: + + midi* fMidiOut; + bool fInputCtrl; + public: + + uiMidi(midi* midi_out, bool input):fMidiOut(midi_out), fInputCtrl(input) + {} + virtual ~uiMidi() + {} - uiMidiItem(midi* midi_out, GUI* ui, FAUSTFLOAT* zone, bool input) - :uiItem(ui, zone), fMidiOut(midi_out), fInputCtrl(input) {} - virtual ~uiMidiItem() {} - }; - -class uiMidiTimedItem : public uiMidiItem -{ - protected: + +/***************************************************************************** + * Base class for MIDI aware UI items + ******************************************************************************/ + +class uiMidiItem : public uiMidi, public uiItem { - bool fDelete; - public: - - uiMidiTimedItem(midi* midi_out, GUI* ui, FAUSTFLOAT* zone, bool input = true) - :uiMidiItem(midi_out, ui, zone, input) - { - if (GUI::gTimedZoneMap.find(fZone) == GUI::gTimedZoneMap.end()) { - GUI::gTimedZoneMap[fZone] = ringbuffer_create(8192); - fDelete = true; - } else { - fDelete = false; - } - } - virtual ~uiMidiTimedItem() - { - ztimedmap::iterator it; - if (fDelete && ((it = GUI::gTimedZoneMap.find(fZone)) != GUI::gTimedZoneMap.end())) { - ringbuffer_free((*it).second); - GUI::gTimedZoneMap.erase(it); - } - } + uiMidiItem(midi* midi_out, GUI* ui, FAUSTFLOAT* zone, bool input = true) + :uiMidi(midi_out, input), uiItem(ui, zone) + {} + virtual ~uiMidiItem() + {} + + virtual void reflectZone() {} + +}; - void modifyZone(double date, FAUSTFLOAT v) - { - size_t res; - DatedControl dated_val(date, v); - if ((res = ringbuffer_write(GUI::gTimedZoneMap[fZone], (const char*)&dated_val, sizeof(DatedControl))) != sizeof(DatedControl)) { - std::cerr << "ringbuffer_write error DatedControl" << std::endl; - } - } +/***************************************************************************** + * Base class for MIDI aware UI items with timestamp support + ******************************************************************************/ + +class uiMidiTimedItem : public uiMidi, public uiTimedItem { + + public: - // TODO + uiMidiTimedItem(midi* midi_out, GUI* ui, FAUSTFLOAT* zone, bool input = true) + :uiMidi(midi_out, input), uiTimedItem(ui, zone) + {} + virtual ~uiMidiTimedItem() + {} + virtual void reflectZone() {} - + }; +//------------- // MIDI sync +//------------- class uiMidiStart : public uiMidiTimedItem { @@ -172,7 +184,13 @@ class uiMidiStart : public uiMidiTimedItem FAUSTFLOAT v = *fZone; fCache = v; if (v != FAUSTFLOAT(0)) { - fMidiOut->start_sync(0); + fMidiOut->startSync(0); + } + } + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + uiItem::modifyZone(FAUSTFLOAT(v)); } } @@ -194,7 +212,14 @@ class uiMidiStop : public uiMidiTimedItem FAUSTFLOAT v = *fZone; fCache = v; if (v != FAUSTFLOAT(1)) { - fMidiOut->stop_sync(0); + fMidiOut->stopSync(0); + } + } + + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + uiItem::modifyZone(FAUSTFLOAT(v)); } } }; @@ -213,25 +238,31 @@ class uiMidiClock : public uiMidiTimedItem {} virtual ~uiMidiClock() {} - - void modifyZone(double date, FAUSTFLOAT v) - { - if (fInputCtrl) { - fState = !fState; - uiMidiTimedItem::modifyZone(date, FAUSTFLOAT(fState)); - } - } - + virtual void reflectZone() { FAUSTFLOAT v = *fZone; fCache = v; fMidiOut->clock(0); } + + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + fState = !fState; + uiMidiTimedItem::modifyZone(date, FAUSTFLOAT(fState)); + } + } + }; -class uiMidiProgChange : public uiMidiItem +//---------------------- +// Standard MIDI events +//---------------------- + +class uiMidiProgChange : public uiMidiTimedItem { + private: int fPgm; @@ -239,7 +270,7 @@ class uiMidiProgChange : public uiMidiItem public: uiMidiProgChange(midi* midi_out, int pgm, GUI* ui, FAUSTFLOAT* zone, bool input = true) - :uiMidiItem(midi_out, ui, zone, input), fPgm(pgm) + :uiMidiTimedItem(midi_out, ui, zone, input), fPgm(pgm) {} virtual ~uiMidiProgChange() {} @@ -255,7 +286,7 @@ class uiMidiProgChange : public uiMidiItem }; -class uiMidiChanPress : public uiMidiItem +class uiMidiChanPress : public uiMidiTimedItem { private: @@ -264,7 +295,7 @@ class uiMidiChanPress : public uiMidiItem public: uiMidiChanPress(midi* midi_out, int press, GUI* ui, FAUSTFLOAT* zone, bool input = true) - :uiMidiItem(midi_out, ui, zone, input), fPress(press) + :uiMidiTimedItem(midi_out, ui, zone, input), fPress(press) {} virtual ~uiMidiChanPress() {} @@ -280,7 +311,7 @@ class uiMidiChanPress : public uiMidiItem }; -class uiMidiCtrlChange : public uiMidiItem +class uiMidiCtrlChange : public uiMidiTimedItem { private: @@ -290,7 +321,7 @@ class uiMidiCtrlChange : public uiMidiItem public: uiMidiCtrlChange(midi* midi_out, int ctrl, GUI* ui, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, bool input = true) - :uiMidiItem(midi_out, ui, zone, input), fCtrl(ctrl), fConverter(0., 127., double(min), double(max)) + :uiMidiTimedItem(midi_out, ui, zone, input), fCtrl(ctrl), fConverter(0., 127., double(min), double(max)) {} virtual ~uiMidiCtrlChange() {} @@ -302,16 +333,23 @@ class uiMidiCtrlChange : public uiMidiItem fMidiOut->ctrlChange(0, fCtrl, fConverter.faust2ui(v)); } - void modifyZone(int v) + void modifyZone(FAUSTFLOAT v) { if (fInputCtrl) { uiItem::modifyZone(FAUSTFLOAT(fConverter.ui2faust(v))); } } + + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + uiMidiTimedItem::modifyZone(date, FAUSTFLOAT(fConverter.ui2faust(v))); + } + } }; -class uiMidiPitchWheel : public uiMidiItem +class uiMidiPitchWheel : public uiMidiTimedItem { private: @@ -319,18 +357,18 @@ class uiMidiPitchWheel : public uiMidiItem // currently, the range is of pitchwheel if fixed (-2/2 semitones) FAUSTFLOAT wheel2bend(float v) { - return pow(2.0,(v/16383.0*4-2)/12); + return std::pow(2.0,(v/16383.0*4-2)/12); } int bend2wheel(float v) { - return (int)((12*log(v)/log(2)+2)/4*16383); + return (int)((12*std::log(v)/std::log(2.0)+2)/4*16383); } public: uiMidiPitchWheel(midi* midi_out, GUI* ui, FAUSTFLOAT* zone, bool input = true) - :uiMidiItem(midi_out, ui, zone, input) + :uiMidiTimedItem(midi_out, ui, zone, input) {} virtual ~uiMidiPitchWheel() {} @@ -342,16 +380,23 @@ class uiMidiPitchWheel : public uiMidiItem fMidiOut->pitchWheel(0, bend2wheel(v)); } - void modifyZone(int v) + void modifyZone(FAUSTFLOAT v) { if (fInputCtrl) { uiItem::modifyZone(wheel2bend(v)); } } + + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + uiMidiTimedItem::modifyZone(date, wheel2bend(v)); + } + } }; -class uiMidiKeyOn : public uiMidiItem +class uiMidiKeyOn : public uiMidiTimedItem { private: @@ -362,7 +407,7 @@ class uiMidiKeyOn : public uiMidiItem public: uiMidiKeyOn(midi* midi_out, int key, GUI* ui, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, bool input = true) - :uiMidiItem(midi_out, ui, zone, input), fKeyOn(key), fConverter(0., 127., double(min), double(max)) + :uiMidiTimedItem(midi_out, ui, zone, input), fKeyOn(key), fConverter(0., 127., double(min), double(max)) {} virtual ~uiMidiKeyOn() {} @@ -374,16 +419,23 @@ class uiMidiKeyOn : public uiMidiItem fMidiOut->keyOn(0, fKeyOn, fConverter.faust2ui(v)); } - void modifyZone(int v) + void modifyZone(FAUSTFLOAT v) { if (fInputCtrl) { uiItem::modifyZone(FAUSTFLOAT(fConverter.ui2faust(v))); } } - + + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + uiMidiTimedItem::modifyZone(date, FAUSTFLOAT(fConverter.ui2faust(v))); + } + } + }; -class uiMidiKeyOff : public uiMidiItem +class uiMidiKeyOff : public uiMidiTimedItem { private: @@ -394,7 +446,7 @@ class uiMidiKeyOff : public uiMidiItem public: uiMidiKeyOff(midi* midi_out, int key, GUI* ui, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, bool input = true) - :uiMidiItem(midi_out, ui, zone, input), fKeyOff(key), fConverter(0., 127., double(min), double(max)) + :uiMidiTimedItem(midi_out, ui, zone, input), fKeyOff(key), fConverter(0., 127., double(min), double(max)) {} virtual ~uiMidiKeyOff() {} @@ -406,27 +458,34 @@ class uiMidiKeyOff : public uiMidiItem fMidiOut->keyOff(0, fKeyOff, fConverter.faust2ui(v)); } - void modifyZone(int v) + void modifyZone(FAUSTFLOAT v) { if (fInputCtrl) { uiItem::modifyZone(FAUSTFLOAT(fConverter.ui2faust(v))); } } - + + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + uiMidiTimedItem::modifyZone(date, FAUSTFLOAT(fConverter.ui2faust(v))); + } + } + }; -class uiMidiKeyPress : public uiMidiItem +class uiMidiKeyPress : public uiMidiTimedItem { private: - + int fKey; LinearValueConverter fConverter; public: uiMidiKeyPress(midi* midi_out, int key, GUI* ui, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, bool input = true) - :uiMidiItem(midi_out, ui, zone, input), fKey(key), fConverter(0., 127., double(min), double(max)) + :uiMidiTimedItem(midi_out, ui, zone, input), fKey(key), fConverter(0., 127., double(min), double(max)) {} virtual ~uiMidiKeyPress() {} @@ -438,17 +497,37 @@ class uiMidiKeyPress : public uiMidiItem fMidiOut->keyPress(0, fKey, fConverter.faust2ui(v)); } - void modifyZone(int v) + void modifyZone(FAUSTFLOAT v) { if (fInputCtrl) { uiItem::modifyZone(FAUSTFLOAT(fConverter.ui2faust(v))); } } - + + void modifyZone(double date, FAUSTFLOAT v) + { + if (fInputCtrl) { + uiMidiTimedItem::modifyZone(date, FAUSTFLOAT(fConverter.ui2faust(v))); + } + } + }; class MapUI; +/****************************************************************************************** + * MidiUI : Faust User Interface + * This class decodes MIDI metadata and maps incoming MIDI messages to them. + * Currently ctrl, keyon/keyoff, keypress, pgm, chanpress, pitchwheel/pitchbend + * start/stop/clock meta data are handled. + * + * Maps associating MIDI event ID (like each ctrl number) with all MIDI aware UI items + * are defined and progressively filled when decoding MIDI related metadata. + * MIDI aware UI items are used in both directions: + * - modifying their internal state when receving MIDI input events + * - sending their internal state as MIDI output events + *******************************************************************************************/ + class MidiUI : public GUI, public midi { @@ -459,6 +538,7 @@ class MidiUI : public GUI, public midi std::map > fChanPressTable; std::map > fKeyOnTable; std::map > fKeyOffTable; + std::map > fKeyTable; std::map > fKeyPressTable; std::vector fPitchWheelTable; @@ -469,7 +549,9 @@ class MidiUI : public GUI, public midi std::vector > fMetaAux; midi_handler* fMidiHandler; - + bool fDelete; + bool fTimeStamp; + void addGenericZone(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, bool input = true) { if (fMetaAux.size() > 0) { @@ -482,22 +564,26 @@ class MidiUI : public GUI, public midi fKeyOnTable[num].push_back(new uiMidiKeyOn(fMidiHandler, num, this, zone, min, max, input)); } else if (gsscanf(fMetaAux[i].second.c_str(), "keyoff %u", &num) == 1) { fKeyOffTable[num].push_back(new uiMidiKeyOff(fMidiHandler, num, this, zone, min, max, input)); + } else if (gsscanf(fMetaAux[i].second.c_str(), "key %u", &num) == 1) { + fKeyTable[num].push_back(new uiMidiKeyOn(fMidiHandler, num, this, zone, min, max, input)); } else if (gsscanf(fMetaAux[i].second.c_str(), "keypress %u", &num) == 1) { fKeyPressTable[num].push_back(new uiMidiKeyPress(fMidiHandler, num, this, zone, min, max, input)); } else if (gsscanf(fMetaAux[i].second.c_str(), "pgm %u", &num) == 1) { fProgChangeTable[num].push_back(new uiMidiProgChange(fMidiHandler, num, this, zone, input)); } else if (gsscanf(fMetaAux[i].second.c_str(), "chanpress %u", &num) == 1) { fChanPressTable[num].push_back(new uiMidiChanPress(fMidiHandler, num, this, zone, input)); - } else if (strcmp(fMetaAux[i].second.c_str(), "pitchwheel") == 0 - || strcmp(fMetaAux[i].second.c_str(), "pitchbend") == 0) { + } else if (fMetaAux[i].second == "pitchwheel" || fMetaAux[i].second == "pitchbend") { fPitchWheelTable.push_back(new uiMidiPitchWheel(fMidiHandler, this, zone, input)); // MIDI sync - } else if (strcmp(fMetaAux[i].second.c_str(), "start") == 0) { + } else if (fMetaAux[i].second == "start") { fStartTable.push_back(new uiMidiStart(fMidiHandler, this, zone, input)); - } else if (strcmp(fMetaAux[i].second.c_str(), "stop") == 0) { + } else if (fMetaAux[i].second == "stop") { fStopTable.push_back(new uiMidiStop(fMidiHandler, this, zone, input)); - } else if (strcmp(fMetaAux[i].second.c_str(), "clock") == 0) { + } else if (fMetaAux[i].second == "clock") { fClockTable.push_back(new uiMidiClock(fMidiHandler, this, zone, input)); + // Explicit metadata to activate 'timestamp' mode + } else if (fMetaAux[i].second == "timestamp") { + fTimeStamp = true; } } } @@ -506,20 +592,25 @@ class MidiUI : public GUI, public midi } public: + + MidiUI():fMidiHandler(NULL), fDelete(false), fTimeStamp(false) + {} - MidiUI(midi_handler* midi_handler) + MidiUI(midi_handler* midi_handler, bool delete_handler = false) { fMidiHandler = midi_handler; fMidiHandler->addMidiIn(this); + fDelete = delete_handler; } virtual ~MidiUI() { fMidiHandler->removeMidiIn(this); + if (fDelete) delete fMidiHandler; } - bool run() { return fMidiHandler->start_midi(); } - void stop() { fMidiHandler->stop_midi(); } + bool run() { return fMidiHandler->startMidi(); } + void stop() { fMidiHandler->stopMidi(); } void addMidiIn(midi* midi_dsp) { fMidiHandler->addMidiIn(midi_dsp); } void removeMidiIn(midi* midi_dsp) { fMidiHandler->removeMidiIn(midi_dsp); } @@ -571,18 +662,54 @@ class MidiUI : public GUI, public midi MapUI* keyOn(double date, int channel, int note, int velocity) { if (fKeyOnTable.find(note) != fKeyOnTable.end()) { - for (unsigned int i = 0; i < fKeyOnTable[note].size(); i++) { - fKeyOnTable[note][i]->modifyZone(FAUSTFLOAT(velocity)); + if (fTimeStamp) { + for (unsigned int i = 0; i < fKeyOnTable[note].size(); i++) { + fKeyOnTable[note][i]->modifyZone(date, FAUSTFLOAT(velocity)); + } + } else { + for (unsigned int i = 0; i < fKeyOnTable[note].size(); i++) { + fKeyOnTable[note][i]->modifyZone(FAUSTFLOAT(velocity)); + } + } + } + // If note is in fKeyTable, handle it as a keyOn + if (fKeyTable.find(note) != fKeyTable.end()) { + if (fTimeStamp) { + for (unsigned int i = 0; i < fKeyTable[note].size(); i++) { + fKeyTable[note][i]->modifyZone(date, FAUSTFLOAT(velocity)); + } + } else { + for (unsigned int i = 0; i < fKeyTable[note].size(); i++) { + fKeyTable[note][i]->modifyZone(FAUSTFLOAT(velocity)); + } } } return 0; } - void keyOff(double date, int channel, int note, int velocity) + void keyOff(double date, int channel, int note, int velocity) { if (fKeyOffTable.find(note) != fKeyOffTable.end()) { - for (unsigned int i = 0; i < fKeyOffTable[note].size(); i++) { - fKeyOffTable[note][i]->modifyZone(FAUSTFLOAT(velocity)); + if (fTimeStamp) { + for (unsigned int i = 0; i < fKeyOffTable[note].size(); i++) { + fKeyOffTable[note][i]->modifyZone(date, FAUSTFLOAT(velocity)); + } + } else { + for (unsigned int i = 0; i < fKeyOffTable[note].size(); i++) { + fKeyOffTable[note][i]->modifyZone(FAUSTFLOAT(velocity)); + } + } + } + // If note is in fKeyTable, handle it as a keyOff with a 0 velocity + if (fKeyTable.find(note) != fKeyTable.end()) { + if (fTimeStamp) { + for (unsigned int i = 0; i < fKeyTable[note].size(); i++) { + fKeyTable[note][i]->modifyZone(date, 0); + } + } else { + for (unsigned int i = 0; i < fKeyTable[note].size(); i++) { + fKeyTable[note][i]->modifyZone(0); + } } } } @@ -590,42 +717,72 @@ class MidiUI : public GUI, public midi void ctrlChange(double date, int channel, int ctrl, int value) { if (fCtrlChangeTable.find(ctrl) != fCtrlChangeTable.end()) { - for (unsigned int i = 0; i < fCtrlChangeTable[ctrl].size(); i++) { - fCtrlChangeTable[ctrl][i]->modifyZone(FAUSTFLOAT(value)); + if (fTimeStamp) { + for (unsigned int i = 0; i < fCtrlChangeTable[ctrl].size(); i++) { + fCtrlChangeTable[ctrl][i]->modifyZone(date, FAUSTFLOAT(value)); + } + } else { + for (unsigned int i = 0; i < fCtrlChangeTable[ctrl].size(); i++) { + fCtrlChangeTable[ctrl][i]->modifyZone(FAUSTFLOAT(value)); + } } - } + } } void progChange(double date, int channel, int pgm) { if (fProgChangeTable.find(pgm) != fProgChangeTable.end()) { - for (unsigned int i = 0; i < fProgChangeTable[pgm].size(); i++) { - fProgChangeTable[pgm][i]->modifyZone(FAUSTFLOAT(1)); + if (fTimeStamp) { + for (unsigned int i = 0; i < fProgChangeTable[pgm].size(); i++) { + fProgChangeTable[pgm][i]->modifyZone(date, FAUSTFLOAT(1)); + } + } else { + for (unsigned int i = 0; i < fProgChangeTable[pgm].size(); i++) { + fProgChangeTable[pgm][i]->modifyZone(FAUSTFLOAT(1)); + } } - } + } } void pitchWheel(double date, int channel, int wheel) { - for (unsigned int i = 0; i < fPitchWheelTable.size(); i++) { - fPitchWheelTable[i]->modifyZone(FAUSTFLOAT(wheel)); + if (fTimeStamp) { + for (unsigned int i = 0; i < fPitchWheelTable.size(); i++) { + fPitchWheelTable[i]->modifyZone(date, FAUSTFLOAT(wheel)); + } + } else { + for (unsigned int i = 0; i < fPitchWheelTable.size(); i++) { + fPitchWheelTable[i]->modifyZone(FAUSTFLOAT(wheel)); + } } } void keyPress(double date, int channel, int pitch, int press) { if (fKeyPressTable.find(pitch) != fKeyPressTable.end()) { - for (unsigned int i = 0; i < fKeyPressTable[pitch].size(); i++) { - fKeyPressTable[pitch][i]->modifyZone(FAUSTFLOAT(press)); + if (fTimeStamp) { + for (unsigned int i = 0; i < fKeyPressTable[pitch].size(); i++) { + fKeyPressTable[pitch][i]->modifyZone(date, FAUSTFLOAT(press)); + } + } else { + for (unsigned int i = 0; i < fKeyPressTable[pitch].size(); i++) { + fKeyPressTable[pitch][i]->modifyZone(FAUSTFLOAT(press)); + } } - } + } } void chanPress(double date, int channel, int press) { if (fChanPressTable.find(press) != fChanPressTable.end()) { - for (unsigned int i = 0; i < fChanPressTable[press].size(); i++) { - fChanPressTable[press][i]->modifyZone(FAUSTFLOAT(1)); + if (fTimeStamp) { + for (unsigned int i = 0; i < fChanPressTable[press].size(); i++) { + fChanPressTable[press][i]->modifyZone(date, FAUSTFLOAT(1)); + } + } else { + for (unsigned int i = 0; i < fChanPressTable[press].size(); i++) { + fChanPressTable[press][i]->modifyZone(FAUSTFLOAT(1)); + } } } } @@ -634,14 +791,14 @@ class MidiUI : public GUI, public midi // MIDI sync - void start_sync(double date) + void startSync(double date) { for (unsigned int i = 0; i < fStartTable.size(); i++) { fStartTable[i]->modifyZone(date, FAUSTFLOAT(1)); } } - void stop_sync(double date) + void stopSync(double date) { for (unsigned int i = 0; i < fStopTable.size(); i++) { fStopTable[i]->modifyZone(date, FAUSTFLOAT(0)); diff --git a/source/DEINDUGens/include/faust/gui/OCVUI.h b/source/DEINDUGens/include/faust/gui/OCVUI.h index 1f90261fa6..1d8008f56c 100644 --- a/source/DEINDUGens/include/faust/gui/OCVUI.h +++ b/source/DEINDUGens/include/faust/gui/OCVUI.h @@ -1,10 +1,26 @@ -/****************************************************************************** -******************************************************************************* +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ - OPENCV USER INTERFACE - -******************************************************************************* -*******************************************************************************/ #ifndef _OCVUI_H #define _OCVUI_H @@ -118,6 +134,9 @@ class OCVUI : public UI // -- PASSIVE WIDGETS void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max){} void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max){} + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} // -- METADATA DECLARATION diff --git a/source/DEINDUGens/include/faust/gui/OSCControler.h b/source/DEINDUGens/include/faust/gui/OSCControler.h index 5fb0f60ab8..c9f4044368 100644 --- a/source/DEINDUGens/include/faust/gui/OSCControler.h +++ b/source/DEINDUGens/include/faust/gui/OSCControler.h @@ -49,12 +49,13 @@ class OSCRegexp; */ class OSCControler { - int fUDPPort, fUDPOut, fUPDErr; // the udp ports numbers - std::string fDestAddress; // the osc messages destination address, used at initialization only + int fUDPPort, fUDPOut, fUPDErr; // the udp ports numbers + std::string fDestAddress; // the osc messages destination address, used at initialization only // to collect the address from the command line + std::string fBindAddress; // when non empty, the address used to bind the socket for listening OSCSetup* fOsc; // the network manager (handles the udp sockets) OSCIO* fIO; // hack for OSC IO support (actually only relayed to the factory) - FaustFactory * fFactory; // a factory to build the memory represetnatin + FaustFactory* fFactory; // a factory to build the memory representation bool fInit; @@ -88,8 +89,10 @@ class OSCControler //-------------------------------------------------------------------------- void run(); // starts the network services + void endBundle(); // when bundle mode is on, close and send the current bundle (if any) void stop(); // stop the network services - + std::string getInfos() const; // gives information about the current environment (version, port numbers,...) + int getUDPPort() const { return fUDPPort; } int getUDPOut() const { return fUDPOut; } int getUDPErr() const { return fUPDErr; } @@ -101,7 +104,7 @@ class OSCControler void setUDPErr(int port) { fUPDErr = port; } void setDestAddress(const char* address) { fDestAddress = address; } -// By default, an osc interface emits all parameters. You can filter specific params dynamically. + // By default, an osc interface emits all parameters. You can filter specific params dynamically. static std::vector fFilteredPaths; // filtered paths will not be emitted static void addFilteredPath(std::string path); static bool isPathFiltered(std::string path); @@ -111,6 +114,7 @@ class OSCControler static const char* versionstr(); // the Faust OSC library version number as a string static int gXmit; // a static variable to control the transmission of values // i.e. the use of the interface as a controler + static int gBundle; // a static variable to control the osc bundle mode }; #define kNoXmit 0 diff --git a/source/DEINDUGens/include/faust/gui/OSCIO.h b/source/DEINDUGens/include/faust/gui/OSCIO.h new file mode 100644 index 0000000000..690a12b856 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/OSCIO.h @@ -0,0 +1,64 @@ +/* + + Copyright (C) 2011 Grame + + This 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. + + This 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + + +#ifndef __OSCIO__ +#define __OSCIO__ + +#include + +namespace oscfaust +{ + +//-------------------------------------------------------------------------- +// build in support +//-------------------------------------------------------------------------- +//-------------------------------------------------------------------------- +/*! + \brief build in support for osc audio input / output +*/ +class OSCIO +{ + std::string fDest; // the output destination osc address + public: + OSCIO(const char *dst) : fDest(dst) {} + virtual ~OSCIO() {} + + virtual void receive( int nframes, float * val ) = 0; + virtual int numOutputs() const = 0; + virtual int numInputs() const = 0; + + /*! + \brief send audio frames on osc out + \param nframes the frames count + \param val a pointer to the frames values + \param chan the current channel number (used as part of the dest osc address) + */ + virtual void send ( int nframes, float * val, int chan ) const; + const char* dest () const { return fDest.c_str(); } + void setDest (const char *dst) { fDest = dst; } +}; + +} // end namespoace + +#endif diff --git a/source/DEINDUGens/include/faust/gui/OSCUI.h b/source/DEINDUGens/include/faust/gui/OSCUI.h index 532f42d8e9..7d92f83e3f 100644 --- a/source/DEINDUGens/include/faust/gui/OSCUI.h +++ b/source/DEINDUGens/include/faust/gui/OSCUI.h @@ -1,27 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ /* @@ -34,9 +31,11 @@ #ifndef __OSCUI__ #define __OSCUI__ +#include +#include + #include "faust/gui/OSCControler.h" #include "faust/gui/GUI.h" -#include #ifdef _WIN32 #define strcasecmp _stricmp @@ -163,12 +162,12 @@ class OSCUI : public GUI fCtrl->run(); return true; } + + void stop() { fCtrl->stop(); } + void endBundle() { fCtrl->endBundle(); } - void stop() - { - fCtrl->stop(); - } - + std::string getInfos() { return fCtrl->getInfos(); } + const char* getRootName() { return fCtrl->getRootName(); } int getUDPPort() { return fCtrl->getUDPPort(); } int getUDPOut() { return fCtrl->getUDPOut(); } diff --git a/source/DEINDUGens/include/faust/gui/PathBuilder.h b/source/DEINDUGens/include/faust/gui/PathBuilder.h index 1ddd5c5d77..3730159338 100644 --- a/source/DEINDUGens/include/faust/gui/PathBuilder.h +++ b/source/DEINDUGens/include/faust/gui/PathBuilder.h @@ -1,27 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef FAUST_PATHBUILDER_H @@ -56,10 +53,13 @@ class PathBuilder res += "/"; } res += label; - replace(res.begin(), res.end(), ' ', '_'); + std::replace(res.begin(), res.end(), ' ', '_'); return res; } + void pushLabel(const std::string& label) { fControlsLevel.push_back(label); } + void popLabel() { fControlsLevel.pop_back(); } + }; #endif // FAUST_PATHBUILDER_H diff --git a/source/DEINDUGens/include/faust/gui/PresetUI.h b/source/DEINDUGens/include/faust/gui/PresetUI.h new file mode 100644 index 0000000000..61d82b4923 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/PresetUI.h @@ -0,0 +1,227 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __PresetUI_H__ +#define __PresetUI_H__ + +#include +#include +#include + +#include "faust/gui/DecoratorUI.h" +#include "faust/gui/FUI.h" +#include "faust/gui/GUI.h" + +class PresetUI; + +struct LoaderUI : public GUI +{ + PresetUI* fPresetUI; + + LoaderUI(PresetUI* presetui); + +}; + +class PresetUI : public DecoratorUI +{ + friend LoaderUI; + + private: + + int fGroupCount; + FAUSTFLOAT fPreset; + FAUSTFLOAT fLoad; + FAUSTFLOAT fSave; + FAUSTFLOAT fReset; + FUI fFileUI; + LoaderUI fLoaderUI; + std::string fRootFolder; + + static void load(FAUSTFLOAT val, void* arg) + { + if (val == FAUSTFLOAT(1)) { + static_cast(arg)->loadState(); + } + } + + static void save(FAUSTFLOAT val, void* arg) + { + if (val == FAUSTFLOAT(1)) { + static_cast(arg)->saveState(); + } + } + + static void reset(FAUSTFLOAT val, void* arg) + { + if (val == FAUSTFLOAT(1)) { + static_cast(arg)->loadDefault(); + } + } + + void checkOpenFirstBox(const char* label) + { + if (fGroupCount++ == 0) { + // Start of top-level group + fUI->openHorizontalBox("Preset manager"); + fUI->addButton("Save", &fSave); + fUI->addNumEntry("Preset", &fPreset, FAUSTFLOAT(0),FAUSTFLOAT(0), FAUSTFLOAT(100), FAUSTFLOAT(1)); + fUI->addButton("Load", &fLoad); + fUI->addButton("Reset", &fReset); + fUI->closeBox(); + } + } + + public: + + PresetUI(UI* ui, const std::string& root_folfer): + DecoratorUI(ui), + fGroupCount(0), + fPreset(FAUSTFLOAT(0)), + fSave(FAUSTFLOAT(0)), + fLoad(FAUSTFLOAT(0)), + fReset(FAUSTFLOAT(0)), + fLoaderUI(this), + fRootFolder(root_folfer) + {} + + virtual ~PresetUI() + {} + + void saveDefault() + { + std::stringstream str; + str << fRootFolder << "_default"; + fFileUI.saveState(str.str().c_str()); + } + + void loadDefault() + { + std::stringstream str; + str << fRootFolder << "_default"; + fFileUI.recallState(str.str().c_str()); + } + + void saveState() + { + std::stringstream str; + str << fRootFolder << "_preset" << int(fPreset); + fFileUI.saveState(str.str().c_str()); + } + + void loadState() + { + std::stringstream str; + str << fRootFolder << "_preset" << int(fPreset); + fFileUI.recallState(str.str().c_str()); + } + + // -- widget's layouts + virtual void openTabBox(const char* label) + { + checkOpenFirstBox(label); + fUI->openTabBox(label); + fFileUI.openTabBox(label); + } + virtual void openHorizontalBox(const char* label) + { + checkOpenFirstBox(label); + fUI->openHorizontalBox(label); + fFileUI.openHorizontalBox(label); + } + virtual void openVerticalBox(const char* label) + { + checkOpenFirstBox(label); + fUI->openVerticalBox(label); + fFileUI.openVerticalBox(label); + } + virtual void closeBox() + { + fUI->closeBox(); + if (--fGroupCount == 0) { + // End of top-level group + saveDefault(); + } + } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { + fUI->addButton(label, zone); + fFileUI.addButton(label, zone); + } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { + fUI->addCheckButton(label, zone); + fFileUI.addCheckButton(label, zone); + } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + fUI->addVerticalSlider(label, zone, init, min, max, step); + fFileUI.addVerticalSlider(label, zone, init, min, max, step); + } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + fUI->addHorizontalSlider(label, zone, init, min, max, step); + fFileUI.addHorizontalSlider(label, zone, init, min, max, step); + } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + fUI->addNumEntry(label, zone, init, min, max, step); + fFileUI.addNumEntry(label, zone, init, min, max, step); + } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { + fUI->addHorizontalBargraph(label, zone, min, max); + fFileUI.addHorizontalBargraph(label, zone, min, max); + } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { + fUI->addVerticalBargraph(label, zone, min, max); + fFileUI.addVerticalBargraph(label, zone, min, max); + } + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) + { + fUI->addSoundfile(label, filename, sf_zone); + fFileUI.addSoundfile(label, filename, sf_zone); + } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) + { + fUI->declare(zone, key, val); + fFileUI.declare(zone, key, val); + } + +}; + +LoaderUI::LoaderUI(PresetUI* presetui) +{ + new uiCallbackItem(this, &presetui->fLoad, PresetUI::load, presetui); + new uiCallbackItem(this, &presetui->fSave, PresetUI::save, presetui); + new uiCallbackItem(this, &presetui->fReset, PresetUI::reset, presetui); +} + +#endif diff --git a/source/DEINDUGens/include/faust/gui/PrintUI.h b/source/DEINDUGens/include/faust/gui/PrintUI.h index d8a4be30aa..81297d8162 100644 --- a/source/DEINDUGens/include/faust/gui/PrintUI.h +++ b/source/DEINDUGens/include/faust/gui/PrintUI.h @@ -1,40 +1,35 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef FAUST_PRINTUI_H #define FAUST_PRINTUI_H -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif +#include +#include +#include #include "faust/gui/UI.h" #include "faust/gui/PathBuilder.h" -#include -#include /******************************************************************************* * PrintUI : Faust User Interface @@ -47,7 +42,6 @@ class PrintUI : public PathBuilder, public UI public: PrintUI() {} - virtual ~PrintUI() {} // -- widget's layouts @@ -106,6 +100,13 @@ class PrintUI : public PathBuilder, public UI { std::cout << "addVerticalBargraph label : " << buildPath(label) << " min : " << min << " max : " << max << std::endl; } + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) + { + std::cout << "addSoundfile label : " << buildPath(label) << " filename :" << filename << std::endl; + } // -- metadata declarations diff --git a/source/DEINDUGens/include/faust/gui/faustqt.h b/source/DEINDUGens/include/faust/gui/QTUI.h similarity index 82% rename from source/DEINDUGens/include/faust/gui/faustqt.h rename to source/DEINDUGens/include/faust/gui/QTUI.h index fb39e84887..dfc2ca2752 100644 --- a/source/DEINDUGens/include/faust/gui/faustqt.h +++ b/source/DEINDUGens/include/faust/gui/QTUI.h @@ -1,7 +1,6 @@ /************************************************************************ - ************************************************************************ FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- This Architecture section is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,11 +15,14 @@ You should have received a copy of the GNU General Public License along with this program; If not, see . - ************************************************************************ + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ -#ifndef __faustqt__ -#define __faustqt__ +#ifndef __QTUI__ +#define __QTUI__ #include #include @@ -35,17 +37,17 @@ #if defined(HTTPCTRL) && defined(QRCODECTRL) #ifdef _WIN32 -#include -#undef min -#undef max +# include +# undef min +# undef max +# pragma warning (disable: 4100) #else -#include -#include -#include +# include +# include +# include #endif #include -#include #endif @@ -59,12 +61,16 @@ #include #include #include +#include #include "faust/gui/GUI.h" #include "faust/gui/ValueConverter.h" +#include "faust/gui/SimpleParser.h" #include "faust/gui/MetaDataUI.h" -#include +#if defined(HTTPCTRL) && defined(QRCODECTRL) +#include "faust/gui/qrcodegen.h" +#endif // for compatibility #define minValue minimum @@ -79,9 +85,11 @@ // improved for Qt4 by David Garcia Garzon. // -#define DIAL_MIN (0.25 * M_PI) -#define DIAL_MAX (1.75 * M_PI) -#define DIAL_RANGE (DIAL_MAX - DIAL_MIN) +#define DIAL_MIN (0.25 * M_PI) +#define DIAL_MAX (1.75 * M_PI) +#define DIAL_RANGE (DIAL_MAX - DIAL_MIN) +#define DIAL_WRAPPING false + class qsynthDialVokiStyle : public QCommonStyle { @@ -90,7 +98,7 @@ class qsynthDialVokiStyle : public QCommonStyle qsynthDialVokiStyle() {}; virtual ~qsynthDialVokiStyle() {}; - virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const + virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex* opt, QPainter* p, const QWidget* widget = NULL) const { if (cc != QStyle::CC_Dial) { @@ -198,47 +206,47 @@ class qsynthDialVokiStyle : public QCommonStyle // Shadowing... - // Knob shadow... - if (knobBorderWidth > 0) { - QLinearGradient inShadow(xcenter - side / 4, ycenter - side / 4, + // Knob shadow... + if (knobBorderWidth > 0) { + QLinearGradient inShadow(xcenter - side / 4, ycenter - side / 4, xcenter + side / 4, ycenter + side / 4); - inShadow.setColorAt(0.0, borderColor.light()); - inShadow.setColorAt(1.0, borderColor.dark()); - p->setPen(QPen(QBrush(inShadow), knobBorderWidth * 7 / 8)); - p->drawEllipse(xcenter - side / 2 + indent, + inShadow.setColorAt(0.0, borderColor.light()); + inShadow.setColorAt(1.0, borderColor.dark()); + p->setPen(QPen(QBrush(inShadow), knobBorderWidth * 7 / 8)); + p->drawEllipse(xcenter - side / 2 + indent, ycenter - side / 2 + indent, side - 2 * indent, side - 2 * indent); - } - - // Scale shadow... - QLinearGradient outShadow(xcenter - side / 3, ycenter - side / 3, + } + + // Scale shadow... + QLinearGradient outShadow(xcenter - side / 3, ycenter - side / 3, xcenter + side / 3, ycenter + side / 3); - outShadow.setColorAt(0.0, background.dark().dark()); - outShadow.setColorAt(1.0, background.light().light()); - p->setPen(QPen(QBrush(outShadow), scaleShadowWidth)); - p->drawArc(xcenter - side / 2 + scaleShadowWidth / 2, + outShadow.setColorAt(0.0, background.dark().dark()); + outShadow.setColorAt(1.0, background.light().light()); + p->setPen(QPen(QBrush(outShadow), scaleShadowWidth)); + p->drawArc(xcenter - side / 2 + scaleShadowWidth / 2, ycenter - side / 2 + scaleShadowWidth / 2, side - scaleShadowWidth, side - scaleShadowWidth, -45 * 16, 270 * 16); - - // Pointer notch... - double hyp = double(side) / 2.0; - double len = hyp - indent - 1; - - double x = xcenter - len * sin(angle); - double y = ycenter + len * cos(angle); - - QColor pointerColor = pal.dark().color(); - pen.setColor((dial->state & State_Enabled) ? pointerColor.dark(140) : pointerColor); - pen.setWidth(pointerWidth + 2); - p->setPen(pen); - p->drawLine(QLineF(xcenter, ycenter, x, y)); - pen.setColor((dial->state & State_Enabled) ? pointerColor.light() : pointerColor.light(140)); - pen.setWidth(pointerWidth); - p->setPen(pen); - p->drawLine(QLineF(xcenter - 1, ycenter - 1, x - 1, y - 1)); - - // done - p->restore(); + + // Pointer notch... + double hyp = double(side) / 2.0; + double len = hyp - indent - 1; + + double x = xcenter - len * sin(angle); + double y = ycenter + len * cos(angle); + + QColor pointerColor = pal.dark().color(); + pen.setColor((dial->state & State_Enabled) ? pointerColor.dark(140) : pointerColor); + pen.setWidth(pointerWidth + 2); + p->setPen(pen); + p->drawLine(QLineF(xcenter, ycenter, x, y)); + pen.setColor((dial->state & State_Enabled) ? pointerColor.light() : pointerColor.light(140)); + pen.setWidth(pointerWidth); + p->setPen(pen); + p->drawLine(QLineF(xcenter - 1, ycenter - 1, x - 1, y - 1)); + + // done + p->restore(); } }; @@ -319,10 +327,10 @@ class dbAbstractDisplay : public AbstractDisplay QColor c(40, 160, 40, alpha); QLinearGradient g(0,0,x,1-x); g.setCoordinateMode(QGradient::ObjectBoundingMode); - g.setColorAt(0.0, c.lighter()); - g.setColorAt(0.2, c); - g.setColorAt(0.8, c); - g.setColorAt(0.9, c.darker(120)); + g.setColorAt(0.0, c.lighter()); + g.setColorAt(0.2, c); + g.setColorAt(0.8, c); + g.setColorAt(0.9, c.darker(120)); fLevel.push_back(-10); fBrush.push_back(QBrush(g)); @@ -332,10 +340,10 @@ class dbAbstractDisplay : public AbstractDisplay QColor c(160, 220, 20, alpha); QLinearGradient g(0,0,x,1-x); g.setCoordinateMode(QGradient::ObjectBoundingMode); - g.setColorAt(0.0, c.lighter()); - g.setColorAt(0.2, c); - g.setColorAt(0.8, c); - g.setColorAt(0.9, c.darker(120)); + g.setColorAt(0.0, c.lighter()); + g.setColorAt(0.2, c); + g.setColorAt(0.8, c); + g.setColorAt(0.9, c.darker(120)); fLevel.push_back(-6); fBrush.push_back(QBrush(g)); @@ -345,10 +353,10 @@ class dbAbstractDisplay : public AbstractDisplay QColor c(220, 220, 20, alpha); QLinearGradient g(0,0,x,1-x); g.setCoordinateMode(QGradient::ObjectBoundingMode); - g.setColorAt(0.0, c.lighter()); - g.setColorAt(0.2, c); - g.setColorAt(0.8, c); - g.setColorAt(0.9, c.darker(120)); + g.setColorAt(0.0, c.lighter()); + g.setColorAt(0.2, c); + g.setColorAt(0.8, c); + g.setColorAt(0.9, c.darker(120)); fLevel.push_back(-3); fBrush.push_back(QBrush(g)); @@ -358,10 +366,10 @@ class dbAbstractDisplay : public AbstractDisplay QColor c(240, 160, 20, alpha); QLinearGradient g(0,0,x,1-x); g.setCoordinateMode(QGradient::ObjectBoundingMode); - g.setColorAt(0.0, c.lighter()); - g.setColorAt(0.2, c); - g.setColorAt(0.8, c); - g.setColorAt(0.9, c.darker(120)); + g.setColorAt(0.0, c.lighter()); + g.setColorAt(0.2, c); + g.setColorAt(0.8, c); + g.setColorAt(0.9, c.darker(120)); fLevel.push_back(0); fBrush.push_back(QBrush(g)); @@ -371,10 +379,10 @@ class dbAbstractDisplay : public AbstractDisplay QColor c(240, 0, 20, alpha); // ColorOver QLinearGradient g(0,0,x,1-x); g.setCoordinateMode(QGradient::ObjectBoundingMode); - g.setColorAt(0.0, c.lighter()); - g.setColorAt(0.2, c); - g.setColorAt(0.8, c); - g.setColorAt(0.9, c.darker(120)); + g.setColorAt(0.0, c.lighter()); + g.setColorAt(0.2, c); + g.setColorAt(0.8, c); + g.setColorAt(0.9, c.darker(120)); fLevel.push_back(+10); fBrush.push_back(QBrush(g)); @@ -408,7 +416,7 @@ class dbLED : public dbAbstractDisplay /** * Draw the LED using a color depending of its value in dB */ - virtual void paintEvent ( QPaintEvent *) + virtual void paintEvent(QPaintEvent*) { QPainter painter(this); painter.drawRect(rect()); @@ -424,7 +432,7 @@ class dbLED : public dbAbstractDisplay } else { // find the minimal level > value - int l = fLevel.size()-1; while (fValue < fLevel[l] && l > 0) l--; + size_t l = fLevel.size()-1; while (fValue < fLevel[l] && l > 0) l--; painter.fillRect(rect(), fBrush[l]); } } @@ -437,7 +445,7 @@ class dbLED : public dbAbstractDisplay initLevelsColors(1); } - virtual QSize sizeHint () const + virtual QSize sizeHint() const { return QSize(16, 8); } @@ -451,7 +459,7 @@ class LED : public AbstractDisplay protected: - QColor fColor; + QColor fColor; /** * Draw the LED using a transparency depending of its value @@ -474,7 +482,7 @@ class LED : public AbstractDisplay setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); } - virtual QSize sizeHint () const + virtual QSize sizeHint() const { return QSize(16, 8); } @@ -488,7 +496,7 @@ class linBargraph : public AbstractDisplay protected: - QBrush fBrush; + QBrush fBrush; /** * No scale implemented yet @@ -533,10 +541,10 @@ class linBargraph : public AbstractDisplay int x = int(height() < width()); // gradient direction QLinearGradient g(0,0,x,1-x); g.setCoordinateMode(QGradient::ObjectBoundingMode); - g.setColorAt(0.0, c.lighter()); - g.setColorAt(0.2, c); - g.setColorAt(0.8, c); - g.setColorAt(0.9, c.darker(120)); + g.setColorAt(0.0, c.lighter()); + g.setColorAt(0.2, c); + g.setColorAt(0.8, c); + g.setColorAt(0.9, c.darker(120)); fBrush = QBrush(g); } }; @@ -554,7 +562,7 @@ class linVerticalBargraph : public linBargraph setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); } - virtual QSize sizeHint () const + virtual QSize sizeHint() const { return QSize(16, 128); } @@ -593,7 +601,7 @@ class dbBargraph : public dbAbstractDisplay // according to the vertical or horizontal direction // in dbVerticalBargraph and dbHorizontalBargraph virtual void paintMark(QPainter* painter, FAUSTFLOAT v) const = 0; - virtual int paintSegment (QPainter* painter, int pos, FAUSTFLOAT v, const QBrush& b) const = 0; + virtual int paintSegment(QPainter* painter, int pos, FAUSTFLOAT v, const QBrush& b) const = 0; /** * Draw the logarithmic scale @@ -613,10 +621,10 @@ class dbBargraph : public dbAbstractDisplay */ void paintContent(QPainter* painter) const { - int l = fLevel.size(); + size_t l = fLevel.size(); FAUSTFLOAT p = -1; // fake value indicates to start from border - int n = 0; + size_t n = 0; // paint all the full segments < fValue for (n = 0; (n < l) && (fValue > fLevel[n]); n++) { p = paintSegment(painter, p, fLevel[n], fBrush[n]); @@ -628,7 +636,7 @@ class dbBargraph : public dbAbstractDisplay painter->drawRect(0,0,width(),height()); } - virtual void paintEvent (QPaintEvent *) + virtual void paintEvent(QPaintEvent *) { QPainter painter(this); paintScale(&painter); @@ -661,7 +669,7 @@ class dbVerticalBargraph : public dbBargraph FAUSTFLOAT s0 = fScaleMin; FAUSTFLOAT s1 = fScaleMax; FAUSTFLOAT sx = dB2Scale(dB); - int h = height(); + int h = height(); return h - h*(s0-sx)/(s0-s1); } @@ -755,7 +763,7 @@ class dbHorizontalBargraph : public dbBargraph initLevelsColors(0); } - virtual QSize sizeHint () const + virtual QSize sizeHint() const { return QSize(256, 18); } @@ -787,7 +795,7 @@ class uiButton : public QObject, public uiItem QAbstractButton* fButton; - uiButton (GUI* ui, FAUSTFLOAT* zone, QAbstractButton* b) : uiItem(ui, zone), fButton(b) {} + uiButton(GUI* ui, FAUSTFLOAT* zone, QAbstractButton* b) : uiItem(ui, zone), fButton(b) {} virtual void reflectZone() { @@ -814,13 +822,13 @@ class uiCheckButton : public QObject, public uiItem QCheckBox* fCheckBox; - uiCheckButton (GUI* ui, FAUSTFLOAT* zone, QCheckBox* b) : uiItem(ui, zone), fCheckBox(b) {} + uiCheckButton(GUI* ui, FAUSTFLOAT* zone, QCheckBox* b) : uiItem(ui, zone), fCheckBox(b) {} virtual void reflectZone() { FAUSTFLOAT v = *fZone; fCache = v; - fCheckBox->setCheckState( (v < 0.5) ? Qt::Unchecked : Qt::Checked ); + fCheckBox->setCheckState((v < 0.5) ? Qt::Unchecked : Qt::Checked); } public slots : @@ -846,7 +854,7 @@ class uiSlider : public QObject, public uiItem public: - uiSlider (GUI* ui, FAUSTFLOAT* zone, QAbstractSlider* slider, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT step, MetaDataUI::Scale scale) + uiSlider(GUI* ui, FAUSTFLOAT* zone, QAbstractSlider* slider, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT step, MetaDataUI::Scale scale) : uiItem(ui, zone), fSlider(slider), fCur(cur), fMin(lo), fMax(hi), fStep(step) { // select appropriate converter according to scale mode @@ -860,9 +868,9 @@ class uiSlider : public QObject, public uiItem *fZone = fCur; } - ~uiSlider() + virtual ~uiSlider() { - if (fConverter) delete fConverter; + delete fConverter; } virtual void reflectZone() @@ -873,7 +881,10 @@ class uiSlider : public QObject, public uiItem } public slots : - void setValue(int v) { modifyZone(fConverter->ui2faust(v)); } + void setValue(int v) + { + modifyZone(fConverter->ui2faust(v)); + } }; @@ -892,7 +903,7 @@ class ZoneSetter : public QObject FAUSTFLOAT* fZone; public: - explicit ZoneSetter(FAUSTFLOAT v, FAUSTFLOAT* z, QObject *parent = 0): + explicit ZoneSetter(FAUSTFLOAT v, FAUSTFLOAT* z, QObject* parent = NULL): QObject(parent), fValue(v), fZone(z) {} @@ -900,7 +911,7 @@ class ZoneSetter : public QObject void set(bool) { *fZone = fValue; - // qDebug() << "setting " << fValue << " --> " << fZone; + // qDebug() << "setting " << fValue << " --> " << fZone; } }; @@ -917,22 +928,22 @@ class uiRadioButtons : public QGroupBox, public uiItem protected: - vector fValues; - vector fButtons; + std::vector fValues; + std::vector fButtons; public: - uiRadioButtons (GUI* ui, FAUSTFLOAT* z, const char* label, + uiRadioButtons(GUI* ui, FAUSTFLOAT* z, const char* label, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT /*step*/, bool vertical, const char* mdescr, QWidget* parent) : QGroupBox(label, parent), uiItem(ui, z) { - vector names; - vector values; + std::vector names; + std::vector values; if (parseMenuList(mdescr, names, values)) { - QBoxLayout* l; + QBoxLayout* l; if (vertical) { l = new QVBoxLayout(this); } else { @@ -940,7 +951,7 @@ class uiRadioButtons : public QGroupBox, public uiItem } l->setSpacing(5); - QRadioButton* defaultbutton = 0; + QRadioButton* defaultbutton = NULL; double mindelta = FLT_MAX; for (unsigned int i = 0; i < names.size(); i++) { @@ -966,6 +977,8 @@ class uiRadioButtons : public QGroupBox, public uiItem // check the best candidate to represent the current value if (defaultbutton) { defaultbutton->setChecked(true); } setLayout(l); + } else { + std::cerr << "parseMenuList : (" << mdescr << ") is not a menu !\n"; } *fZone = cur; } @@ -1001,17 +1014,17 @@ class uiMenu : public QComboBox, public uiItem protected: - vector fValues; + std::vector fValues; public: - uiMenu (GUI* ui, FAUSTFLOAT* z, const char* /*label*/, + uiMenu(GUI* ui, FAUSTFLOAT* z, const char* /*label*/, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT /*step*/, const char* mdescr, QWidget* parent) : QComboBox(parent), uiItem(ui, z) { - vector names; - vector values; + std::vector names; + std::vector values; if (parseMenuList(mdescr, names, values)) { @@ -1020,7 +1033,7 @@ class uiMenu : public QComboBox, public uiItem for (unsigned int i = 0; i < names.size(); i++) { double v = values[i]; - if ( (v >= lo) && (v <= hi) ) { + if ((v >= lo) && (v <= hi)) { // It is a valid value : add corresponding menu item addItem(QString(names[i].c_str()), v); @@ -1036,6 +1049,8 @@ class uiMenu : public QComboBox, public uiItem } // check the best candidate to represent the current value if (defaultitem > -1) { setCurrentIndex(defaultitem); } + } else { + std::cerr << "parseMenuList : (" << mdescr << ") is not a menu !\n"; } connect(this,SIGNAL(activated(int)), this, SLOT(updateZone(int))); *fZone = cur; @@ -1047,8 +1062,8 @@ class uiMenu : public QComboBox, public uiItem fCache = v; // search closest value - int defaultitem = -1; - double mindelta = FLT_MAX; + int defaultitem = -1; + double mindelta = FLT_MAX; for (unsigned int i=0; isetRange(lo, hi); @@ -1117,7 +1132,7 @@ class uiNumEntry : public QObject, public uiItem public: - uiNumEntry (GUI* ui, FAUSTFLOAT* zone, QDoubleSpinBox* numEntry, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT step) + uiNumEntry(GUI* ui, FAUSTFLOAT* zone, QDoubleSpinBox* numEntry, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT step) : uiItem(ui, zone), fNumEntry(numEntry), fCur(cur), fMin(lo), fMax(hi), fStep(step) { fDecimals = (fStep >= 1.0) ? 0 : int(0.5+log10(1.0/fStep)); @@ -1152,6 +1167,38 @@ class uiNumEntry : public QObject, public uiItem ******************************************************************************* *******************************************************************************/ +#if defined(HTTPCTRL) && defined(QRCODECTRL) +// a simple utility to retrieve an abstract qr code +// introduced to remove the dependency to qrencode +static QImage getQRCode(const QString& url, int padding) +{ + qrcodegen_Ecc errCorLvl = qrcodegen_Ecc_HIGH; //qrcodegen_Ecc_MEDIUM qrcodegen_Ecc_LOW Error correction level + uint8_t qrcode[qrcodegen_BUFFER_LEN_MAX]; + uint8_t tempBuffer[qrcodegen_BUFFER_LEN_MAX]; + if (!qrcodegen_encodeText(url.toStdString().c_str(), tempBuffer, qrcode, errCorLvl, qrcodegen_VERSION_MIN, qrcodegen_VERSION_MAX, qrcodegen_Mask_AUTO, true)) + return QImage(1, 1, QImage::Format_RGB32); + + int size = qrcodegen_getSize(qrcode); + QRgb colors[2]; + colors[0] = qRgb(255, 255, 255); // 0 is white + colors[1] = qRgb(0, 0, 0); // 1 is black + // build the QRCode image + QImage image(size+2*padding, size+2*padding, QImage::Format_RGB32); + // clear the image + for (int y=0; y(fGroupStack.top()) != 0)); - return ((!fGroupStack.empty()) && (dynamic_cast(fGroupStack.top()) != 0)); + return ((!fGroupStack.empty()) && (dynamic_cast(fGroupStack.top()) != NULL)); } /** @@ -1269,7 +1316,7 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI pal.setColor(box->backgroundRole(), QColor::fromRgb(150, 150, 150)); box->setPalette(pal); - } else if (label.size()>0) { + } else if (label.size()>0) { QGroupBox* group = new QGroupBox(); group->setTitle(label.c_str()); box = group; @@ -1323,7 +1370,7 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI QWidget::show(); fMainWindow = NULL; - fTimer = 0; + fTimer = NULL; } QTGUI():QWidget() @@ -1332,12 +1379,12 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI setLayout(fGeneralLayout); QWidget::show(); - fTimer = 0; + fTimer = NULL; fMainWindow = new QMainWindow; - QScrollArea *sa = new QScrollArea( fMainWindow ); + QScrollArea *sa = new QScrollArea(fMainWindow); - sa->setWidgetResizable( true ); + sa->setWidgetResizable(true); sa->setWidget(this); fMainWindow->setCentralWidget(sa); @@ -1403,7 +1450,7 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI url += QString::number(portnum); displayQRCode(url, NULL); } - + void displayQRCode(const QString& url, QMainWindow* parent = NULL) { if (parent == NULL) { @@ -1415,32 +1462,35 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI // QTextEdit* httpdText = new QTextEdit(centralWidget); QTextBrowser* myBro = new QTextBrowser(centralWidget); - //Construction of the flashcode +// //Construction of the flashcode +// const int padding = 5; +// QRcode* qrc = QRcode_encodeString(url.toLatin1().data(), 0, QR_ECLEVEL_H, QR_MODE_8, 1); +// +// // qDebug() << "QRcode width = " << qrc->width; +// +// QRgb colors[2]; +// colors[0] = qRgb(255, 255, 255); // 0 is white +// colors[1] = qRgb(0, 0, 0); // 1 is black +// +// // build the QRCode image +// QImage image(qrc->width+2*padding, qrc->width+2*padding, QImage::Format_RGB32); +// // clear the image +// for (int y = 0; y < qrc->width+2*padding; y++) { +// for (int x = 0; x < qrc->width+2*padding; x++) { +// image.setPixel(x, y, colors[0]); +// } +// } +// // copy the qrcode inside +// for (int y = 0; y < qrc->width; y++) { +// for (int x = 0; x < qrc->width; x++) { +// image.setPixel(x+padding, y+padding, colors[qrc->data[y*qrc->width+x]&1]); +// } +// } + const int padding = 5; - QRcode* qrc = QRcode_encodeString(url.toLatin1().data(), 0, QR_ECLEVEL_H, QR_MODE_8, 1); - - // qDebug() << "QRcode width = " << qrc->width; - - QRgb colors[2]; - colors[0] = qRgb(255, 255, 255); // 0 is white - colors[1] = qRgb(0, 0, 0); // 1 is black - - // build the QRCode image - QImage image(qrc->width+2*padding, qrc->width+2*padding, QImage::Format_RGB32); - // clear the image - for (int y = 0; y < qrc->width+2*padding; y++) { - for (int x = 0; x < qrc->width+2*padding; x++) { - image.setPixel(x, y, colors[0]); - } - } - // copy the qrcode inside - for (int y = 0; y < qrc->width; y++) { - for (int x = 0; x < qrc->width; x++) { - image.setPixel(x+padding, y+padding, colors[qrc->data[y*qrc->width+x]&1]); - } - } - - QImage big = image.scaledToWidth(qrc->width*8); + QImage image = getQRCode (url, padding); +// QImage big = image.scaledToWidth(qrc->width*8); + QImage big = image.scaledToWidth(image.width() * 8); QLabel* myLabel = new QLabel(centralWidget); fQrCode = QPixmap::fromImage(big); @@ -1459,7 +1509,7 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI myBro->setOpenExternalLinks(true); myBro->setHtml(text); myBro->setAlignment(Qt::AlignCenter); - myBro->setFixedWidth(qrc->width*8); + myBro->setFixedWidth(big.width()); // myBro->setFixedHeight(myBro->minimumHeight()); QGridLayout *mainLayout = new QGridLayout; @@ -1486,7 +1536,7 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI virtual bool run() { - if (fTimer == 0) { + if (!fTimer) { fTimer = new QTimer(this); QObject::connect(fTimer, SIGNAL(timeout()), this, SLOT(update())); fTimer->start(100); @@ -1500,7 +1550,7 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI virtual void stop() { - if (fTimer != 0) { + if (fTimer) { fTimer->stop(); delete fTimer; fTimer = NULL; @@ -1586,6 +1636,12 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI if (isKnob(zone)) { addVerticalKnob(label, zone, init, min, max, step); return; + } else if (isRadio(zone)) { + addVerticalRadioButtons(label, zone, init, min, max, step, fRadioDescription[zone].c_str()); + return; + } else if (isMenu(zone)) { + addMenu(label, zone, init, min, max, step, fMenuDescription[zone].c_str()); + return; } //insert(label, new QDoubleSpinBox()); if (label && label[0]) openVerticalBox(label); @@ -1624,7 +1680,7 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI QObject::connect(w, SIGNAL(valueChanged(double)), c, SLOT(setValue(double))); if (label && label[0]) closeBox(); checkForTooltip(zone, w); - clearMetadata(); + // Metadata is not cleared here, since it will be by the enclosing element calling addNumDisplay } ////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1633,40 +1689,44 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI // ////////////////////////////////////////////////////////////////////////////////////////////////////////// - virtual void addVerticalKnob(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - openVerticalBox(label); - QAbstractSlider* w = new QDial(); //qsynthKnob(); - uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone)); - insert(label, w); - w->setStyle(new qsynthDialVokiStyle()); - QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int))); - addNumDisplay(0, zone, init, min, max, step); - + virtual void addVerticalKnob(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + openVerticalBox(label); + QDial* w = new QDial(); //qsynthKnob(); + uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone)); + insert(label, w); + w->setStyle(new qsynthDialVokiStyle()); + w->setFocusPolicy(Qt::StrongFocus); + w->setWrapping(DIAL_WRAPPING); + QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int))); + addNumDisplay(0, zone, init, min, max, step); + // compute the size of the knob+display - int width = int(64*pow(2,fGuiSize[zone])); + int width = int(64*pow(2,fGuiSize[zone])); int height = int(100*pow(2,fGuiSize[zone])); fGroupStack.top()->setMinimumSize(width,height); fGroupStack.top()->setMaximumSize(width,height); - - closeBox(); + + closeBox(); checkForTooltip(zone, w); clearMetadata(); - } - - virtual void addHorizontalKnob(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - openHorizontalBox(label); - QAbstractSlider* w = new QDial(); //new qsynthKnob(); - uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone)); - insert(label, w); - w->setStyle(new qsynthDialVokiStyle()); - QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int))); - addNumDisplay(0, zone, init, min, max, step); - closeBox(); + } + + virtual void addHorizontalKnob(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + openHorizontalBox(label); + QDial* w = new QDial(); //new qsynthKnob(); + uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone)); + insert(label, w); + w->setStyle(new qsynthDialVokiStyle()); + w->setFocusPolicy(Qt::StrongFocus); + w->setWrapping(DIAL_WRAPPING); + QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int))); + addNumDisplay(0, zone, init, min, max, step); + closeBox(); checkForTooltip(zone, w); clearMetadata(); - } + } ////////////////////////////////////////////////////////////////////////////////////////////////////////// // @@ -1828,5 +1888,9 @@ class QTGUI : public QWidget, public GUI, public MetaDataUI } }; +#ifdef _WIN32 +# pragma warning (default: 4100) #endif + +#endif diff --git a/source/DEINDUGens/include/faust/gui/RosCI.h b/source/DEINDUGens/include/faust/gui/RosCI.h index 3ace08cd4f..c5f8b0e934 100644 --- a/source/DEINDUGens/include/faust/gui/RosCI.h +++ b/source/DEINDUGens/include/faust/gui/RosCI.h @@ -1,22 +1,37 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + /********************************************** * ROS Callbacks Interface * -* This interface allows the user to use ROS -* metadata -* It handles ROS metadata, and writes the -* callbacks directly in the .cpp file. +* This interface allows the user to use ROS metadata +* It handles ROS metadata, and writes the callbacks directly in the .cpp file. * **********************************************/ #ifndef FAUST_RosCI_H #define FAUST_RosCI_H -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -#include "faust/gui/UI.h" - #include #include #include @@ -24,448 +39,454 @@ #include #include +#include "faust/gui/UI.h" + class RosCI : public UI { public: - RosCI(): count_(0), use_slider_values_(false), meta_(false) - {}; - - virtual ~RosCI() {} - - // String processing function - std::string strProcess(std::string label) - { - int count = label.size(); - bool ok = false; - int FORWARD_SLASH = 47; - int TILDE = 126; - int UNDERSCORE = 95; - int SPACE = 32; - int LEFT_BRACKET = 40; - int RIGHT_BRACKET = 41; + RosCI(): count_(0), use_slider_values_(false), meta_(false) + {}; + + virtual ~RosCI() {} - do + // String processing function + std::string strProcess(std::string label) { - if ((label[0]<65) // before "A" in ASCII - || (label[0] <= 96 && label[0] >= 91) // After "Z" and before "a" in ASCII - || (label[0] > 122) // After "z" in ASCII - && (label[0] != FORWARD_SLASH) // not "/" - && (label[0] != TILDE) // not "~" - ) + int count = label.size(); + bool ok = false; + int FORWARD_SLASH = 47; + int TILDE = 126; + int UNDERSCORE = 95; + int SPACE = 32; + int LEFT_BRACKET = 40; + int RIGHT_BRACKET = 41; + + do { - label.erase(0,1); - count = label.size(); - } - else if(count < 1) - { - label = "/topic"; - count = label.size(); - ok = true; - } - else - { - ok = true; + if ((label[0]<65) // before "A" in ASCII + || (label[0] <= 96 && label[0] >= 91) // After "Z" and before "a" in ASCII + || (label[0] > 122) // After "z" in ASCII + && (label[0] != FORWARD_SLASH) // not "/" + && (label[0] != TILDE) // not "~" + ) + { + label.erase(0,1); + count = label.size(); + } + else if(count < 1) + { + label = "/topic"; + count = label.size(); + ok = true; + } + else + { + ok = true; + } } - } - while (!ok); + while (!ok); - for (int i = 0; i < count; i++) - { - if ((label[i] <= 90 && label[i] >= 65) // A-Z - || (label[i] <= 122 && label[i] >= 97) // a-z - || (label[i] <= 57 && label[i] >= 47) // 0-9 - || label[i] == UNDERSCORE - ) + for (int i = 0; i < count; i++) { - } - else if (label[i] == SPACE) - { - if (label[i-1] == UNDERSCORE) + if ((label[i] <= 90 && label[i] >= 65) // A-Z + || (label[i] <= 122 && label[i] >= 97) // a-z + || (label[i] <= 57 && label[i] >= 47) // 0-9 + || label[i] == UNDERSCORE + ) + { + } + else if (label[i] == SPACE) + { + if (label[i-1] == UNDERSCORE) + { + label.erase(i,1); + i = i-1; + count = label.size(); + } + else + label[i]='_'; + } + + else if(label[i]== LEFT_BRACKET) // in case of '(' + { + if (label[i-1] == 95) + { + label.erase(i,1); + i = i-1; + count = label.size(); + } + else + label[i]='_'; + } + else if (label[i] == RIGHT_BRACKET) // in case of ')' { label.erase(i,1); i = i-1; count = label.size(); } else - label[i]='_'; + { + label.erase(i, 1); + i = i-1; + count = label.size(); + } + } + return (label); + } + + // -- widget's layouts + + void openTabBox(const char* label) + {} + void openHorizontalBox(const char* label) + {} + void openVerticalBox(const char* label) + {} + void closeBox() + {} - else if(label[i]== LEFT_BRACKET) // in case of '(' + // -- active widgets + + void addButton(const char* label, FAUSTFLOAT* zone) + {} + void addCheckButton(const char* label, FAUSTFLOAT* zone) + {} + + void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, + FAUSTFLOAT max, FAUSTFLOAT step) + { + *zone = init; + if (meta_) { - if (label[i-1] == 95) + if (use_slider_values_) { - label.erase(i,1); - i = i-1; - count = label.size(); + callbacks_parameters_[count_-1].min_value = min; + callbacks_parameters_[count_-1].max_value = max; + use_slider_values_ = false; } - else - label[i]='_'; + callbacks_parameters_[count_-1].slider_min = min; + callbacks_parameters_[count_-1].slider_max = max; + meta_ = false; } - else if (label[i] == RIGHT_BRACKET) // in case of ')' + } + + void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, + FAUSTFLOAT max, FAUSTFLOAT step) + { + *zone = init; + if (meta_) { - label.erase(i,1); - i = i-1; - count = label.size(); + if (use_slider_values_) + { + callbacks_parameters_[count_-1].min_value = min; + callbacks_parameters_[count_-1].max_value = max; + use_slider_values_ = false; + } + callbacks_parameters_[count_-1].slider_min = min; + callbacks_parameters_[count_-1].slider_max = max; + meta_ = false; } - else + } + + void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, + FAUSTFLOAT max, FAUSTFLOAT step) + { + *zone=init; + if (meta_) { - label.erase(i, 1); - i = i-1; - count = label.size(); + if (use_slider_values_) + { + callbacks_parameters_[count_-1].min_value = min; + callbacks_parameters_[count_-1].max_value = max; + use_slider_values_ = false; + } + callbacks_parameters_[count_-1].slider_min = min; + callbacks_parameters_[count_-1].slider_max = max; + meta_ = false; } - } - return (label); - } - - // -- widget's layouts - - void openTabBox(const char* label) - {} - void openHorizontalBox(const char* label) - {} - void openVerticalBox(const char* label) - {} - void closeBox() - {} - - // -- active widgets - - void addButton(const char* label, FAUSTFLOAT* zone) - {} - void addCheckButton(const char* label, FAUSTFLOAT* zone) - {} - - void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, - FAUSTFLOAT max, FAUSTFLOAT step) - { - *zone = init; - if (meta_) - { - if (use_slider_values_) - { - callbacks_parameters_[count_-1].min_value = min; - callbacks_parameters_[count_-1].max_value = max; - use_slider_values_ = false; - } - callbacks_parameters_[count_-1].slider_min = min; - callbacks_parameters_[count_-1].slider_max = max; - meta_ = false; - } - } - - void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, - FAUSTFLOAT max, FAUSTFLOAT step) - { - *zone = init; - if (meta_) - { - if (use_slider_values_) - { - callbacks_parameters_[count_-1].min_value = min; - callbacks_parameters_[count_-1].max_value = max; - use_slider_values_ = false; - } - callbacks_parameters_[count_-1].slider_min = min; - callbacks_parameters_[count_-1].slider_max = max; - meta_ = false; - } - } - - void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, - FAUSTFLOAT max, FAUSTFLOAT step) - { - *zone=init; - if (meta_) - { - if (use_slider_values_) - { - callbacks_parameters_[count_-1].min_value = min; - callbacks_parameters_[count_-1].max_value = max; - use_slider_values_ = false; - } - callbacks_parameters_[count_-1].slider_min = min; - callbacks_parameters_[count_-1].slider_max = max; - meta_ = false; - } - } - - // -- passive widgets - - void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - {} - void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - {} + + // -- passive widgets - // -- metadata declarations + void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + {} + void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + {} + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + + // -- metadata declarations - // Structure containing a callback parameters - struct CallbackParams - { - std::string topic_name; - std::string msg_type; - std::string msg_name; - std::string field_name; - FAUSTFLOAT min_value; - FAUSTFLOAT max_value; - FAUSTFLOAT slider_min; - FAUSTFLOAT slider_max; - }; - - // Callback writing the callbacks filekeyboard's arrows - // num is the number of ROS declared metadata - // param_vector is a callbacks parameters structure container - // name is the application name - void callbacksWriter(int num, std::vector param_vector, std::string name) - { - // Get file name - name = name + ".cpp"; - const char* file_name = name.c_str(); - std::fstream file (file_name); - - if (!file.is_open()) - { - std::cout<<"unable to open"< param_vector, std::string name) + { + // Get file name + name = name + ".cpp"; + const char* file_name = name.c_str(); + std::fstream file (file_name); + + if (!file.is_open()) + { + std::cout<<"unable to open"< max)" << std::endl - << "\t\t{" << std::endl - << "\t\t\tvalue = max ;" << std::endl - << "\t\t}" << std::endl - << "\t\tfloat a = (slider_max - slider_min)/(max-min);" << std::endl - << "\t\tfloat b = (slider_max + slider_min - a*(max+min))/2;" << std::endl - << "\t\tvalue = a*value + b;\n" << std::endl - << "\t\treturn value;" << std::endl - << "\t}" << std::endl; - - // ROS specific callbacks - for (int i = 0; i < num; i++) - { - RosCI::CallbackParams parameters = param_vector[i]; - file << "\tvoid callback"<"< zones)\n"<(\"" <> params.min_value; - smax.str(topic_params_[5]); - smax >> params.max_value; - } - else - { - use_slider_values_ = true; - } - - // ... and the structure in a vector - callbacks_parameters_.push_back(params); - - count_++; - meta_ = true; - } - else - { - std::cout<<"Wrong number of parameters in ros metadata declaration !"< getCallbacksParameters() - { - return callbacks_parameters_; - } - - private: - - int count_; - bool use_slider_values_; - bool meta_; - - std::vector topic_params_; - std::vector callbacks_parameters_; + + // New class + file << "class RosCallbacks"<< std::endl + << "{" << std::endl + << "\tpublic : \n" << std::endl + << "\tRosCallbacks(ros::NodeHandle n) : nh_(n)"< max)" << std::endl + << "\t\t{" << std::endl + << "\t\t\tvalue = max ;" << std::endl + << "\t\t}" << std::endl + << "\t\tfloat a = (slider_max - slider_min)/(max-min);" << std::endl + << "\t\tfloat b = (slider_max + slider_min - a*(max+min))/2;" << std::endl + << "\t\tvalue = a*value + b;\n" << std::endl + << "\t\treturn value;" << std::endl + << "\t}" << std::endl; + + // ROS specific callbacks + for (int i = 0; i < num; i++) + { + RosCI::CallbackParams parameters = param_vector[i]; + file << "\tvoid callback"<"< zones)\n"<(\"" <> params.min_value; + smax.str(topic_params_[5]); + smax >> params.max_value; + } + else + { + use_slider_values_ = true; + } + + // ... and the structure in a vector + callbacks_parameters_.push_back(params); + + count_++; + meta_ = true; + } + else + { + std::cout<<"Wrong number of parameters in ros metadata declaration !"< getCallbacksParameters() + { + return callbacks_parameters_; + } + + private: + + int count_; + bool use_slider_values_; + bool meta_; + + std::vector topic_params_; + std::vector callbacks_parameters_; }; #endif diff --git a/source/DEINDUGens/include/faust/gui/RosUI.h b/source/DEINDUGens/include/faust/gui/RosUI.h index 6f9335271c..e84a39ff25 100644 --- a/source/DEINDUGens/include/faust/gui/RosUI.h +++ b/source/DEINDUGens/include/faust/gui/RosUI.h @@ -1,463 +1,487 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + /********************************************** * ROS User Interface * * This interface creates default callbacks -* with default messages types +* with default messages types * It also returns parameters for specific ROS -* callbacks, defined in the RosCallbacks class -* thanks to the RosCI.h and ros-callbacks.cpp -* architecture files +* callbacks, defined in the RosCallbacks class +* thanks to the RosCI.h and ros-callbacks.cpp +* architecture files **********************************************/ + #ifndef FAUST_RosUI_H #define FAUST_RosUI_H -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif +#include +#include #include "faust/gui/UI.h" #include "ros/ros.h" #include "std_msgs/Bool.h" #include "std_msgs/Float32.h" -#include -#include - class RosUI : public UI { public: - RosUI(ros::NodeHandle nh, std::string nspace) : nh_(nh), queue_(10), count_(0), meta_(false), box_names_(0), zones_(0) - { - // Get the namespace's name for default topics - box_names_.push_back(nspace); - }; - - virtual ~RosUI() {} - - // String processing function for topics names - std::string strProcess(std::string label) - { - int count = label.size(); - bool ok = false; - int FORWARD_SLASH = 47; - int TILDE = 126; - int UNDERSCORE = 95; - int SPACE = 32; - int LEFT_BRACKET = 40; - int RIGHT_BRACKET = 41; + RosUI(ros::NodeHandle nh, std::string nspace) : nh_(nh), queue_(10), count_(0), meta_(false), box_names_(0), zones_(0) + { + // Get the namespace's name for default topics + box_names_.push_back(nspace); + }; + + virtual ~RosUI() {} + + // String processing function for topics names + std::string strProcess(std::string label) + { + int count = label.size(); + bool ok = false; + int FORWARD_SLASH = 47; + int TILDE = 126; + int UNDERSCORE = 95; + int SPACE = 32; + int LEFT_BRACKET = 40; + int RIGHT_BRACKET = 41; + + do + { + if ((label[0] < 65) // before "A" in ASCII + || (label[0] <= 96 && label[0] >= 91) // After "Z" and before "a" in ASCII + || (label[0] > 122) // After "z" in ASCII + && (label[0] != FORWARD_SLASH) // not "/" + && (label[0] != TILDE) // not "~" + ) + { + label.erase(0,1); + count = label.size(); + } + else if(count <= 1) + { + label = "/topic"; + count = label.size(); + ok=true; + } + else + { + ok=true; + } + } + while (!ok); + + for (int i=0; i < count; i++) + { + if ((label[i] <= 90 && label[i] >= 65) // A-Z + || (label[i] <= 122 && label[i] >= 97) // a-z + || (label[i] <= 57 && label[i] >= 47) // 0-9 + || label[i] == UNDERSCORE + ) + { + } + else if (label[i] == SPACE) + { + if(label[i-1] == UNDERSCORE) + { + label.erase(i,1); + i=i-1; + count = label.size(); + } + else + label[i] = '_'; + } + + else if(label[i] == LEFT_BRACKET) // in case of '(' + { + if(label[i-1] == 95) + { + label.erase(i,1); + i=i-1; + count = label.size(); + } + else + label[i] = '_'; + } + else if (label[i] == RIGHT_BRACKET) // in case of ')' + { + label.erase(i,1); + i=i-1; + count = label.size(); + } + else + { + label.erase(i, 1); + i=i-1; + count = label.size(); + } + + } + return (label); + } + + // -- default callbacks + + // Default Callbacks : + // Buttons widgets use the std_msgs/Bool message type + // Sliders and Numerical entries use the std_msgs/Float32 message type + + void buttonCallback(const std_msgs::BoolConstPtr& msg, FAUSTFLOAT* zone) + { + *zone = msg->data; + } + + void cButtonCallback(const std_msgs::BoolConstPtr& msg, FAUSTFLOAT* zone) + { + *zone = msg->data; + } + + void sliderCallback(const std_msgs::Float32ConstPtr& msg, FAUSTFLOAT* zone) + { + *zone = msg->data; + } - do + void numEntryCallback(const std_msgs::Float32ConstPtr& msg, FAUSTFLOAT* zone) { - if ((label[0] < 65) // before "A" in ASCII - || (label[0] <= 96 && label[0] >= 91) // After "Z" and before "a" in ASCII - || (label[0] > 122) // After "z" in ASCII - && (label[0] != FORWARD_SLASH) // not "/" - && (label[0] != TILDE) // not "~" - ) + *zone = msg->data; + } + + // -- widget's layouts + // Boxes names are stored in a vector so that the default topics names + // fit to the graphic interface + + void openTabBox(const char* label) + { + std::string L = (std::string)label; + if (L == "0x00") // no box name { - label.erase(0,1); - count = label.size(); + L = ""; } - else if(count <= 1) + + box_names_.push_back(L); + } + + void openHorizontalBox(const char* label) + { + std::string L = (std::string)label; + if (L == "0x00") // no box name { - label = "/topic"; - count = label.size(); - ok=true; + L = ""; } - else + + box_names_.push_back(L); + } + + void openVerticalBox(const char* label) + { + std::string L = (std::string)label; + if (L == "0x00") // no box name { - ok=true; + L = ""; } + + box_names_.push_back(L); + } + + void closeBox() + { + box_names_.pop_back(); } - while (!ok); - for (int i=0; i < count; i++) + // -- active widgets + // Adding a widget is translated into subscribing to a topic + // For each widget, we use default messages types + // Buttons : std_msgs/Bool + // Sliders and Numerical Entries : std_msgs/Float32 + + void addButton(const char* label, FAUSTFLOAT* zone) { - if ((label[i] <= 90 && label[i] >= 65) // A-Z - || (label[i] <= 122 && label[i] >= 97) // a-z - || (label[i] <= 57 && label[i] >= 47) // 0-9 - || label[i] == UNDERSCORE - ) + // Gets the button name and processes it to fit to ROS naming conventions + std::string str = (std::string)label; + std::string my_string = strProcess(str); + + // Builds the topic name from boxes and button names + if (! box_names_.empty()) { + std::string my_name = ""; + + for (int i = 0; i(my_string, queue_, + boost::bind(&RosUI::buttonCallback, this, _1, zone)); + + count_++; + } + void addCheckButton(const char* label, FAUSTFLOAT* zone) + { + // Gets the check button name and processes it to fit to ROS naming conventions + std::string str = (std::string)label; + + std::string my_string = strProcess(str); + + // Builds the topic name from boxes and check button names + if (! box_names_.empty()) { - if(label[i-1] == UNDERSCORE) + std::string my_name = ""; + + for (int i = 0; i(my_string, queue_, + boost::bind(&RosUI::cButtonCallback, this, _1, zone)); + + count_++; + } + void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, + FAUSTFLOAT max, FAUSTFLOAT step) + { + // Gets the vertical slider name and processes it to fit to ROS naming conventions + std::string str = (std::string)label; + + std::string my_string = strProcess(str); + + // Builds the topic name from boxes and vertical slider names - else if(label[i] == LEFT_BRACKET) // in case of '(' + if (! box_names_.empty()) { - if(label[i-1] == 95) + std::string my_name = ""; + + for (int i = 0; i(my_string, queue_, + boost::bind(&RosUI::sliderCallback, this, _1, zone)); + + count_++; + } + void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, + FAUSTFLOAT max, FAUSTFLOAT step) + { + // Gets the horizontal slider name and processes it to fit to ROS naming conventions + std::string str = (std::string)label; + std::string my_string = strProcess(str); + + // Builds the topic name from boxes and horizontal slider names + if (!box_names_.empty()) + { + std::string my_name = ""; + + for (int i = 0 ; i + (my_string, queue_, boost::bind(&RosUI::sliderCallback, this, _1, zone)); + + count_++; } - return (label); - } - - // -- default callbacks - - // Default Callbacks : - // Buttons widgets use the std_msgs/Bool message type - // Sliders and Numerical entries use the std_msgs/Float32 message type - - void buttonCallback(const std_msgs::BoolConstPtr& msg, FAUSTFLOAT* zone) - { - *zone = msg->data; - } - - void cButtonCallback(const std_msgs::BoolConstPtr& msg, FAUSTFLOAT* zone) - { - *zone = msg->data; - } - - void sliderCallback(const std_msgs::Float32ConstPtr& msg, FAUSTFLOAT* zone) - { - *zone = msg->data; - } - - void numEntryCallback(const std_msgs::Float32ConstPtr& msg, FAUSTFLOAT* zone) - { - *zone = msg->data; - } - - // -- widget's layouts - // Boxes names are stored in a vector so that the default topics names - // fit to the graphic interface - - void openTabBox(const char* label) - { - std::string L = (std::string)label; - if (L == "0x00") // no box name - { - L = ""; - } - - box_names_.push_back(L); - } - - void openHorizontalBox(const char* label) - { - std::string L = (std::string)label; - if (L == "0x00") // no box name - { - L = ""; - } - - box_names_.push_back(L); - } - - void openVerticalBox(const char* label) - { - std::string L = (std::string)label; - if (L == "0x00") // no box name - { - L = ""; - } - - box_names_.push_back(L); - } - - void closeBox() - { - box_names_.pop_back(); - } + void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, + FAUSTFLOAT max, FAUSTFLOAT step) + { + // Gets the numerical entry name and processes it to fit to ROS naming conventions + std::string str = (std::string)label; + std::string my_string = strProcess(str); + + // Builds the topic name from boxes and numerical entry names + + if (! box_names_.empty()) + { + std::string my_name = ""; + + for (int i = 0; i(my_string, queue_, + boost::bind(&RosUI::numEntryCallback, this, _1, zone)); + + count_++; + } + + // -- passive widgets + // Nothing to say - not used - // -- active widgets - // Adding a widget is translated into subscribing to a topic - // For each widget, we use default messages types - // Buttons : std_msgs/Bool - // Sliders and Numerical Entries : std_msgs/Float32 + void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + {} + void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + {} + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + + // -- metadata declarations - void addButton(const char* label, FAUSTFLOAT* zone) - { - // Gets the button name and processes it to fit to ROS naming conventions - std::string str = (std::string)label; - std::string my_string = strProcess(str); - - // Builds the topic name from boxes and button names - if (! box_names_.empty()) - { - std::string my_name = ""; - - for (int i = 0; i(my_string, queue_, - boost::bind(&RosUI::buttonCallback, this, _1, zone)); - - count_++; - } - void addCheckButton(const char* label, FAUSTFLOAT* zone) - { - // Gets the check button name and processes it to fit to ROS naming conventions - std::string str = (std::string)label; - - std::string my_string = strProcess(str); - - // Builds the topic name from boxes and check button names - if (! box_names_.empty()) - { - std::string my_name = ""; - - for (int i = 0; i(my_string, queue_, - boost::bind(&RosUI::cButtonCallback, this, _1, zone)); - - count_++; - } - void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, - FAUSTFLOAT max, FAUSTFLOAT step) - { - // Gets the vertical slider name and processes it to fit to ROS naming conventions - std::string str = (std::string)label; - - std::string my_string = strProcess(str); - - // Builds the topic name from boxes and vertical slider names - - if (! box_names_.empty()) - { - std::string my_name = ""; - - for (int i = 0; i(my_string, queue_, - boost::bind(&RosUI::sliderCallback, this, _1, zone)); - - count_++; - } - void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, - FAUSTFLOAT max, FAUSTFLOAT step) - { - // Gets the horizontal slider name and processes it to fit to ROS naming conventions - std::string str = (std::string)label; - std::string my_string = strProcess(str); - - // Builds the topic name from boxes and horizontal slider names - if (!box_names_.empty()) - { - std::string my_name = ""; - - for (int i = 0 ; i - (my_string, queue_, boost::bind(&RosUI::sliderCallback, this, _1, zone)); - - count_++; - } - void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, - FAUSTFLOAT max, FAUSTFLOAT step) - { - // Gets the numerical entry name and processes it to fit to ROS naming conventions - std::string str = (std::string)label; - std::string my_string = strProcess(str); - - // Builds the topic name from boxes and numerical entry names - - if (! box_names_.empty()) - { - std::string my_name = ""; - - for (int i = 0; i(my_string, queue_, - boost::bind(&RosUI::numEntryCallback, this, _1, zone)); - - count_++; - } - - // -- passive widgets - // Nothing to say - not used - - void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - {} - void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - {} - - // -- metadata declarations - - void declare(FAUSTFLOAT* zone, const char* key, const char* val) - { - if (key=="ros") // We do not care if key is not "ros" here - { - // Adds the Faust parameter's address (zone) to a zone vector - // if a ros metadata has been declared - zones_.push_back(zone); - } - } - - // Function returning the number of widgets added - int getParamsCount() - { - return count_; - } - - // Function saying if, yes or no, there is any ROS metadata declared - bool isTrue() - { - if (!zones_.empty()) - { - return true; // yes - } - else - { - return false; // no - } - } - - // Function returning the Faust parameters addresses (zones) - // if these zones correspond to metadata declared topics - std::vector getZones() - { - return zones_; - } - - private: - - ros::NodeHandle nh_; - int queue_; - int count_; - bool meta_; - - std::vector box_names_; - std::vector zones_; + + // Function saying if, yes or no, there is any ROS metadata declared + bool isTrue() + { + if (!zones_.empty()) + { + return true; // yes + } + else + { + return false; // no + } + } + + // Function returning the Faust parameters addresses (zones) + // if these zones correspond to metadata declared topics + std::vector getZones() + { + return zones_; + } + + private: + + ros::NodeHandle nh_; + int queue_; + int count_; + bool meta_; + + std::vector box_names_; + std::vector zones_; }; #endif diff --git a/source/DEINDUGens/include/faust/gui/SimpleParser.h b/source/DEINDUGens/include/faust/gui/SimpleParser.h index 14128ffc4a..e88d87f369 100644 --- a/source/DEINDUGens/include/faust/gui/SimpleParser.h +++ b/source/DEINDUGens/include/faust/gui/SimpleParser.h @@ -1,12 +1,11 @@ /************************************************************************ - ************************************************************************ - FAUST compiler - Copyright (C) 2003-2015 GRAME, Centre National de Creation Musicale + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,9 +13,12 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - ************************************************************************ + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef SIMPLEPARSER_H @@ -36,12 +38,16 @@ #include #include -using namespace std; +#ifndef _WIN32 +# pragma GCC diagnostic ignored "-Wunused-function" +#endif struct itemInfo { std::string type; std::string label; + std::string url; std::string address; + std::string index; std::string init; std::string min; std::string max; @@ -49,77 +55,24 @@ struct itemInfo { std::vector > meta; }; -bool parseMenuList(const char*& p, vector& names, vector& values); -bool parseMenuItem(const char*& p, string& name, double& value); - -void skipBlank(const char*& p); -bool parseChar(const char*& p, char x); -bool parseWord(const char*& p, const char* w); -bool parseString(const char*& p, char quote, string& s); -bool parseSQString(const char*& p, string& s); -bool parseDQString(const char*& p, string& s); -bool parseDouble(const char*& p, double& x); - -// --------------------------------------------------------------------- -// -// IMPLEMENTATION -// -// --------------------------------------------------------------------- - -/** - * @brief parseMenuList, parse a menu list {'low' : 440.0; 'mid' : 880.0; 'hi' : 1760.0}... - * @param p the string to parse, then the remaining string - * @param names the vector of names found - * @param values the vector of values found - * @return true if a menu list was found - */ -inline bool parseMenuList(const char*& p, vector& names, vector& values) -{ - vector tmpnames; - vector tmpvalues; - - const char* saved = p; +/* +// Menu {'low' : 440.0; 'mid' : 880.0; 'hi' : 1760.0} +static bool parseMenuList(const char*& p, std::vector& names, std::vector& values); +static bool parseMenuItem(const char*& p, std::string& name, double& value); - if (parseChar(p, '{')) { - do { - string n; - double v; - if (parseMenuItem(p, n, v)) { - tmpnames.push_back(n); - tmpvalues.push_back(v); - } else { - p = saved; - return false; - } - } while (parseChar(p, ';')); - if (parseChar(p, '}')) { - // we suceeded - names = tmpnames; - values = tmpvalues; - return true; - } - } - p = saved; - return false; -} +// Menu {'foo.wav'; 'bar.wav'} +static bool parseMenuList2(const char*& p, std::vector& names, bool debug = false); +static bool parseMenuItem2(const char*& p, std::string& name); -/** - * @brief parseMenuItem, parse a menu item ...'low':440.0... - * @param p the string to parse, then the remaining string - * @param name the name found - * @param value the value found - * @return true if a nemu item was found - */ -inline bool parseMenuItem(const char*& p, string& name, double& value) -{ - const char* saved = p; - if (parseSQString(p, name) && parseChar(p, ':') && parseDouble(p, value)) { - return true; - } else { - p = saved; - return false; - } -} +static void skipBlank(const char*& p); +static bool parseChar(const char*& p, char x); +static bool parseWord(const char*& p, const char* w); +static bool parseString(const char*& p, char quote, std::string& s); +static bool parseSQString(const char*& p, std::string& s); +static bool parseDQString(const char*& p, std::string& s); +static bool parseDouble(const char*& p, double& x); +static bool parseList(const char*& p, std::vector& items); +*/ // --------------------------------------------------------------------- // Elementary parsers @@ -132,6 +85,15 @@ static bool parseError(const char*& p, const char* errmsg) return true; } +/** + * @brief skipBlank : advance pointer p to the first non blank character + * @param p the string to parse, then the remaining string + */ +static void skipBlank(const char*& p) +{ + while (isspace(*p)) { p++; } +} + // Parse character x, but don't report error if fails static bool tryChar(const char*& p, char x) { @@ -144,22 +106,13 @@ static bool tryChar(const char*& p, char x) } } -/** - * @brief skipBlank : advance pointer p to the first non blank character - * @param p the string to parse, then the remaining string - */ -inline void skipBlank(const char*& p) -{ - while (isspace(*p)) { p++; } -} - /** * @brief parseChar : parse a specific character x * @param p the string to parse, then the remaining string * @param x the character to recognize * @return true if x was found at the begin of p */ -inline bool parseChar(const char*& p, char x) +static bool parseChar(const char*& p, char x) { skipBlank(p); if (x == *p) { @@ -176,10 +129,10 @@ inline bool parseChar(const char*& p, char x) * @param w the string to recognize * @return true if string w was found at the begin of p */ -inline bool parseWord(const char*& p, const char* w) +static bool parseWord(const char*& p, const char* w) { skipBlank(p); - const char* saved = p; + const char* saved = p; // to restore position if we fail while ((*w == *p) && (*w)) {++w; ++p;} if (*w) { p = saved; @@ -195,17 +148,17 @@ inline bool parseWord(const char*& p, const char* w) * @param x the float number found if any * @return true if a float number was found at the begin of p */ -inline bool parseDouble(const char*& p, double& x) +static bool parseDouble(const char*& p, double& x) { double sign = +1.0; // sign of the number double ipart = 0; // integral part of the number double dpart = 0; // decimal part of the number before division double dcoef = 1.0; // division factor for the decimal part - - bool valid = false; // true if the number contains at least one digit + + bool valid = false; // true if the number contains at least one digit skipBlank(p); - const char* saved = p; // to restore position if we fail - + const char* saved = p; // to restore position if we fail + if (parseChar(p, '+')) { sign = 1.0; } else if (parseChar(p, '-')) { @@ -239,12 +192,12 @@ inline bool parseDouble(const char*& p, double& x) * @param s the (unquoted) string found if any * @return true if a string was found at the begin of p */ -inline bool parseString(const char*& p, char quote, string& s) +static bool parseString(const char*& p, char quote, std::string& s) { - string str; + std::string str; skipBlank(p); - - const char* saved = p; + + const char* saved = p; // to restore position if we fail if (*p++ == quote) { while ((*p != 0) && (*p != quote)) { str += *p++; @@ -264,7 +217,7 @@ inline bool parseString(const char*& p, char quote, string& s) * @param s the (unquoted) string found if any * @return true if a string was found at the begin of p */ -inline bool parseSQString(const char*& p, string& s) +static bool parseSQString(const char*& p, std::string& s) { return parseString(p, '\'', s); } @@ -275,11 +228,131 @@ inline bool parseSQString(const char*& p, string& s) * @param s the (unquoted) string found if any * @return true if a string was found at the begin of p */ -inline bool parseDQString(const char*& p, string& s) +static bool parseDQString(const char*& p, std::string& s) { return parseString(p, '"', s); } +// --------------------------------------------------------------------- +// +// IMPLEMENTATION +// +// --------------------------------------------------------------------- + +/** + * @brief parseMenuItem, parse a menu item ...'low':440.0... + * @param p the string to parse, then the remaining string + * @param name the name found + * @param value the value found + * @return true if a nemu item was found + */ +static bool parseMenuItem(const char*& p, std::string& name, double& value) +{ + const char* saved = p; // to restore position if we fail + if (parseSQString(p, name) && parseChar(p, ':') && parseDouble(p, value)) { + return true; + } else { + p = saved; + return false; + } +} + +static bool parseMenuItem2(const char*& p, std::string& name) +{ + const char* saved = p; // to restore position if we fail + if (parseSQString(p, name)) { + return true; + } else { + p = saved; + return false; + } +} + +/** + * @brief parseMenuList, parse a menu list {'low' : 440.0; 'mid' : 880.0; 'hi' : 1760.0}... + * @param p the string to parse, then the remaining string + * @param names the vector of names found + * @param values the vector of values found + * @return true if a menu list was found + */ +static bool parseMenuList(const char*& p, std::vector& names, std::vector& values) +{ + std::vector tmpnames; + std::vector tmpvalues; + const char* saved = p; // to restore position if we fail + + if (parseChar(p, '{')) { + do { + std::string n; + double v; + if (parseMenuItem(p, n, v)) { + tmpnames.push_back(n); + tmpvalues.push_back(v); + } else { + p = saved; + return false; + } + } while (parseChar(p, ';')); + if (parseChar(p, '}')) { + // we suceeded + names = tmpnames; + values = tmpvalues; + return true; + } + } + p = saved; + return false; +} + +static bool parseMenuList2(const char*& p, std::vector& names, bool debug) +{ + std::vector tmpnames; + const char* saved = p; // to restore position if we fail + + if (parseChar(p, '{')) { + do { + std::string n; + if (parseMenuItem2(p, n)) { + tmpnames.push_back(n); + } else { + goto error; + } + } while (parseChar(p, ';')); + if (parseChar(p, '}')) { + // we suceeded + names = tmpnames; + return true; + } + } + +error: + if (debug) { std::cerr << "parseMenuList2 : (" << saved << ") is not a valid list !\n"; } + p = saved; + return false; +} + +/// --------------------------------------------------------------------- +// Parse list of strings +/// --------------------------------------------------------------------- +static bool parseList(const char*& p, std::vector& items) +{ + const char* saved = p; // to restore position if we fail + if (parseChar(p, '[')) { + do { + std::string item; + if (!parseDQString(p, item)) { + p = saved; + return false; + } + items.push_back(item); + } while (tryChar(p, ',')); + return parseChar(p, ']'); + } else { + p = saved; + return false; + } +} + static bool parseMetaData(const char*& p, std::map& metadatas) { std::string metaKey, metaValue; @@ -314,14 +387,14 @@ static bool parseItemMetaData(const char*& p, std::vector& metadatas) +/// --------------------------------------------------------------------- +static bool parseGlobalMetaData(const char*& p, std::string& key, std::string& value, std::map& metadatas, std::vector& items) { if (parseDQString(p, key)) { if (key == "meta") { return parseMetaData(p, metadatas); } else { - return parseChar(p, ':') && parseDQString(p, value); + return parseChar(p, ':') && (parseDQString(p, value) || parseList(p, items)); } } else { return false; @@ -332,11 +405,11 @@ static bool parseGlobalMetaData(const char*& p, std::string& key, std::string& v // Parse gui: // "type" : "...", "label" : "...", "address" : "...", ... // and store the result in uiItems Vector -// +/// --------------------------------------------------------------------- static bool parseUI(const char*& p, std::vector& uiItems, int& numItems) { if (parseChar(p, '{')) { - + std::string label; std::string value; @@ -360,6 +433,13 @@ static bool parseUI(const char*& p, std::vector& uiItems, int& numIte } } + else if (label == "url") { + if (parseChar(p, ':') && parseDQString(p, value)) { + itemInfo* item = uiItems[numItems]; + item->url = value; + } + } + else if (label == "address") { if (parseChar(p, ':') && parseDQString(p, value)) { itemInfo* item = uiItems[numItems]; @@ -367,6 +447,13 @@ static bool parseUI(const char*& p, std::vector& uiItems, int& numIte } } + else if (label == "index") { + if (parseChar(p, ':') && parseDQString(p, value)) { + itemInfo* item = uiItems[numItems]; + item->index = value; + } + } + else if (label == "meta") { itemInfo* item = uiItems[numItems]; if (!parseItemMetaData(p, item->meta)) { @@ -434,19 +521,24 @@ static bool parseUI(const char*& p, std::vector& uiItems, int& numIte // {"metadatas": "...", "ui": [{ "type": "...", "label": "...", "items": [...], "address": "...","init": "...", "min": "...", "max": "...","step": "..."}]} // // and store the result in map Metadatas and vector containing the items of the interface. Returns true if parsing was successfull. -// - -inline bool parseJson(const char*& p, std::map& metadatas, std::vector& uiItems) +/// --------------------------------------------------------------------- +static bool parseJson(const char*& p, std::map& metadatas1, std::map >& metadatas2, std::vector& uiItems) { parseChar(p, '{'); do { std::string key; std::string value; - if (parseGlobalMetaData(p, key, value, metadatas)) { + std::vector items; + if (parseGlobalMetaData(p, key, value, metadatas1, items)) { if (key != "meta") { // keep "name", "inputs", "outputs" key/value pairs - metadatas[key] = value; + if (items.size() > 0) { + metadatas2[key] = items; + items.clear(); + } else { + metadatas1[key] = value; + } } } else if (key == "ui") { int numItems = 0; diff --git a/source/DEINDUGens/include/faust/gui/SoundUI.h b/source/DEINDUGens/include/faust/gui/SoundUI.h new file mode 100644 index 0000000000..e04fdc3ab4 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/SoundUI.h @@ -0,0 +1,156 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2018 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __SoundUI_H__ +#define __SoundUI_H__ + +#include +#include +#include + +#include "faust/gui/DecoratorUI.h" +#include "faust/gui/SimpleParser.h" + +#ifdef __APPLE__ +#include +#endif + +// Always included otherwise -i mode later on will not always include it (with the conditional includes) +#include "faust/gui/Soundfile.h" + +#if defined(JUCE_32BIT) || defined(JUCE_64BIT) +#include "faust/gui/JuceReader.h" +JuceReader gReader; +#elif defined(MEMORY_READER) +#include "faust/gui/MemoryReader.h" +MemoryReader gReader; +#else +#include "faust/gui/LibsndfileReader.h" +LibsndfileReader gReader; +#endif + +// To be used by dsp code if no SoundUI is used +std::vector path_name_list; +Soundfile* defaultsound = gReader.createSoundfile(path_name_list, MAX_CHAN); + +class SoundUI : public GenericUI +{ + + private: + + std::vector fSoundfileDir; // The soundfile directories + std::map fSoundfileMap; // Map to share loaded soundfiles + SoundfileReader* fSoundReader; + + public: + + SoundUI(const std::string& sound_directory = "", SoundfileReader* reader = nullptr) + { + fSoundfileDir.push_back(sound_directory); + fSoundReader = (reader) ? reader : &gReader; + } + + SoundUI(const std::vector& sound_directories, SoundfileReader* reader = nullptr) + :fSoundfileDir(sound_directories) + { + fSoundReader = (reader) ? reader : &gReader; + } + + virtual ~SoundUI() + { + // Delete all soundfiles + std::map::iterator it; + for (it = fSoundfileMap.begin(); it != fSoundfileMap.end(); it++) { + delete (*it).second; + } + } + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* url, Soundfile** sf_zone) + { + const char* saved_url = url; // 'url' is consumed by parseMenuList2 + std::vector file_name_list; + + bool menu = parseMenuList2(url, file_name_list, true); + // If not a list, we have as single file + if (!menu) { file_name_list.push_back(saved_url); } + + // Parse the possible list + if (fSoundfileMap.find(saved_url) == fSoundfileMap.end()) { + // Check all files and get their complete path + std::vector path_name_list = fSoundReader->checkFiles(fSoundfileDir, file_name_list); + // Read them and create the Soundfile + Soundfile* sound_file = fSoundReader->createSoundfile(path_name_list, MAX_CHAN); + if (sound_file) { + fSoundfileMap[saved_url] = sound_file; + } else { + // If failure, use 'defaultsound' + std::cerr << "addSoundfile : soundfile for " << saved_url << " cannot be created !" << std::endl; + *sf_zone = defaultsound; + return; + } + } + + // Get the soundfile + *sf_zone = fSoundfileMap[saved_url]; + } + + static std::string getBinaryPath(std::string folder = "") + { + std::string bundle_path_str; + #ifdef __APPLE__ + CFURLRef bundle_ref = CFBundleCopyBundleURL(CFBundleGetMainBundle()); + if (bundle_ref) { + UInt8 bundle_path[512]; + if (CFURLGetFileSystemRepresentation(bundle_ref, true, bundle_path, 512)) { + bundle_path_str = std::string((char*)bundle_path) + folder; + } + } + #endif + #ifdef ANDROID_DRIVER + bundle_path_str = "/data/data/__CURRENT_ANDROID_PACKAGE__/files"; + #endif + return bundle_path_str; + } + + static std::string getBinaryPathFrom(const std::string& path) + { + std::string bundle_path_str; + #ifdef __APPLE__ + CFBundleRef bundle = CFBundleGetBundleWithIdentifier(CFStringCreateWithCString(kCFAllocatorDefault, path.c_str(), CFStringGetSystemEncoding())); + CFURLRef bundle_ref = CFBundleCopyBundleURL(bundle); + if (bundle_ref) { + UInt8 bundle_path[512]; + if (CFURLGetFileSystemRepresentation(bundle_ref, true, bundle_path, 512)) { + bundle_path_str = std::string((char*)bundle_path); + } + } + #endif + #ifdef ANDROID_DRIVER + bundle_path_str = "/data/data/__CURRENT_ANDROID_PACKAGE__/files"; + #endif + return bundle_path_str; + } +}; + +#endif diff --git a/source/DEINDUGens/include/faust/gui/Soundfile.h b/source/DEINDUGens/include/faust/gui/Soundfile.h new file mode 100644 index 0000000000..0406025e61 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/Soundfile.h @@ -0,0 +1,255 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __Soundfile__ +#define __Soundfile__ + +#include +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#define BUFFER_SIZE 1024 +#define SAMPLE_RATE 44100 +#define MAX_CHAN 64 +#define MAX_SOUNDFILE_PARTS 256 + +#ifdef _MSC_VER +#define PRE_PACKED_STRUCTURE __pragma(pack(push, 1)) +#define POST_PACKED_STRUCTURE \ + ; \ + __pragma(pack(pop)) +#else +#define PRE_PACKED_STRUCTURE +#define POST_PACKED_STRUCTURE __attribute__((__packed__)) +#endif + +/* + The soundfile structure to be used by the DSP code. Soundfile has a MAX_SOUNDFILE_PARTS parts + (even a single soundfile or an empty soundfile). + fLength, fOffset and fSampleRate field are filled accordingly by repeating + the actual parts if needed. + + It has to be 'packed' to that the LLVM backend can correctly access it. + + Index computation: + - p is the current part number [0..MAX_SOUNDFILE_PARTS-1] (must be proved by the type system) + - i is the current position in the part. It will be constrained between [0..length] + - idx(p,i) = fOffset[p] + max(0, min(i, fLength[p])); +*/ + +PRE_PACKED_STRUCTURE +struct Soundfile { + FAUSTFLOAT** fBuffers; + int fLength[MAX_SOUNDFILE_PARTS]; // length of each part + int fSampleRate[MAX_SOUNDFILE_PARTS]; // sample rate of each part + int fOffset[MAX_SOUNDFILE_PARTS]; // offset of each part in the global buffer + int fChannels; // max number of channels of all concatenated files + + Soundfile() + { + fBuffers = NULL; + fChannels = -1; + } + + ~Soundfile() + { + // Free the real channels only + for (int chan = 0; chan < fChannels; chan++) { + delete fBuffers[chan]; + } + delete[] fBuffers; + } + +} POST_PACKED_STRUCTURE; + +/* + The generic soundfile reader. + */ + +class SoundfileReader { + + protected: + + void emptyFile(Soundfile* soundfile, int part, int& offset) + { + soundfile->fLength[part] = BUFFER_SIZE; + soundfile->fSampleRate[part] = SAMPLE_RATE; + soundfile->fOffset[part] = offset; + // Update offset + offset += soundfile->fLength[part]; + } + + Soundfile* createSoundfile(int cur_chan, int length, int max_chan) + { + Soundfile* soundfile = new Soundfile(); + if (!soundfile) { + throw std::bad_alloc(); + } + + soundfile->fBuffers = new FAUSTFLOAT*[max_chan]; + if (!soundfile->fBuffers) { + throw std::bad_alloc(); + } + + for (int chan = 0; chan < cur_chan; chan++) { + soundfile->fBuffers[chan] = new FAUSTFLOAT[length]; + if (!soundfile->fBuffers[chan]) { + throw std::bad_alloc(); + } + memset(soundfile->fBuffers[chan], 0, sizeof(FAUSTFLOAT) * length); + } + + soundfile->fChannels = cur_chan; + return soundfile; + } + + void getBuffersOffset(Soundfile* soundfile, FAUSTFLOAT** buffers, int offset) + { + for (int chan = 0; chan < soundfile->fChannels; chan++) { + buffers[chan] = &soundfile->fBuffers[chan][offset]; + } + } + + // Check if a soundfile exists and return its real path_name + std::string checkFile(const std::vector& sound_directories, const std::string& file_name) + { + if (checkFile(file_name)) { + return file_name; + } else { + for (int i = 0; i < sound_directories.size(); i++) { + std::string path_name = sound_directories[i] + "/" + file_name; + if (checkFile(path_name)) { return path_name; } + } + return ""; + } + } + + // To be implemented by subclasses + + /** + * Check the availability of a sound resource. + * + * @param path_name - the name of the file, or sound resource identified this way + * + * @return true if the sound resource is available, false otherwise. + */ + virtual bool checkFile(const std::string& path_name) = 0; + + /** + * Get the channels and length values of the given sound resource. + * + * @param path_name - the name of the file, or sound resource identified this way + * @param channels - the channels value to be filled with the sound resource number of channels + * @param length - the length value to be filled with the sound resource length in frames + * + */ + virtual void getParamsFile(const std::string& path_name, int& channels, int& length) = 0; + + /** + * Read one sound resource and fill the 'soundfile' structure accordingly + * + * @param path_name - the name of the file, or sound resource identified this way + * @param part - the part number to be filled in the soundfile + * @param offset - the offset value to be incremented with the actual sound resource length in frames + * @param max_chan - the maximum number of mono channels to fill + * + */ + virtual void readFile(Soundfile* soundfile, const std::string& path_name, int part, int& offset, int max_chan) = 0; + + public: + + virtual ~SoundfileReader() {} + + Soundfile* createSoundfile(const std::vector& path_name_list, int max_chan) + { + try { + int cur_chan = 1; // At least one buffer + int total_length = 0; + + // Compute total length and chan max of all files + for (int i = 0; i < path_name_list.size(); i++) { + int chan, length; + if (path_name_list[i] == "__empty_sound__") { + length = BUFFER_SIZE; + chan = 1; + } else { + getParamsFile(path_name_list[i], chan, length); + } + cur_chan = std::max(cur_chan, chan); + total_length += length; + } + + // Complete with empty parts + total_length += (MAX_SOUNDFILE_PARTS - path_name_list.size()) * BUFFER_SIZE; + + // Create the soundfile + Soundfile* soundfile = createSoundfile(cur_chan, total_length, max_chan); + + // Init offset + int offset = 0; + + // Read all files + for (int i = 0; i < path_name_list.size(); i++) { + if (path_name_list[i] == "__empty_sound__") { + emptyFile(soundfile, i, offset); + } else { + readFile(soundfile, path_name_list[i], i, offset, max_chan); + } + } + + // Complete with empty parts + for (int i = path_name_list.size(); i < MAX_SOUNDFILE_PARTS; i++) { + emptyFile(soundfile, i, offset); + } + + // Share the same buffers for all other channels so that we have max_chan channels available + for (int chan = cur_chan; chan < max_chan; chan++) { + soundfile->fBuffers[chan] = soundfile->fBuffers[chan % cur_chan]; + } + + return soundfile; + + } catch (...) { + return NULL; + } + } + + // Check if all soundfiles exist and return their real path_name + std::vector checkFiles(const std::vector& sound_directories, + const std::vector& file_name_list) + { + std::vector path_name_list; + for (int i = 0; i < file_name_list.size(); i++) { + std::string path_name = checkFile(sound_directories, file_name_list[i]); + // If 'path_name' is not found, it is replaced by an empty sound (= silence) + path_name_list.push_back((path_name == "") ? "__empty_sound__" : path_name); + } + return path_name_list; + } + +}; + +#endif diff --git a/source/DEINDUGens/include/faust/gui/UI.h b/source/DEINDUGens/include/faust/gui/UI.h index 2b78e11ff5..3f69157e9f 100644 --- a/source/DEINDUGens/include/faust/gui/UI.h +++ b/source/DEINDUGens/include/faust/gui/UI.h @@ -1,31 +1,28 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -38,6 +35,8 @@ * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -66,6 +65,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations diff --git a/source/DEINDUGens/include/faust/gui/ValueConverter.h b/source/DEINDUGens/include/faust/gui/ValueConverter.h index 40cc13453c..7ed6758786 100644 --- a/source/DEINDUGens/include/faust/gui/ValueConverter.h +++ b/source/DEINDUGens/include/faust/gui/ValueConverter.h @@ -1,27 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __ValueConverter__ @@ -174,7 +171,7 @@ class ValueConverter }; //-------------------------------------------------------------------------------------- -// Linear conversion between ui and faust values +// Linear conversion between ui and Faust values //-------------------------------------------------------------------------------------- class LinearValueConverter : public ValueConverter { @@ -199,7 +196,7 @@ class LinearValueConverter : public ValueConverter }; //-------------------------------------------------------------------------------------- -// Logarithmic conversion between ui and faust values +// Logarithmic conversion between ui and Faust values //-------------------------------------------------------------------------------------- class LogValueConverter : public LinearValueConverter { @@ -207,11 +204,11 @@ class LogValueConverter : public LinearValueConverter public: LogValueConverter(double umin, double umax, double fmin, double fmax) : - LinearValueConverter(umin, umax, log(std::max(DBL_MIN, fmin)), log(std::max(DBL_MIN, fmax))) + LinearValueConverter(umin, umax, log(std::max(DBL_MIN, fmin)), std::log(std::max(DBL_MIN, fmax))) {} - virtual double ui2faust(double x) { return exp(LinearValueConverter::ui2faust(x)); } - virtual double faust2ui(double x) { return LinearValueConverter::faust2ui(log(std::max(x, DBL_MIN))); } + virtual double ui2faust(double x) { return std::exp(LinearValueConverter::ui2faust(x)); } + virtual double faust2ui(double x) { return LinearValueConverter::faust2ui(std::log(std::max(x, DBL_MIN))); } }; @@ -227,8 +224,8 @@ class ExpValueConverter : public LinearValueConverter LinearValueConverter(umin, umax, exp(fmin), exp(fmax)) {} - virtual double ui2faust(double x) { return log(LinearValueConverter::ui2faust(x)); } - virtual double faust2ui(double x) { return LinearValueConverter::faust2ui(exp(x)); } + virtual double ui2faust(double x) { return std::log(LinearValueConverter::ui2faust(x)); } + virtual double faust2ui(double x) { return LinearValueConverter::faust2ui(std::exp(x)); } }; @@ -507,8 +504,8 @@ class ZoneReader private: - FAUSTFLOAT* fZone; - Interpolator fInterpolator; + FAUSTFLOAT* fZone; + Interpolator fInterpolator; public: @@ -516,7 +513,8 @@ class ZoneReader virtual ~ZoneReader() {} - int getValue() { + int getValue() + { if (fZone != 0) { return (int)fInterpolator(*fZone); } else { diff --git a/source/DEINDUGens/include/faust/gui/console.h b/source/DEINDUGens/include/faust/gui/console.h index a88cd14442..a289cfb4cc 100644 --- a/source/DEINDUGens/include/faust/gui/console.h +++ b/source/DEINDUGens/include/faust/gui/console.h @@ -1,64 +1,52 @@ /************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ + #ifndef __faustconsole__ #define __faustconsole__ -#include -#include -#include -#include #include #include #include #include #include +#include +#include +#include +#include #include "faust/gui/UI.h" /****************************************************************************** -******************************************************************************* - - USER INTERFACE - -******************************************************************************* -*******************************************************************************/ + ******************************************************************************* + + USER INTERFACE + + ******************************************************************************* + *******************************************************************************/ struct param { - FAUSTFLOAT* fZone; FAUSTFLOAT fMin; FAUSTFLOAT fMax; - param(FAUSTFLOAT* z, FAUSTFLOAT init, FAUSTFLOAT a, FAUSTFLOAT b) : fZone(z), fMin(a), fMax(b) { *z = init; } + FAUSTFLOAT* fZone; FAUSTFLOAT fMin; FAUSTFLOAT fMax; + param(FAUSTFLOAT* z, FAUSTFLOAT init, FAUSTFLOAT a, FAUSTFLOAT b) : fZone(z), fMin(a), fMax(b) { *z = init; } }; class CMDUI : public UI @@ -67,219 +55,227 @@ class CMDUI : public UI char** fArgv; std::vector fFiles; std::stack fPrefix; - std::map fKeyParam; - - void openAnyBox(const char* label) - { - std::string prefix; - - if (label && label[0]) { - prefix = fPrefix.top() + "-" + label; - } else { - prefix = fPrefix.top(); - } - fPrefix.push(prefix); - } - - std::string simplify(const std::string& src) - { - int i = 0; - int level = 0; - std::string dst; - - while (src[i] ) { - - switch (level) { - - case 0 : - case 1 : - case 2 : - // Skip the begin of the label "--foo-" - // until 3 '-' have been read - if (src[i]=='-') { level++; } - break; - - case 3 : - // copy the content, but skip non alphnum - // and content in parenthesis - switch (src[i]) { - case '(' : - case '[' : - level++; - break; - - case '-' : - dst += '-'; - break; - - default : - if (isalnum(src[i])) { - dst+= tolower(src[i]); - } + std::map fKeyParam; + bool fIgnoreParam; + + void openAnyBox(const char* label) + { + std::string prefix; + + if (label && label[0]) { + prefix = fPrefix.top() + "-" + label; + } else { + prefix = fPrefix.top(); + } + fPrefix.push(prefix); + } + + std::string simplify(const std::string& src) + { + int i = 0; + int level = 0; + std::string dst; + + while (src[i]) { + + switch (level) { + + case 0 : + case 1 : + case 2 : + // Skip the begin of the label "--foo-" + // until 3 '-' have been read + if (src[i]=='-') { level++; } + break; + + case 3 : + // copy the content, but skip non alphnum + // and content in parenthesis + switch (src[i]) { + case '(' : + case '[' : + level++; + break; + + case '-' : + dst += '-'; + break; + + default : + if (isalnum(src[i])) { + dst+= tolower(src[i]); + } } - break; - - default : - // here we are inside parenthesis and - // we skip the content until we are back to - // level 3 - switch (src[i]) { - - case '(' : - case '[' : - level++; - break; - - case ')' : - case ']' : - level--; - break; - - default : - break; - } - - } - i++; - } - return dst; - } - + break; + + default : + // here we are inside parenthesis and + // we skip the content until we are back to + // level 3 + switch (src[i]) { + + case '(' : + case '[' : + level++; + break; + + case ')' : + case ']' : + level--; + break; + + default : + break; + } + + } + i++; + } + return dst; + } + public: - - CMDUI(int argc, char *argv[]) : UI(), fArgc(argc), fArgv(argv) { fPrefix.push("-"); } - virtual ~CMDUI() {} - - void addOption(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max) - { - std::string fullname = "-" + simplify(fPrefix.top() + "-" + label); - fKeyParam.insert(make_pair(fullname, param(zone, init, min, max))); - } - - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { - addOption(label,zone,0,0,1); - } - - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { - addOption(label,zone,0,0,1); - } - - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addOption(label,zone,init,min,max); - } - - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addOption(label,zone,init,min,max); - } - - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addOption(label,zone,init,min,max); - } - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} - - virtual void openTabBox(const char* label) { openAnyBox(label); } - virtual void openHorizontalBox(const char* label) { openAnyBox(label); } - virtual void openVerticalBox(const char* label) { openAnyBox(label); } - - virtual void closeBox() { fPrefix.pop(); } - - virtual void show() {} + + CMDUI(int argc, char* argv[], bool ignore_param = false) : UI(), fArgc(argc), fArgv(argv), fIgnoreParam(ignore_param) { fPrefix.push("-"); } + virtual ~CMDUI() {} + + void addOption(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max) + { + std::string fullname = "-" + simplify(fPrefix.top() + "-" + label); + fKeyParam.insert(make_pair(fullname, param(zone, init, min, max))); + } + + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { + addOption(label,zone,0,0,1); + } + + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { + addOption(label,zone,0,0,1); + } + + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addOption(label,zone,init,min,max); + } + + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addOption(label,zone,init,min,max); + } + + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addOption(label,zone,init,min,max); + } + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + + virtual void openTabBox(const char* label) { openAnyBox(label); } + virtual void openHorizontalBox(const char* label) { openAnyBox(label); } + virtual void openVerticalBox(const char* label) { openAnyBox(label); } + + virtual void closeBox() { fPrefix.pop(); } + + virtual void show() {} virtual bool run() { char c; - printf("Type 'q' to quit\n"); + std::cout << "Type 'q' to quit\n"; while ((c = getchar()) != 'q') { sleep(1); } return true; } - - void printhelp_command() - { - std::map::iterator i; - std::cout << fArgc << "\n"; - std::cout << fArgv[0] << " option list : "; - for (i = fKeyParam.begin(); i != fKeyParam.end(); i++) { - std::cout << "[ " << i->first << " " << i->second.fMin << ".." << i->second.fMax <<" ] "; - } - std::cout << " infile outfile\n"; - } + + void printhelp_command() + { + std::map::iterator i; + std::cout << fArgc << "\n"; + std::cout << fArgv[0] << " option list : "; + for (i = fKeyParam.begin(); i != fKeyParam.end(); i++) { + std::cout << "[ " << i->first << " " << i->second.fMin << ".." << i->second.fMax <<" ] "; + } + std::cout << " infile outfile\n"; + } void printhelp_init() - { - std::map::iterator i; - std::cout << fArgc << "\n"; - std::cout << fArgv[0] << " option list : "; - for (i = fKeyParam.begin(); i != fKeyParam.end(); i++) { - std::cout << "[ " << i->first << " " << i->second.fMin << ".." << i->second.fMax <<" ] "; - } - std::cout << std::endl; - } - - void process_command() - { - std::map::iterator p; - for (int i = 1; i < fArgc; i++) { - if (fArgv[i][0] == '-') { - if ((strcmp(fArgv[i], "-help") == 0) + { + std::map::iterator i; + std::cout << fArgc << "\n"; + std::cout << fArgv[0] << " option list : "; + for (i = fKeyParam.begin(); i != fKeyParam.end(); i++) { + std::cout << "[ " << i->first << " " << i->second.fMin << ".." << i->second.fMax <<" ] "; + } + std::cout << std::endl; + } + + void process_command() + { + std::map::iterator p; + for (int i = 1; i < fArgc; i++) { + if (fArgv[i][0] == '-') { + if ((strcmp(fArgv[i], "-help") == 0) || (strcmp(fArgv[i], "-h") == 0) || (strcmp(fArgv[i], "--help") == 0)) { - printhelp_command(); - exit(1); - } - p = fKeyParam.find(fArgv[i]); - if (p == fKeyParam.end()) { - std::cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; - printhelp_command(); - exit(1); - } - char* end; - *(p->second.fZone) = FAUSTFLOAT(strtod(fArgv[i+1], &end)); - i++; - } else { - fFiles.push_back(fArgv[i]); - } - } - } - - unsigned long files() { return fFiles.size(); } - char* file (int n) { return fFiles[n]; } - - char* input_file () { std::cout << "input file " << fFiles[0] << "\n"; return fFiles[0]; } - char* output_file() { std::cout << "output file " << fFiles[1] << "\n"; return fFiles[1]; } - - void process_init() - { - std::map::iterator p; - for (int i = 1; i < fArgc; i++) { - if (fArgv[i][0] == '-') { + printhelp_command(); + exit(1); + } + p = fKeyParam.find(fArgv[i]); + if (p == fKeyParam.end()) { + if (!fIgnoreParam) { + std::cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; + printhelp_command(); + exit(1); + } + } else { + char* end; + *(p->second.fZone) = FAUSTFLOAT(std::strtod(fArgv[i+1], &end)); + i++; + } + } else { + fFiles.push_back(fArgv[i]); + } + } + } + + unsigned long files() { return fFiles.size(); } + char* file(int n) { return fFiles[n]; } + + char* input_file() { std::cout << "input file " << fFiles[0] << "\n"; return fFiles[0]; } + char* output_file() { std::cout << "output file " << fFiles[1] << "\n"; return fFiles[1]; } + + void process_init() + { + std::map::iterator p; + for (int i = 1; i < fArgc; i++) { + if (fArgv[i][0] == '-') { if ((strcmp(fArgv[i], "-help") == 0) || (strcmp(fArgv[i], "-h") == 0) || (strcmp(fArgv[i], "--help") == 0)) { - printhelp_init(); - exit(1); - } - p = fKeyParam.find(fArgv[i]); - if (p == fKeyParam.end()) { - std::cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; printhelp_init(); - exit(1); - } - char* end; - *(p->second.fZone) = FAUSTFLOAT(strtod(fArgv[i+1], &end)); - i++; - } - } - } + exit(1); + } + p = fKeyParam.find(fArgv[i]); + if (p == fKeyParam.end()) { + std::cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; + printhelp_init(); + exit(1); + } + char* end; + *(p->second.fZone) = FAUSTFLOAT(std::strtod(fArgv[i+1], &end)); + i++; + } + } + } }; #endif diff --git a/source/DEINDUGens/include/faust/gui/httpdUI.h b/source/DEINDUGens/include/faust/gui/httpdUI.h index c1c71ca740..1f0c1ae270 100644 --- a/source/DEINDUGens/include/faust/gui/httpdUI.h +++ b/source/DEINDUGens/include/faust/gui/httpdUI.h @@ -1,27 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __httpdUI__ @@ -29,9 +26,10 @@ #include #include +#include #include "faust/gui/HTTPDControler.h" -#include "faust/gui/UI.h" +#include "faust/gui/DecoratorUI.h" #include "faust/gui/PathBuilder.h" #include "faust/misc.h" @@ -51,6 +49,8 @@ class httpdUIAux { public: + + virtual ~httpdUIAux() {} virtual bool run() = 0; virtual void stop() = 0; @@ -138,6 +138,10 @@ class httpdServerUI : public UI, public httpdUIAux { fCtrl->addnode("hbargraph", tr(label), zone, min, max); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { fCtrl->addnode("vbargraph", tr(label), zone, min, max); } + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} virtual void declare(FAUSTFLOAT*, const char* key, const char* val) { fCtrl->declare(key, val); } @@ -152,7 +156,6 @@ class httpdServerUI : public UI, public httpdUIAux // API from sourcefetcher.hh and compiled in libHTTPDFaust library. int http_fetch(const char *url, char **fileBuf); - /* Use to control a running Faust DSP wrapped with "httpdServerUI". */ @@ -212,7 +215,7 @@ class httpdClientUI : public GUI, public PathBuilder, public httpdUIAux std::string path = (*it).first; http_fetch(path.c_str(), &answer); std::string answer_str = answer; - (*(*it).second) = (FAUSTFLOAT)strtod(answer_str.substr(answer_str.find(' ')).c_str(), NULL); + (*(*it).second) = (FAUSTFLOAT)std::strtod(answer_str.substr(answer_str.find(' ')).c_str(), NULL); // 'http_fetch' result must be deallocated free(answer); } @@ -237,7 +240,7 @@ class httpdClientUI : public GUI, public PathBuilder, public httpdUIAux http_fetch(json_url.c_str(), &json_buffer); if (json_buffer) { fJSON = json_buffer; - fTCPPort = atoi(server_url.substr(server_url.find_last_of(':') + 1).c_str()); + fTCPPort = std::atoi(server_url.substr(server_url.find_last_of(':') + 1).c_str()); // 'http_fetch' result must be deallocated free(json_buffer); std::cout << "Faust httpd client controling server '" << server_url << "'" << std::endl; @@ -339,49 +342,6 @@ class httpdClientUI : public GUI, public PathBuilder, public httpdUIAux Creates a httpdServerUI or httpdClientUI depending of the presence of '-server URL' parameter. */ -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - class httpdUI : public DecoratorUI { diff --git a/source/DEINDUGens/include/faust/gui/jsonfaustui.h b/source/DEINDUGens/include/faust/gui/jsonfaustui.h index 6f437ca603..a14ad9f48d 100644 --- a/source/DEINDUGens/include/faust/gui/jsonfaustui.h +++ b/source/DEINDUGens/include/faust/gui/jsonfaustui.h @@ -36,9 +36,10 @@ template class jsonui; class jsonfaustui : public UI, public Meta { jsonui* fJSON; + public: - jsonfaustui(const char *name, const char* address, int port); + jsonfaustui(const char *name, const char* address, int port); virtual ~jsonfaustui(); //-------------------------------------------- @@ -60,6 +61,9 @@ class jsonfaustui : public UI, public Meta // -- passive widgets void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max); void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, float min, float max); + + // -- soundfiles + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} // -- metadata declarations void declare(FAUSTFLOAT*, const char*, const char*); @@ -68,7 +72,7 @@ class jsonfaustui : public UI, public Meta // additionnal methods (not part of UI) //-------------------------------------------- void numInput(int n); // should be called with the inputs number - void numOutput(int n); // should be called with the outputs number + void numOutput(int n); // should be called with the outputs number void declare(const char* , const char*); // global metadata declaration //-------------------------------------------- diff --git a/source/DEINDUGens/include/faust/gui/meta.h b/source/DEINDUGens/include/faust/gui/meta.h index 410c8c6103..858f1ba9f1 100644 --- a/source/DEINDUGens/include/faust/gui/meta.h +++ b/source/DEINDUGens/include/faust/gui/meta.h @@ -1,24 +1,26 @@ /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ diff --git a/source/DEINDUGens/include/faust/gui/qrcodegen.h b/source/DEINDUGens/include/faust/gui/qrcodegen.h new file mode 100644 index 0000000000..0d610305cc --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/qrcodegen.h @@ -0,0 +1,284 @@ +/* + * QR Code generator library (C) + * + * Copyright (c) Project Nayuki. (MIT License) + * https://www.nayuki.io/page/qr-code-generator-library + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * - The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * - The Software is provided "as is", without warranty of any kind, express or + * implied, including but not limited to the warranties of merchantability, + * fitness for a particular purpose and noninfringement. In no event shall the + * authors or copyright holders be liable for any claim, damages or other + * liability, whether in an action of contract, tort or otherwise, arising from, + * out of or in connection with the Software or the use or other dealings in the + * Software. + */ + +#ifndef qrcodegen_h +#define qrcodegen_h + +#include +#include +#include + +#ifdef WIN32 +# pragma warning (disable: 4100) +#else +# pragma GCC diagnostic ignored "-Wunused-function" +#endif + +/*---- Enum and struct types----*/ + +/* + * The error correction level used in a QR Code symbol. + */ +enum qrcodegen_Ecc { + qrcodegen_Ecc_LOW = 0, + qrcodegen_Ecc_MEDIUM, + qrcodegen_Ecc_QUARTILE, + qrcodegen_Ecc_HIGH, +}; + + +/* + * The mask pattern used in a QR Code symbol. + */ +enum qrcodegen_Mask { + // A special value to tell the QR Code encoder to + // automatically select an appropriate mask pattern + qrcodegen_Mask_AUTO = -1, + // The eight actual mask patterns + qrcodegen_Mask_0 = 0, + qrcodegen_Mask_1, + qrcodegen_Mask_2, + qrcodegen_Mask_3, + qrcodegen_Mask_4, + qrcodegen_Mask_5, + qrcodegen_Mask_6, + qrcodegen_Mask_7, +}; + + +/* + * The mode field of a segment. + */ +enum qrcodegen_Mode { + qrcodegen_Mode_NUMERIC, + qrcodegen_Mode_ALPHANUMERIC, + qrcodegen_Mode_BYTE, + qrcodegen_Mode_KANJI, + qrcodegen_Mode_ECI, +}; + + +/* + * A segment of user/application data that a QR Code symbol can convey. + * Each segment has a mode, a character count, and character/general data that is + * already encoded as a sequence of bits. The maximum allowed bit length is 32767, + * because even the largest QR Code (version 40) has only 31329 modules. + */ +struct qrcodegen_Segment { + // The mode indicator for this segment. + enum qrcodegen_Mode mode; + + // The length of this segment's unencoded data. Always in the range [0, 32767]. + // For numeric, alphanumeric, and kanji modes, this measures in Unicode code points. + // For byte mode, this measures in bytes (raw binary data, text in UTF-8, or other encodings). + // For ECI mode, this is always zero. + int numChars; + + // The data bits of this segment, packed in bitwise big endian. + // Can be null if the bit length is zero. + uint8_t *data; + + // The number of valid data bits used in the buffer. Requires + // 0 <= bitLength <= 32767, and bitLength <= (capacity of data array) * 8. + int bitLength; +}; + + + +/*---- Macro constants and functions ----*/ + +// The minimum and maximum defined QR Code version numbers for Model 2. +#define qrcodegen_VERSION_MIN 1 +#define qrcodegen_VERSION_MAX 40 + +// Calculates the number of bytes needed to store any QR Code up to and including the given version number, +// as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];' +// can store any single QR Code from version 1 to 25, inclusive. +// Requires qrcodegen_VERSION_MIN <= n <= qrcodegen_VERSION_MAX. +#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) * 4 + 17) * ((n) * 4 + 17) + 7) / 8 + 1) + +// The worst-case number of bytes needed to store one QR Code, up to and including +// version 40. This value equals 3918, which is just under 4 kilobytes. +// Use this more convenient value to avoid calculating tighter memory bounds for buffers. +#define qrcodegen_BUFFER_LEN_MAX qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX) + +#ifdef __cplusplus +extern "C" { +#endif + +/*---- Functions to generate QR Codes ----*/ + +/* + * Encodes the given text string to a QR Code symbol, returning true if encoding succeeded. + * If the data is too long to fit in any version in the given range + * at the given ECC level, then false is returned. + * - The input text must be encoded in UTF-8 and contain no NULs. + * - The variables ecl and mask must correspond to enum constant values. + * - Requires 1 <= minVersion <= maxVersion <= 40. + * - The arrays tempBuffer and qrcode must each have a length + * of at least qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion). + * - After the function returns, tempBuffer contains no useful data. + * - If successful, the resulting QR Code may use numeric, + * alphanumeric, or byte mode to encode the text. + * - In the most optimistic case, a QR Code at version 40 with low ECC + * can hold any UTF-8 string up to 2953 bytes, or any alphanumeric string + * up to 4296 characters, or any digit string up to 7089 characters. + * These numbers represent the hard upper limit of the QR Code standard. + * - Please consult the QR Code specification for information on + * data capacities per version, ECC level, and text encoding mode. + */ +static bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[], + enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl); + + +/* + * Encodes the given binary data to a QR Code symbol, returning true if encoding succeeded. + * If the data is too long to fit in any version in the given range + * at the given ECC level, then false is returned. + * - The input array range dataAndTemp[0 : dataLen] should normally be + * valid UTF-8 text, but is not required by the QR Code standard. + * - The variables ecl and mask must correspond to enum constant values. + * - Requires 1 <= minVersion <= maxVersion <= 40. + * - The arrays dataAndTemp and qrcode must each have a length + * of at least qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion). + * - After the function returns, the contents of dataAndTemp may have changed, + * and does not represent useful data anymore. + * - If successful, the resulting QR Code will use byte mode to encode the data. + * - In the most optimistic case, a QR Code at version 40 with low ECC can hold any byte + * sequence up to length 2953. This is the hard upper limit of the QR Code standard. + * - Please consult the QR Code specification for information on + * data capacities per version, ECC level, and text encoding mode. + */ +static bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[], + enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl); + + +/* + * Tests whether the given string can be encoded as a segment in alphanumeric mode. + */ +static bool qrcodegen_isAlphanumeric(const char *text); + + +/* + * Tests whether the given string can be encoded as a segment in numeric mode. + */ +static bool qrcodegen_isNumeric(const char *text); + + +/* + * Returns the number of bytes (uint8_t) needed for the data buffer of a segment + * containing the given number of characters using the given mode. Notes: + * - Returns SIZE_MAX on failure, i.e. numChars > INT16_MAX or + * the number of needed bits exceeds INT16_MAX (i.e. 32767). + * - Otherwise, all valid results are in the range [0, ceil(INT16_MAX / 8)], i.e. at most 4096. + * - It is okay for the user to allocate more bytes for the buffer than needed. + * - For byte mode, numChars measures the number of bytes, not Unicode code points. + * - For ECI mode, numChars must be 0, and the worst-case number of bytes is returned. + * An actual ECI segment can have shorter data. For non-ECI modes, the result is exact. + */ +static size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars); + + +/* + * Returns a segment representing the given binary data encoded in byte mode. + */ +static struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]); + + +/* + * Returns a segment representing the given string of decimal digits encoded in numeric mode. + */ +static struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[]); + + +/* + * Returns a segment representing the given text string encoded in alphanumeric mode. + * The characters allowed are: 0 to 9, A to Z (uppercase only), space, + * dollar, percent, asterisk, plus, hyphen, period, slash, colon. + */ +static struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[]); + + +/* + * Returns a segment representing an Extended Channel Interpretation + * (ECI) designator with the given assignment value. + */ +static struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]); + + +/* + * Renders a QR Code symbol representing the given data segments at the given error correction + * level or higher. The smallest possible QR Code version is automatically chosen for the output. + * Returns true if QR Code creation succeeded, or false if the data is too long to fit in any version. + * This function allows the user to create a custom sequence of segments that switches + * between modes (such as alphanumeric and binary) to encode text more efficiently. + * This function is considered to be lower level than simply encoding text or binary data. + * To save memory, the segments' data buffers can alias/overlap tempBuffer, and will + * result in them being clobbered, but the QR Code output will still be correct. + * But the qrcode array must not overlap tempBuffer or any segment's data buffer. + */ +static bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len, + enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[]); + + +/* + * Renders a QR Code symbol representing the given data segments with the given encoding parameters. + * Returns true if QR Code creation succeeded, or false if the data is too long to fit in the range of versions. + * The smallest possible QR Code version within the given range is automatically chosen for the output. + * This function allows the user to create a custom sequence of segments that switches + * between modes (such as alphanumeric and binary) to encode text more efficiently. + * This function is considered to be lower level than simply encoding text or binary data. + * To save memory, the segments' data buffers can alias/overlap tempBuffer, and will + * result in them being clobbered, but the QR Code output will still be correct. + * But the qrcode array must not overlap tempBuffer or any segment's data buffer. + */ +static bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl, + int minVersion, int maxVersion, int mask, bool boostEcl, uint8_t tempBuffer[], uint8_t qrcode[]); + + +/*---- Functions to extract raw data from QR Codes ----*/ + +/* + * Returns the side length of the given QR Code, assuming that encoding succeeded. + * The result is in the range [21, 177]. Note that the length of the array buffer + * is related to the side length - every 'uint8_t qrcode[]' must have length at least + * qrcodegen_BUFFER_LEN_FOR_VERSION(version), which equals ceil(size^2 / 8 + 1). + */ +static int qrcodegen_getSize(const uint8_t qrcode[]); + + +/* + * Returns the color of the module (pixel) at the given coordinates, which is either + * false for white or true for black. The top left corner has the coordinates (x=0, y=0). + * If the given coordinates are out of bounds, then false (white) is returned. + */ +static bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y); + +#ifdef __cplusplus +} +#endif + +// includes the implementation +#include "faust/gui/qrcodegen.impl.h" + +#endif diff --git a/source/DEINDUGens/include/faust/gui/qrcodegen.impl.h b/source/DEINDUGens/include/faust/gui/qrcodegen.impl.h new file mode 100644 index 0000000000..48f7ced549 --- /dev/null +++ b/source/DEINDUGens/include/faust/gui/qrcodegen.impl.h @@ -0,0 +1,1023 @@ +/* + * QR Code generator library (C) + * + * Copyright (c) Project Nayuki. (MIT License) + * https://www.nayuki.io/page/qr-code-generator-library + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * - The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * - The Software is provided "as is", without warranty of any kind, express or + * implied, including but not limited to the warranties of merchantability, + * fitness for a particular purpose and noninfringement. In no event shall the + * authors or copyright holders be liable for any claim, damages or other + * liability, whether in an action of contract, tort or otherwise, arising from, + * out of or in connection with the Software or the use or other dealings in the + * Software. + */ + +#include +#include +#include +#include + +#ifndef QRCODEGEN_TEST + #define testable static // Keep functions private +#else + // Expose private functions + #ifndef __cplusplus + #define testable + #else + // Needed for const variables because they are treated as implicitly 'static' in C++ + #define testable extern + #endif +#endif + + +/*---- Forward declarations for private functions ----*/ + +// Regarding all public and private functions defined in this source file: +// - They require all pointer/array arguments to be not null. +// - They only read input scalar/array arguments, write to output pointer/array +// arguments, and return scalar values; they are "pure" functions. +// - They don't read mutable global variables or write to any global variables. +// - They don't perform I/O, read the clock, print to console, etc. +// - They allocate a small and constant amount of stack memory. +// - They don't allocate or free any memory on the heap. +// - They don't recurse or mutually recurse. All the code +// could be inlined into the top-level public functions. +// - They run in at most quadratic time with respect to input arguments. +// Most functions run in linear time, and some in constant time. +// There are no unbounded loops or non-obvious termination conditions. +// - They are completely thread-safe if the caller does not give the +// same writable buffer to concurrent calls to these functions. + +testable void appendBitsToBuffer(unsigned int val, int numBits, uint8_t buffer[], int *bitLen); + +testable void appendErrorCorrection(uint8_t data[], int version, enum qrcodegen_Ecc ecl, uint8_t result[]); +testable int getNumDataCodewords(int version, enum qrcodegen_Ecc ecl); +testable int getNumRawDataModules(int version); + +testable void calcReedSolomonGenerator(int degree, uint8_t result[]); +testable void calcReedSolomonRemainder(const uint8_t data[], int dataLen, + const uint8_t generator[], int degree, uint8_t result[]); +testable uint8_t finiteFieldMultiply(uint8_t x, uint8_t y); + +testable void initializeFunctionModules(int version, uint8_t qrcode[]); +static void drawWhiteFunctionModules(uint8_t qrcode[], int version); +static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]); +testable int getAlignmentPatternPositions(int version, uint8_t result[7]); +static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]); + +static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]); +static void applyMask(const uint8_t functionModules[], uint8_t qrcode[], enum qrcodegen_Mask mask); +static long getPenaltyScore(const uint8_t qrcode[]); + +testable bool getModule(const uint8_t qrcode[], int x, int y); +testable void setModule(uint8_t qrcode[], int x, int y, bool isBlack); +testable void setModuleBounded(uint8_t qrcode[], int x, int y, bool isBlack); + +testable int calcSegmentBitLength(enum qrcodegen_Mode mode, size_t numChars); +testable int getTotalBits(const struct qrcodegen_Segment segs[], size_t len, int version); +static int numCharCountBits(enum qrcodegen_Mode mode, int version); + + + +/*---- Private tables of constants ----*/ + +// For checking text and encoding segments. +static const char *ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"; + +// For generating error correction codes. +testable const int8_t ECC_CODEWORDS_PER_BLOCK[4][41] = { + // Version: (note that index 0 is for padding, and is set to an illegal value) + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level + {-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Low + {-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, // Medium + {-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Quartile + {-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // High +}; + +// For generating error correction codes. +testable const int8_t NUM_ERROR_CORRECTION_BLOCKS[4][41] = { + // Version: (note that index 0 is for padding, and is set to an illegal value) + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level + {-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25}, // Low + {-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49}, // Medium + {-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68}, // Quartile + {-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81}, // High +}; + +// For automatic mask pattern selection. +static const int PENALTY_N1 = 3; +static const int PENALTY_N2 = 3; +static const int PENALTY_N3 = 40; +static const int PENALTY_N4 = 10; + + + +/*---- High-level QR Code encoding functions ----*/ + +// Public function - see documentation comment in header file. +static bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[], + enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) { + + size_t textLen = strlen(text); + if (textLen == 0) + return qrcodegen_encodeSegmentsAdvanced(NULL, 0, ecl, minVersion, maxVersion, mask, boostEcl, tempBuffer, qrcode); + size_t bufLen = qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion); + + struct qrcodegen_Segment seg; + if (qrcodegen_isNumeric(text)) { + if (qrcodegen_calcSegmentBufferSize(qrcodegen_Mode_NUMERIC, textLen) > bufLen) + goto fail; + seg = qrcodegen_makeNumeric(text, tempBuffer); + } else if (qrcodegen_isAlphanumeric(text)) { + if (qrcodegen_calcSegmentBufferSize(qrcodegen_Mode_ALPHANUMERIC, textLen) > bufLen) + goto fail; + seg = qrcodegen_makeAlphanumeric(text, tempBuffer); + } else { + if (textLen > bufLen) + goto fail; + for (size_t i = 0; i < textLen; i++) + tempBuffer[i] = (uint8_t)text[i]; + seg.mode = qrcodegen_Mode_BYTE; + seg.bitLength = calcSegmentBitLength(seg.mode, textLen); + if (seg.bitLength == -1) + goto fail; + seg.numChars = (int)textLen; + seg.data = tempBuffer; + } + return qrcodegen_encodeSegmentsAdvanced(&seg, 1, ecl, minVersion, maxVersion, mask, boostEcl, tempBuffer, qrcode); + +fail: + qrcode[0] = 0; // Set size to invalid value for safety + return false; +} + + +// Public function - see documentation comment in header file. +static bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[], + enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) { + + struct qrcodegen_Segment seg; + seg.mode = qrcodegen_Mode_BYTE; + seg.bitLength = calcSegmentBitLength(seg.mode, dataLen); + if (seg.bitLength == -1) { + qrcode[0] = 0; // Set size to invalid value for safety + return false; + } + seg.numChars = (int)dataLen; + seg.data = dataAndTemp; + return qrcodegen_encodeSegmentsAdvanced(&seg, 1, ecl, minVersion, maxVersion, mask, boostEcl, dataAndTemp, qrcode); +} + + +// Appends the given sequence of bits to the given byte-based bit buffer, increasing the bit length. +testable void appendBitsToBuffer(unsigned int val, int numBits, uint8_t buffer[], int *bitLen) { + assert(0 <= numBits && numBits <= 16 && (unsigned long)val >> numBits == 0); + for (int i = numBits - 1; i >= 0; i--, (*bitLen)++) + buffer[*bitLen >> 3] |= ((val >> i) & 1) << (7 - (*bitLen & 7)); +} + + + +/*---- Error correction code generation functions ----*/ + +// Appends error correction bytes to each block of the given data array, then interleaves bytes +// from the blocks and stores them in the result array. data[0 : rawCodewords - totalEcc] contains +// the input data. data[rawCodewords - totalEcc : rawCodewords] is used as a temporary work area +// and will be clobbered by this function. The final answer is stored in result[0 : rawCodewords]. +testable void appendErrorCorrection(uint8_t data[], int version, enum qrcodegen_Ecc ecl, uint8_t result[]) { + // Calculate parameter numbers + assert(0 <= (int)ecl && (int)ecl < 4 && qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX); + int numBlocks = NUM_ERROR_CORRECTION_BLOCKS[(int)ecl][version]; + int blockEccLen = ECC_CODEWORDS_PER_BLOCK[(int)ecl][version]; + int rawCodewords = getNumRawDataModules(version) / 8; + int dataLen = rawCodewords - blockEccLen * numBlocks; + int numShortBlocks = numBlocks - rawCodewords % numBlocks; + int shortBlockDataLen = rawCodewords / numBlocks - blockEccLen; + + // Split data into blocks and append ECC after all data + uint8_t generator[30]; + calcReedSolomonGenerator(blockEccLen, generator); + for (int i = 0, j = dataLen, k = 0; i < numBlocks; i++) { + int blockLen = shortBlockDataLen; + if (i >= numShortBlocks) + blockLen++; + calcReedSolomonRemainder(&data[k], blockLen, generator, blockEccLen, &data[j]); + j += blockEccLen; + k += blockLen; + } + + // Interleave (not concatenate) the bytes from every block into a single sequence + for (int i = 0, k = 0; i < numBlocks; i++) { + for (int j = 0, l = i; j < shortBlockDataLen; j++, k++, l += numBlocks) + result[l] = data[k]; + if (i >= numShortBlocks) + k++; + } + for (int i = numShortBlocks, k = (numShortBlocks + 1) * shortBlockDataLen, l = numBlocks * shortBlockDataLen; + i < numBlocks; i++, k += shortBlockDataLen + 1, l++) + result[l] = data[k]; + for (int i = 0, k = dataLen; i < numBlocks; i++) { + for (int j = 0, l = dataLen + i; j < blockEccLen; j++, k++, l += numBlocks) + result[l] = data[k]; + } +} + + +// Returns the number of 8-bit codewords that can be used for storing data (not ECC), +// for the given version number and error correction level. The result is in the range [9, 2956]. +testable int getNumDataCodewords(int version, enum qrcodegen_Ecc ecl) { + int v = version, e = (int)ecl; + assert(0 <= e && e < 4 && qrcodegen_VERSION_MIN <= v && v <= qrcodegen_VERSION_MAX); + return getNumRawDataModules(v) / 8 - ECC_CODEWORDS_PER_BLOCK[e][v] * NUM_ERROR_CORRECTION_BLOCKS[e][v]; +} + + +// Returns the number of data bits that can be stored in a QR Code of the given version number, after +// all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8. +// The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table. +testable int getNumRawDataModules(int version) { + assert(qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX); + int result = (16 * version + 128) * version + 64; + if (version >= 2) { + int numAlign = version / 7 + 2; + result -= (25 * numAlign - 10) * numAlign - 55; + if (version >= 7) + result -= 18 * 2; // Subtract version information + } + return result; +} + + + +/*---- Reed-Solomon ECC generator functions ----*/ + +// Calculates the Reed-Solomon generator polynomial of the given degree, storing in result[0 : degree]. +testable void calcReedSolomonGenerator(int degree, uint8_t result[]) { + // Start with the monomial x^0 + assert(1 <= degree && degree <= 30); + memset(result, 0, degree * sizeof(result[0])); + result[degree - 1] = 1; + + // Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}), + // drop the highest term, and store the rest of the coefficients in order of descending powers. + // Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D). + uint8_t root = 1; + for (int i = 0; i < degree; i++) { + // Multiply the current product by (x - r^i) + for (int j = 0; j < degree; j++) { + result[j] = finiteFieldMultiply(result[j], root); + if (j + 1 < degree) + result[j] ^= result[j + 1]; + } + root = finiteFieldMultiply(root, 0x02); + } +} + + +// Calculates the remainder of the polynomial data[0 : dataLen] when divided by the generator[0 : degree], where all +// polynomials are in big endian and the generator has an implicit leading 1 term, storing the result in result[0 : degree]. +testable void calcReedSolomonRemainder(const uint8_t data[], int dataLen, + const uint8_t generator[], int degree, uint8_t result[]) { + + // Perform polynomial division + assert(1 <= degree && degree <= 30); + memset(result, 0, degree * sizeof(result[0])); + for (int i = 0; i < dataLen; i++) { + uint8_t factor = data[i] ^ result[0]; + memmove(&result[0], &result[1], (degree - 1) * sizeof(result[0])); + result[degree - 1] = 0; + for (int j = 0; j < degree; j++) + result[j] ^= finiteFieldMultiply(generator[j], factor); + } +} + + +// Returns the product of the two given field elements modulo GF(2^8/0x11D). +// All inputs are valid. This could be implemented as a 256*256 lookup table. +testable uint8_t finiteFieldMultiply(uint8_t x, uint8_t y) { + // Russian peasant multiplication + uint8_t z = 0; + for (int i = 7; i >= 0; i--) { + z = (z << 1) ^ ((z >> 7) * 0x11D); + z ^= ((y >> i) & 1) * x; + } + return z; +} + + + +/*---- Drawing function modules ----*/ + +// Clears the given QR Code grid with white modules for the given +// version's size, then marks every function module as black. +testable void initializeFunctionModules(int version, uint8_t qrcode[]) { + // Initialize QR Code + int qrsize = version * 4 + 17; + memset(qrcode, 0, ((qrsize * qrsize + 7) / 8 + 1) * sizeof(qrcode[0])); + qrcode[0] = (uint8_t)qrsize; + + // Fill horizontal and vertical timing patterns + fillRectangle(6, 0, 1, qrsize, qrcode); + fillRectangle(0, 6, qrsize, 1, qrcode); + + // Fill 3 finder patterns (all corners except bottom right) and format bits + fillRectangle(0, 0, 9, 9, qrcode); + fillRectangle(qrsize - 8, 0, 8, 9, qrcode); + fillRectangle(0, qrsize - 8, 9, 8, qrcode); + + // Fill numerous alignment patterns + uint8_t alignPatPos[7] = {0}; + int numAlign = getAlignmentPatternPositions(version, alignPatPos); + for (int i = 0; i < numAlign; i++) { + for (int j = 0; j < numAlign; j++) { + if ((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0)) + continue; // Skip the three finder corners + else + fillRectangle(alignPatPos[i] - 2, alignPatPos[j] - 2, 5, 5, qrcode); + } + } + + // Fill version blocks + if (version >= 7) { + fillRectangle(qrsize - 11, 0, 3, 6, qrcode); + fillRectangle(0, qrsize - 11, 6, 3, qrcode); + } +} + + +// Draws white function modules and possibly some black modules onto the given QR Code, without changing +// non-function modules. This does not draw the format bits. This requires all function modules to be previously +// marked black (namely by initializeFunctionModules()), because this may skip redrawing black function modules. +static void drawWhiteFunctionModules(uint8_t qrcode[], int version) { + // Draw horizontal and vertical timing patterns + int qrsize = qrcodegen_getSize(qrcode); + for (int i = 7; i < qrsize - 7; i += 2) { + setModule(qrcode, 6, i, false); + setModule(qrcode, i, 6, false); + } + + // Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules) + for (int i = -4; i <= 4; i++) { + for (int j = -4; j <= 4; j++) { + int dist = abs(i); + if (abs(j) > dist) + dist = abs(j); + if (dist == 2 || dist == 4) { + setModuleBounded(qrcode, 3 + j, 3 + i, false); + setModuleBounded(qrcode, qrsize - 4 + j, 3 + i, false); + setModuleBounded(qrcode, 3 + j, qrsize - 4 + i, false); + } + } + } + + // Draw numerous alignment patterns + uint8_t alignPatPos[7] = {0}; + int numAlign = getAlignmentPatternPositions(version, alignPatPos); + for (int i = 0; i < numAlign; i++) { + for (int j = 0; j < numAlign; j++) { + if ((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0)) + continue; // Skip the three finder corners + else { + for (int k = -1; k <= 1; k++) { + for (int l = -1; l <= 1; l++) + setModule(qrcode, alignPatPos[i] + l, alignPatPos[j] + k, k == 0 && l == 0); + } + } + } + } + + // Draw version blocks + if (version >= 7) { + // Calculate error correction code and pack bits + int rem = version; // version is uint6, in the range [7, 40] + for (int i = 0; i < 12; i++) + rem = (rem << 1) ^ ((rem >> 11) * 0x1F25); + long data = (long)version << 12 | rem; // uint18 + assert(data >> 18 == 0); + + // Draw two copies + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 3; j++) { + int k = qrsize - 11 + j; + setModule(qrcode, k, i, (data & 1) != 0); + setModule(qrcode, i, k, (data & 1) != 0); + data >>= 1; + } + } + } +} + + +// Draws two copies of the format bits (with its own error correction code) based +// on the given mask and error correction level. This always draws all modules of +// the format bits, unlike drawWhiteFunctionModules() which might skip black modules. +static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]) { + // Calculate error correction code and pack bits + assert(0 <= (int)mask && (int)mask <= 7); + int data = -1; // Dummy value + switch (ecl) { + case qrcodegen_Ecc_LOW : data = 1; break; + case qrcodegen_Ecc_MEDIUM : data = 0; break; + case qrcodegen_Ecc_QUARTILE: data = 3; break; + case qrcodegen_Ecc_HIGH : data = 2; break; + default: assert(false); + } + data = data << 3 | (int)mask; // ecl-derived value is uint2, mask is uint3 + int rem = data; + for (int i = 0; i < 10; i++) + rem = (rem << 1) ^ ((rem >> 9) * 0x537); + data = data << 10 | rem; + data ^= 0x5412; // uint15 + assert(data >> 15 == 0); + + // Draw first copy + for (int i = 0; i <= 5; i++) + setModule(qrcode, 8, i, ((data >> i) & 1) != 0); + setModule(qrcode, 8, 7, ((data >> 6) & 1) != 0); + setModule(qrcode, 8, 8, ((data >> 7) & 1) != 0); + setModule(qrcode, 7, 8, ((data >> 8) & 1) != 0); + for (int i = 9; i < 15; i++) + setModule(qrcode, 14 - i, 8, ((data >> i) & 1) != 0); + + // Draw second copy + int qrsize = qrcodegen_getSize(qrcode); + for (int i = 0; i <= 7; i++) + setModule(qrcode, qrsize - 1 - i, 8, ((data >> i) & 1) != 0); + for (int i = 8; i < 15; i++) + setModule(qrcode, 8, qrsize - 15 + i, ((data >> i) & 1) != 0); + setModule(qrcode, 8, qrsize - 8, true); +} + + +// Calculates the positions of alignment patterns in ascending order for the given version number, +// storing them to the given array and returning an array length in the range [0, 7]. +testable int getAlignmentPatternPositions(int version, uint8_t result[7]) { + if (version == 1) + return 0; + int numAlign = version / 7 + 2; + int step; + if (version != 32) { + // ceil((size - 13) / (2*numAlign - 2)) * 2 + step = (version * 4 + numAlign * 2 + 1) / (2 * numAlign - 2) * 2; + } else // C-C-C-Combo breaker! + step = 26; + for (int i = numAlign - 1, pos = version * 4 + 10; i >= 1; i--, pos -= step) + result[i] = pos; + result[0] = 6; + return numAlign; +} + + +// Sets every pixel in the range [left : left + width] * [top : top + height] to black. +static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]) { + for (int dy = 0; dy < height; dy++) { + for (int dx = 0; dx < width; dx++) + setModule(qrcode, left + dx, top + dy, true); + } +} + + + +/*---- Drawing data modules and masking ----*/ + +// Draws the raw codewords (including data and ECC) onto the given QR Code. This requires the initial state of +// the QR Code to be black at function modules and white at codeword modules (including unused remainder bits). +static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]) { + int qrsize = qrcodegen_getSize(qrcode); + int i = 0; // Bit index into the data + // Do the funny zigzag scan + for (int right = qrsize - 1; right >= 1; right -= 2) { // Index of right column in each column pair + if (right == 6) + right = 5; + for (int vert = 0; vert < qrsize; vert++) { // Vertical counter + for (int j = 0; j < 2; j++) { + int x = right - j; // Actual x coordinate + bool upward = ((right + 1) & 2) == 0; + int y = upward ? qrsize - 1 - vert : vert; // Actual y coordinate + if (!getModule(qrcode, x, y) && i < dataLen * 8) { + bool black = ((data[i >> 3] >> (7 - (i & 7))) & 1) != 0; + setModule(qrcode, x, y, black); + i++; + } + // If there are any remainder bits (0 to 7), they are already + // set to 0/false/white when the grid of modules was initialized + } + } + } + assert(i == dataLen * 8); +} + + +// XORs the data modules in this QR Code with the given mask pattern. Due to XOR's mathematical +// properties, calling applyMask(..., m) twice with the same value is equivalent to no change at all. +// This means it is possible to apply a mask, undo it, and try another mask. Note that a final +// well-formed QR Code symbol needs exactly one mask applied (not zero, not two, etc.). +static void applyMask(const uint8_t functionModules[], uint8_t qrcode[], enum qrcodegen_Mask mask) { + assert(0 <= (int)mask && (int)mask <= 7); // Disallows qrcodegen_Mask_AUTO + int qrsize = qrcodegen_getSize(qrcode); + for (int y = 0; y < qrsize; y++) { + for (int x = 0; x < qrsize; x++) { + if (getModule(functionModules, x, y)) + continue; + bool invert = false; // Dummy value + switch ((int)mask) { + case 0: invert = (x + y) % 2 == 0; break; + case 1: invert = y % 2 == 0; break; + case 2: invert = x % 3 == 0; break; + case 3: invert = (x + y) % 3 == 0; break; + case 4: invert = (x / 3 + y / 2) % 2 == 0; break; + case 5: invert = x * y % 2 + x * y % 3 == 0; break; + case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0; break; + case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break; + default: assert(false); + } + bool val = getModule(qrcode, x, y); + setModule(qrcode, x, y, val ^ invert); + } + } +} + + +// Calculates and returns the penalty score based on state of the given QR Code's current modules. +// This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score. +static long getPenaltyScore(const uint8_t qrcode[]) { + int qrsize = qrcodegen_getSize(qrcode); + long result = 0; + + // Adjacent modules in row having same color + for (int y = 0; y < qrsize; y++) { + bool colorX = false; + for (int x = 0, runX = -1; x < qrsize; x++) { + if (x == 0 || getModule(qrcode, x, y) != colorX) { + colorX = getModule(qrcode, x, y); + runX = 1; + } else { + runX++; + if (runX == 5) + result += PENALTY_N1; + else if (runX > 5) + result++; + } + } + } + // Adjacent modules in column having same color + for (int x = 0; x < qrsize; x++) { + bool colorY = false; + for (int y = 0, runY = -1; y < qrsize; y++) { + if (y == 0 || getModule(qrcode, x, y) != colorY) { + colorY = getModule(qrcode, x, y); + runY = 1; + } else { + runY++; + if (runY == 5) + result += PENALTY_N1; + else if (runY > 5) + result++; + } + } + } + + // 2*2 blocks of modules having same color + for (int y = 0; y < qrsize - 1; y++) { + for (int x = 0; x < qrsize - 1; x++) { + bool color = getModule(qrcode, x, y); + if ( color == getModule(qrcode, x + 1, y) && + color == getModule(qrcode, x, y + 1) && + color == getModule(qrcode, x + 1, y + 1)) + result += PENALTY_N2; + } + } + + // Finder-like pattern in rows + for (int y = 0; y < qrsize; y++) { + for (int x = 0, bits = 0; x < qrsize; x++) { + bits = ((bits << 1) & 0x7FF) | (getModule(qrcode, x, y) ? 1 : 0); + if (x >= 10 && (bits == 0x05D || bits == 0x5D0)) // Needs 11 bits accumulated + result += PENALTY_N3; + } + } + // Finder-like pattern in columns + for (int x = 0; x < qrsize; x++) { + for (int y = 0, bits = 0; y < qrsize; y++) { + bits = ((bits << 1) & 0x7FF) | (getModule(qrcode, x, y) ? 1 : 0); + if (y >= 10 && (bits == 0x05D || bits == 0x5D0)) // Needs 11 bits accumulated + result += PENALTY_N3; + } + } + + // Balance of black and white modules + int black = 0; + for (int y = 0; y < qrsize; y++) { + for (int x = 0; x < qrsize; x++) { + if (getModule(qrcode, x, y)) + black++; + } + } + int total = qrsize * qrsize; + // Find smallest k such that (45-5k)% <= dark/total <= (55+5k)% + for (int k = 0; black*20L < (9L-k)*total || black*20L > (11L+k)*total; k++) + result += PENALTY_N4; + return result; +} + + + +/*---- Basic QR Code information ----*/ + +// Public function - see documentation comment in header file. +int qrcodegen_getSize(const uint8_t qrcode[]) { + assert(qrcode != NULL); + int result = qrcode[0]; + assert((qrcodegen_VERSION_MIN * 4 + 17) <= result + && result <= (qrcodegen_VERSION_MAX * 4 + 17)); + return result; +} + + +// Public function - see documentation comment in header file. +bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y) { + assert(qrcode != NULL); + int qrsize = qrcode[0]; + return (0 <= x && x < qrsize && 0 <= y && y < qrsize) && getModule(qrcode, x, y); +} + + +// Gets the module at the given coordinates, which must be in bounds. +testable bool getModule(const uint8_t qrcode[], int x, int y) { + int qrsize = qrcode[0]; + assert(21 <= qrsize && qrsize <= 177 && 0 <= x && x < qrsize && 0 <= y && y < qrsize); + int index = y * qrsize + x; + int bitIndex = index & 7; + int byteIndex = (index >> 3) + 1; + return ((qrcode[byteIndex] >> bitIndex) & 1) != 0; +} + + +// Sets the module at the given coordinates, which must be in bounds. +testable void setModule(uint8_t qrcode[], int x, int y, bool isBlack) { + int qrsize = qrcode[0]; + assert(21 <= qrsize && qrsize <= 177 && 0 <= x && x < qrsize && 0 <= y && y < qrsize); + int index = y * qrsize + x; + int bitIndex = index & 7; + int byteIndex = (index >> 3) + 1; + if (isBlack) + qrcode[byteIndex] |= 1 << bitIndex; + else + qrcode[byteIndex] &= (1 << bitIndex) ^ 0xFF; +} + + +// Sets the module at the given coordinates, doing nothing if out of bounds. +testable void setModuleBounded(uint8_t qrcode[], int x, int y, bool isBlack) { + int qrsize = qrcode[0]; + if (0 <= x && x < qrsize && 0 <= y && y < qrsize) + setModule(qrcode, x, y, isBlack); +} + + + +/*---- Segment handling ----*/ + +// Public function - see documentation comment in header file. +bool qrcodegen_isAlphanumeric(const char *text) { + assert(text != NULL); + for (; *text != '\0'; text++) { + if (strchr(ALPHANUMERIC_CHARSET, *text) == NULL) + return false; + } + return true; +} + + +// Public function - see documentation comment in header file. +bool qrcodegen_isNumeric(const char *text) { + assert(text != NULL); + for (; *text != '\0'; text++) { + if (*text < '0' || *text > '9') + return false; + } + return true; +} + + +// Public function - see documentation comment in header file. +size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars) { + int temp = calcSegmentBitLength(mode, numChars); + if (temp == -1) + return SIZE_MAX; + assert(0 <= temp && temp <= INT16_MAX); + return ((size_t)temp + 7) / 8; +} + + +// Returns the number of data bits needed to represent a segment +// containing the given number of characters using the given mode. Notes: +// - Returns -1 on failure, i.e. numChars > INT16_MAX or +// the number of needed bits exceeds INT16_MAX (i.e. 32767). +// - Otherwise, all valid results are in the range [0, INT16_MAX]. +// - For byte mode, numChars measures the number of bytes, not Unicode code points. +// - For ECI mode, numChars must be 0, and the worst-case number of bits is returned. +// An actual ECI segment can have shorter data. For non-ECI modes, the result is exact. +testable int calcSegmentBitLength(enum qrcodegen_Mode mode, size_t numChars) { + const int LIMIT = INT16_MAX; // Can be configured as high as INT_MAX + if (numChars > (unsigned int)LIMIT) + return -1; + int n = (int)numChars; + + int result = -2; + if (mode == qrcodegen_Mode_NUMERIC) { + // n * 3 + ceil(n / 3) + if (n > LIMIT / 3) + goto overflow; + result = n * 3; + int temp = n / 3 + (n % 3 == 0 ? 0 : 1); + if (temp > LIMIT - result) + goto overflow; + result += temp; + } else if (mode == qrcodegen_Mode_ALPHANUMERIC) { + // n * 5 + ceil(n / 2) + if (n > LIMIT / 5) + goto overflow; + result = n * 5; + int temp = n / 2 + n % 2; + if (temp > LIMIT - result) + goto overflow; + result += temp; + } else if (mode == qrcodegen_Mode_BYTE) { + if (n > LIMIT / 8) + goto overflow; + result = n * 8; + } else if (mode == qrcodegen_Mode_KANJI) { + if (n > LIMIT / 13) + goto overflow; + result = n * 13; + } else if (mode == qrcodegen_Mode_ECI && numChars == 0) + result = 3 * 8; + assert(0 <= result && result <= LIMIT); + return result; +overflow: + return -1; +} + + +// Public function - see documentation comment in header file. +static struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]) { + assert(data != NULL || len == 0); + struct qrcodegen_Segment result; + result.mode = qrcodegen_Mode_BYTE; + result.bitLength = calcSegmentBitLength(result.mode, len); + assert(result.bitLength != -1); + result.numChars = (int)len; + if (len > 0) + memcpy(buf, data, len * sizeof(buf[0])); + result.data = buf; + return result; +} + + +// Public function - see documentation comment in header file. +static struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[]) { + assert(digits != NULL); + struct qrcodegen_Segment result; + size_t len = strlen(digits); + result.mode = qrcodegen_Mode_NUMERIC; + int bitLen = calcSegmentBitLength(result.mode, len); + assert(bitLen != -1); + result.numChars = (int)len; + if (bitLen > 0) + memset(buf, 0, ((size_t)bitLen + 7) / 8 * sizeof(buf[0])); + result.bitLength = 0; + + unsigned int accumData = 0; + int accumCount = 0; + for (; *digits != '\0'; digits++) { + char c = *digits; + assert('0' <= c && c <= '9'); + accumData = accumData * 10 + (c - '0'); + accumCount++; + if (accumCount == 3) { + appendBitsToBuffer(accumData, 10, buf, &result.bitLength); + accumData = 0; + accumCount = 0; + } + } + if (accumCount > 0) // 1 or 2 digits remaining + appendBitsToBuffer(accumData, accumCount * 3 + 1, buf, &result.bitLength); + assert(result.bitLength == bitLen); + result.data = buf; + return result; +} + + +// Public function - see documentation comment in header file. +static struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[]) { + assert(text != NULL); + struct qrcodegen_Segment result; + size_t len = strlen(text); + result.mode = qrcodegen_Mode_ALPHANUMERIC; + int bitLen = calcSegmentBitLength(result.mode, len); + assert(bitLen != -1); + result.numChars = (int)len; + if (bitLen > 0) + memset(buf, 0, ((size_t)bitLen + 7) / 8 * sizeof(buf[0])); + result.bitLength = 0; + + unsigned int accumData = 0; + int accumCount = 0; + for (; *text != '\0'; text++) { + const char *temp = strchr(ALPHANUMERIC_CHARSET, *text); + assert(temp != NULL); + accumData = accumData * 45 + (temp - ALPHANUMERIC_CHARSET); + accumCount++; + if (accumCount == 2) { + appendBitsToBuffer(accumData, 11, buf, &result.bitLength); + accumData = 0; + accumCount = 0; + } + } + if (accumCount > 0) // 1 character remaining + appendBitsToBuffer(accumData, 6, buf, &result.bitLength); + assert(result.bitLength == bitLen); + result.data = buf; + return result; +} + + +// Public function - see documentation comment in header file. +static struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]) { + struct qrcodegen_Segment result; + result.mode = qrcodegen_Mode_ECI; + result.numChars = 0; + result.bitLength = 0; + if (0 <= assignVal && assignVal < (1 << 7)) { + memset(buf, 0, 1 * sizeof(buf[0])); + appendBitsToBuffer(assignVal, 8, buf, &result.bitLength); + } else if ((1 << 7) <= assignVal && assignVal < (1 << 14)) { + memset(buf, 0, 2 * sizeof(buf[0])); + appendBitsToBuffer(2, 2, buf, &result.bitLength); + appendBitsToBuffer(assignVal, 14, buf, &result.bitLength); + } else if ((1 << 14) <= assignVal && assignVal < 1000000L) { + memset(buf, 0, 3 * sizeof(buf[0])); + appendBitsToBuffer(6, 3, buf, &result.bitLength); + appendBitsToBuffer(assignVal >> 10, 11, buf, &result.bitLength); + appendBitsToBuffer(assignVal & 0x3FF, 10, buf, &result.bitLength); + } else + assert(false); + result.data = buf; + return result; +} + + +// Public function - see documentation comment in header file. +static bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len, + enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[]) { + return qrcodegen_encodeSegmentsAdvanced(segs, len, ecl, + qrcodegen_VERSION_MIN, qrcodegen_VERSION_MAX, -1, true, tempBuffer, qrcode); +} + + +// Public function - see documentation comment in header file. +static bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl, + int minVersion, int maxVersion, int mask, bool boostEcl, uint8_t tempBuffer[], uint8_t qrcode[]) { + assert(segs != NULL || len == 0); + assert(qrcodegen_VERSION_MIN <= minVersion && minVersion <= maxVersion && maxVersion <= qrcodegen_VERSION_MAX); + assert(0 <= (int)ecl && (int)ecl <= 3 && -1 <= (int)mask && (int)mask <= 7); + + // Find the minimal version number to use + int version, dataUsedBits; + for (version = minVersion; ; version++) { + int dataCapacityBits = getNumDataCodewords(version, ecl) * 8; // Number of data bits available + dataUsedBits = getTotalBits(segs, len, version); + if (dataUsedBits != -1 && dataUsedBits <= dataCapacityBits) + break; // This version number is found to be suitable + if (version >= maxVersion) { // All versions in the range could not fit the given data + qrcode[0] = 0; // Set size to invalid value for safety + return false; + } + } + assert(dataUsedBits != -1); + + // Increase the error correction level while the data still fits in the current version number + for (int i = (int)qrcodegen_Ecc_MEDIUM; i <= (int)qrcodegen_Ecc_HIGH; i++) { + if (boostEcl && dataUsedBits <= getNumDataCodewords(version, (enum qrcodegen_Ecc)i) * 8) + ecl = (enum qrcodegen_Ecc)i; + } + + // Create the data bit string by concatenating all segments + int dataCapacityBits = getNumDataCodewords(version, ecl) * 8; + memset(qrcode, 0, qrcodegen_BUFFER_LEN_FOR_VERSION(version) * sizeof(qrcode[0])); + int bitLen = 0; + for (size_t i = 0; i < len; i++) { + const struct qrcodegen_Segment *seg = &segs[i]; + unsigned int modeBits = 0; // Dummy value + switch (seg->mode) { + case qrcodegen_Mode_NUMERIC : modeBits = 0x1; break; + case qrcodegen_Mode_ALPHANUMERIC: modeBits = 0x2; break; + case qrcodegen_Mode_BYTE : modeBits = 0x4; break; + case qrcodegen_Mode_KANJI : modeBits = 0x8; break; + case qrcodegen_Mode_ECI : modeBits = 0x7; break; + default: assert(false); + } + appendBitsToBuffer(modeBits, 4, qrcode, &bitLen); + appendBitsToBuffer(seg->numChars, numCharCountBits(seg->mode, version), qrcode, &bitLen); + for (int j = 0; j < seg->bitLength; j++) + appendBitsToBuffer((seg->data[j >> 3] >> (7 - (j & 7))) & 1, 1, qrcode, &bitLen); + } + + // Add terminator and pad up to a byte if applicable + int terminatorBits = dataCapacityBits - bitLen; + if (terminatorBits > 4) + terminatorBits = 4; + appendBitsToBuffer(0, terminatorBits, qrcode, &bitLen); + appendBitsToBuffer(0, (8 - bitLen % 8) % 8, qrcode, &bitLen); + + // Pad with alternate bytes until data capacity is reached + for (uint8_t padByte = 0xEC; bitLen < dataCapacityBits; padByte ^= 0xEC ^ 0x11) + appendBitsToBuffer(padByte, 8, qrcode, &bitLen); + assert(bitLen % 8 == 0); + + // Draw function and data codeword modules + appendErrorCorrection(qrcode, version, ecl, tempBuffer); + initializeFunctionModules(version, qrcode); + drawCodewords(tempBuffer, getNumRawDataModules(version) / 8, qrcode); + drawWhiteFunctionModules(qrcode, version); + initializeFunctionModules(version, tempBuffer); + + // Handle masking + if (mask == qrcodegen_Mask_AUTO) { // Automatically choose best mask + long minPenalty = LONG_MAX; + for (int i = 0; i < 8; i++) { + drawFormatBits(ecl, (enum qrcodegen_Mask)i, qrcode); + applyMask(tempBuffer, qrcode, (enum qrcodegen_Mask)i); + long penalty = getPenaltyScore(qrcode); + if (penalty < minPenalty) { + mask = (enum qrcodegen_Mask)i; + minPenalty = penalty; + } + applyMask(tempBuffer, qrcode, (enum qrcodegen_Mask)i); // Undoes the mask due to XOR + } + } + assert(0 <= (int)mask && (int)mask <= 7); + drawFormatBits(ecl, (enum qrcodegen_Mask)mask, qrcode); + applyMask(tempBuffer, qrcode, (enum qrcodegen_Mask)mask); + return true; +} + + +// Returns the number of bits needed to encode the given list of segments at the given version. +// The result is in the range [0, 32767] if successful. Otherwise, -1 is returned if any segment +// has more characters than allowed by that segment's mode's character count field at the version, +// or if the actual answer exceeds INT16_MAX. +testable int getTotalBits(const struct qrcodegen_Segment segs[], size_t len, int version) { + assert(segs != NULL || len == 0); + assert(qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX); + int result = 0; + for (size_t i = 0; i < len; i++) { + int numChars = segs[i].numChars; + int bitLength = segs[i].bitLength; + assert(0 <= numChars && numChars <= INT16_MAX); + assert(0 <= bitLength && bitLength <= INT16_MAX); + int ccbits = numCharCountBits(segs[i].mode, version); + assert(0 <= ccbits && ccbits <= 16); + // Fail if segment length value doesn't fit in the length field's bit-width + if (numChars >= (1L << ccbits)) + return -1; + long temp = 4L + ccbits + bitLength; + if (temp > INT16_MAX - result) + return -1; + result += temp; + } + assert(0 <= result && result <= INT16_MAX); + return result; +} + + +// Returns the bit width of the segment character count field for the +// given mode at the given version number. The result is in the range [0, 16]. +static int numCharCountBits(enum qrcodegen_Mode mode, int version) { + assert(qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX); + int i = -1; // Dummy value + if ( 1 <= version && version <= 9) i = 0; + else if (10 <= version && version <= 26) i = 1; + else if (27 <= version && version <= 40) i = 2; + else assert(false); + + switch (mode) { + case qrcodegen_Mode_NUMERIC : { static const int temp[] = {10, 12, 14}; return temp[i]; } + case qrcodegen_Mode_ALPHANUMERIC: { static const int temp[] = { 9, 11, 13}; return temp[i]; } + case qrcodegen_Mode_BYTE : { static const int temp[] = { 8, 16, 16}; return temp[i]; } + case qrcodegen_Mode_KANJI : { static const int temp[] = { 8, 10, 12}; return temp[i]; } + case qrcodegen_Mode_ECI : return 0; + default: assert(false); + } + return -1; // Dummy value +} diff --git a/source/DEINDUGens/include/faust/gui/ring-buffer.h b/source/DEINDUGens/include/faust/gui/ring-buffer.h index b581ccae16..499bb0db1d 100644 --- a/source/DEINDUGens/include/faust/gui/ring-buffer.h +++ b/source/DEINDUGens/include/faust/gui/ring-buffer.h @@ -27,6 +27,12 @@ #include #include +#ifdef WIN32 +# pragma warning (disable: 4334) +#else +# pragma GCC diagnostic ignored "-Wunused-function" +#endif + typedef struct { char *buf; size_t len; @@ -43,28 +49,28 @@ typedef struct { } ringbuffer_t; -ringbuffer_t *ringbuffer_create(size_t sz); -void ringbuffer_free(ringbuffer_t *rb); -void ringbuffer_get_read_vector(const ringbuffer_t *rb, +static ringbuffer_t *ringbuffer_create(size_t sz); +static void ringbuffer_free(ringbuffer_t *rb); +static void ringbuffer_get_read_vector(const ringbuffer_t *rb, ringbuffer_data_t *vec); -void ringbuffer_get_write_vector(const ringbuffer_t *rb, +static void ringbuffer_get_write_vector(const ringbuffer_t *rb, ringbuffer_data_t *vec); -size_t ringbuffer_read(ringbuffer_t *rb, char *dest, size_t cnt); -size_t ringbuffer_peek(ringbuffer_t *rb, char *dest, size_t cnt); -void ringbuffer_read_advance(ringbuffer_t *rb, size_t cnt); -size_t ringbuffer_read_space(const ringbuffer_t *rb); -int ringbuffer_mlock(ringbuffer_t *rb); -void ringbuffer_reset(ringbuffer_t *rb); -void ringbuffer_reset_size (ringbuffer_t * rb, size_t sz); -size_t ringbuffer_write(ringbuffer_t *rb, const char *src, +static size_t ringbuffer_read(ringbuffer_t *rb, char *dest, size_t cnt); +static size_t ringbuffer_peek(ringbuffer_t *rb, char *dest, size_t cnt); +static void ringbuffer_read_advance(ringbuffer_t *rb, size_t cnt); +static size_t ringbuffer_read_space(const ringbuffer_t *rb); +static int ringbuffer_mlock(ringbuffer_t *rb); +static void ringbuffer_reset(ringbuffer_t *rb); +static void ringbuffer_reset_size (ringbuffer_t * rb, size_t sz); +static size_t ringbuffer_write(ringbuffer_t *rb, const char *src, size_t cnt); -void ringbuffer_write_advance(ringbuffer_t *rb, size_t cnt); -size_t ringbuffer_write_space(const ringbuffer_t *rb); +static void ringbuffer_write_advance(ringbuffer_t *rb, size_t cnt); +static size_t ringbuffer_write_space(const ringbuffer_t *rb); /* Create a new ringbuffer to hold at least `sz' bytes of data. The - actual buffer size is rounded up to the next power of two. */ + actual buffer size is rounded up to the next power of two. */ -inline ringbuffer_t * +static ringbuffer_t * ringbuffer_create (size_t sz) { size_t power_of_two; @@ -92,7 +98,7 @@ ringbuffer_create (size_t sz) /* Free all data associated with the ringbuffer `rb'. */ -inline void +static void ringbuffer_free (ringbuffer_t * rb) { #ifdef USE_MLOCK @@ -106,7 +112,7 @@ ringbuffer_free (ringbuffer_t * rb) /* Lock the data block of `rb' using the system call 'mlock'. */ -inline int +static int ringbuffer_mlock (ringbuffer_t * rb) { #ifdef USE_MLOCK @@ -121,7 +127,7 @@ ringbuffer_mlock (ringbuffer_t * rb) /* Reset the read and write pointers to zero. This is not thread safe. */ -inline void +static void ringbuffer_reset (ringbuffer_t * rb) { rb->read_ptr = 0; @@ -132,7 +138,7 @@ ringbuffer_reset (ringbuffer_t * rb) /* Reset the read and write pointers to zero. This is not thread safe. */ -inline void +static void ringbuffer_reset_size (ringbuffer_t * rb, size_t sz) { rb->size = sz; @@ -142,11 +148,11 @@ ringbuffer_reset_size (ringbuffer_t * rb, size_t sz) rb->write_ptr = 0; } -/* Return the number of bytes available for reading. This is the +/* Return the number of bytes available for reading. This is the number of bytes in front of the read pointer and behind the write pointer. */ -inline size_t +static size_t ringbuffer_read_space (const ringbuffer_t * rb) { size_t w, r; @@ -161,11 +167,11 @@ ringbuffer_read_space (const ringbuffer_t * rb) } } -/* Return the number of bytes available for writing. This is the +/* Return the number of bytes available for writing. This is the number of bytes in front of the write pointer and behind the read pointer. */ -inline size_t +static size_t ringbuffer_write_space (const ringbuffer_t * rb) { size_t w, r; @@ -182,10 +188,10 @@ ringbuffer_write_space (const ringbuffer_t * rb) } } -/* The copying data reader. Copy at most `cnt' bytes from `rb' to +/* The copying data reader. Copy at most `cnt' bytes from `rb' to `dest'. Returns the actual number of bytes copied. */ -inline size_t +static size_t ringbuffer_read (ringbuffer_t * rb, char *dest, size_t cnt) { size_t free_cnt; @@ -220,11 +226,11 @@ ringbuffer_read (ringbuffer_t * rb, char *dest, size_t cnt) return to_read; } -/* The copying data reader w/o read pointer advance. Copy at most +/* The copying data reader w/o read pointer advance. Copy at most `cnt' bytes from `rb' to `dest'. Returns the actual number of bytes copied. */ -inline size_t +static size_t ringbuffer_peek (ringbuffer_t * rb, char *dest, size_t cnt) { size_t free_cnt; @@ -261,10 +267,10 @@ ringbuffer_peek (ringbuffer_t * rb, char *dest, size_t cnt) return to_read; } -/* The copying data writer. Copy at most `cnt' bytes to `rb' from +/* The copying data writer. Copy at most `cnt' bytes to `rb' from `src'. Returns the actual number of bytes copied. */ -inline size_t +static size_t ringbuffer_write (ringbuffer_t * rb, const char *src, size_t cnt) { size_t free_cnt; @@ -301,7 +307,7 @@ ringbuffer_write (ringbuffer_t * rb, const char *src, size_t cnt) /* Advance the read pointer `cnt' places. */ -inline void +static void ringbuffer_read_advance (ringbuffer_t * rb, size_t cnt) { size_t tmp = (rb->read_ptr + cnt) & rb->size_mask; @@ -310,19 +316,19 @@ ringbuffer_read_advance (ringbuffer_t * rb, size_t cnt) /* Advance the write pointer `cnt' places. */ -inline void +static void ringbuffer_write_advance (ringbuffer_t * rb, size_t cnt) { size_t tmp = (rb->write_ptr + cnt) & rb->size_mask; rb->write_ptr = tmp; } -/* The non-copying data reader. `vec' is an array of two places. Set - the values at `vec' to hold the current readable data at `rb'. If +/* The non-copying data reader. `vec' is an array of two places. Set + the values at `vec' to hold the current readable data at `rb'. If the readable data is in one segment the second segment has zero - length. */ + length. */ -inline void +static void ringbuffer_get_read_vector (const ringbuffer_t * rb, ringbuffer_data_t * vec) { @@ -361,12 +367,12 @@ ringbuffer_get_read_vector (const ringbuffer_t * rb, } } -/* The non-copying data writer. `vec' is an array of two places. Set - the values at `vec' to hold the current writeable data at `rb'. If +/* The non-copying data writer. `vec' is an array of two places. Set + the values at `vec' to hold the current writeable data at `rb'. If the writeable data is in one segment the second segment has zero - length. */ + length. */ -inline void +static void ringbuffer_get_write_vector (const ringbuffer_t * rb, ringbuffer_data_t * vec) { diff --git a/source/DEINDUGens/include/faust/midi/RtMidi.cpp b/source/DEINDUGens/include/faust/midi/RtMidi.cpp index efa86d57a8..91ebd2ad35 100644 --- a/source/DEINDUGens/include/faust/midi/RtMidi.cpp +++ b/source/DEINDUGens/include/faust/midi/RtMidi.cpp @@ -8,7 +8,7 @@ RtMidi WWW site: http://music.mcgill.ca/~gary/rtmidi/ RtMidi: realtime MIDI i/o C++ classes - Copyright (c) 2003-2014 Gary P. Scavone + Copyright (c) 2003-2017 Gary P. Scavone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files @@ -63,42 +63,42 @@ UInt64 CAHostTimeBase::sLastTime = 0; void CAHostTimeBase::Initialize() { if (!sIsInited) { - + // get the info about Absolute time - #if TARGET_OS_MAC - struct mach_timebase_info theTimeBaseInfo; - mach_timebase_info(&theTimeBaseInfo); - sMinDelta = 1; - sToNanosNumerator = theTimeBaseInfo.numer; - sToNanosDenominator = theTimeBaseInfo.denom; - sFromNanosNumerator = sToNanosDenominator; - sFromNanosDenominator = sToNanosNumerator; - - // the frequency of that clock is: (sToNanosDenominator / sToNanosNumerator) * 10^9 - sFrequency = static_cast(sToNanosDenominator) / static_cast(sToNanosNumerator); - sFrequency *= 1000000000.0; - #elif TARGET_OS_WIN32 - LARGE_INTEGER theFrequency; - QueryPerformanceFrequency(&theFrequency); - sMinDelta = 1; - sToNanosNumerator = 1000000000ULL; - sToNanosDenominator = *((UInt64*)&theFrequency); - sFromNanosNumerator = sToNanosDenominator; - sFromNanosDenominator = sToNanosNumerator; - sFrequency = static_cast(*((UInt64*)&theFrequency)); - #endif +#if TARGET_OS_MAC + struct mach_timebase_info theTimeBaseInfo; + mach_timebase_info(&theTimeBaseInfo); + sMinDelta = 1; + sToNanosNumerator = theTimeBaseInfo.numer; + sToNanosDenominator = theTimeBaseInfo.denom; + sFromNanosNumerator = sToNanosDenominator; + sFromNanosDenominator = sToNanosNumerator; + + // the frequency of that clock is: (sToNanosDenominator / sToNanosNumerator) * 10^9 + sFrequency = static_cast(sToNanosDenominator) / static_cast(sToNanosNumerator); + sFrequency *= 1000000000.0; +#elif TARGET_OS_WIN32 + LARGE_INTEGER theFrequency; + QueryPerformanceFrequency(&theFrequency); + sMinDelta = 1; + sToNanosNumerator = 1000000000ULL; + sToNanosDenominator = *((UInt64*)&theFrequency); + sFromNanosNumerator = sToNanosDenominator; + sFromNanosDenominator = sToNanosNumerator; + sFrequency = static_cast(*((UInt64*)&theFrequency)); +#endif sInverseFrequency = 1.0 / sFrequency; - #if Log_Host_Time_Base_Parameters - DebugMessage( "Host Time Base Parameters"); - DebugMessageN1(" Minimum Delta: %lu", sMinDelta); - DebugMessageN1(" Frequency: %f", sFrequency); - DebugMessageN1(" To Nanos Numerator: %lu", sToNanosNumerator); - DebugMessageN1(" To Nanos Denominator: %lu", sToNanosDenominator); - DebugMessageN1(" From Nanos Numerator: %lu", sFromNanosNumerator); - DebugMessageN1(" From Nanos Denominator: %lu", sFromNanosDenominator); - #endif - +#if Log_Host_Time_Base_Parameters + DebugMessage( "Host Time Base Parameters"); + DebugMessageN1(" Minimum Delta: %lu", sMinDelta); + DebugMessageN1(" Frequency: %f", sFrequency); + DebugMessageN1(" To Nanos Numerator: %lu", sToNanosNumerator); + DebugMessageN1(" To Nanos Denominator: %lu", sToNanosDenominator); + DebugMessageN1(" From Nanos Numerator: %lu", sFromNanosNumerator); + DebugMessageN1(" From Nanos Denominator: %lu", sFromNanosDenominator); +#endif + sIsInited = true; } } @@ -106,12 +106,16 @@ void CAHostTimeBase::Initialize() #endif #if defined(__MACOSX_CORE__) - #if TARGET_OS_IPHONE - #define AudioGetCurrentHostTime CAHostTimeBase::GetCurrentTime - #define AudioConvertHostTimeToNanos CAHostTimeBase::ConvertToNanos - #endif + #if TARGET_OS_IPHONE + #define AudioGetCurrentHostTime CAHostTimeBase::GetCurrentTime + #define AudioConvertHostTimeToNanos CAHostTimeBase::ConvertToNanos + #endif #endif +// Default for Windows is to add an identifier to the port names; this +// flag can be undefined to disable this behaviour. +#define RTMIDI_ENSURE_UNIQUE_PORTNAMES + //*********************************************************************// // RtMidi Definitions //*********************************************************************// @@ -128,8 +132,7 @@ RtMidi :: RtMidi() RtMidi :: ~RtMidi() { - if ( rtapi_ ) - delete rtapi_; + delete rtapi_; rtapi_ = 0; } @@ -165,10 +168,9 @@ void RtMidi :: getCompiledApi( std::vector &apis ) throw() // RtMidiIn Definitions //*********************************************************************// -void RtMidiIn :: openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit ) +void RtMidiIn :: openMidiApi( RtMidi::Api api, const std::string &clientName, unsigned int queueSizeLimit ) { - if ( rtapi_ ) - delete rtapi_; + delete rtapi_; rtapi_ = 0; #if defined(__UNIX_JACK__) @@ -193,7 +195,7 @@ void RtMidiIn :: openMidiApi( RtMidi::Api api, const std::string clientName, uns #endif } -RtMidiIn :: RtMidiIn( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit ) +RtMidiIn :: RtMidiIn( RtMidi::Api api, const std::string &clientName, unsigned int queueSizeLimit ) : RtMidi() { if ( api != UNSPECIFIED ) { @@ -212,7 +214,7 @@ RtMidiIn :: RtMidiIn( RtMidi::Api api, const std::string clientName, unsigned in getCompiledApi( apis ); for ( unsigned int i=0; igetPortCount() ) break; + if ( rtapi_ && rtapi_->getPortCount() ) break; } if ( rtapi_ ) return; @@ -234,10 +236,9 @@ RtMidiIn :: ~RtMidiIn() throw() // RtMidiOut Definitions //*********************************************************************// -void RtMidiOut :: openMidiApi( RtMidi::Api api, const std::string clientName ) +void RtMidiOut :: openMidiApi( RtMidi::Api api, const std::string &clientName ) { - if ( rtapi_ ) - delete rtapi_; + delete rtapi_; rtapi_ = 0; #if defined(__UNIX_JACK__) @@ -262,7 +263,7 @@ void RtMidiOut :: openMidiApi( RtMidi::Api api, const std::string clientName ) #endif } -RtMidiOut :: RtMidiOut( RtMidi::Api api, const std::string clientName ) +RtMidiOut :: RtMidiOut( RtMidi::Api api, const std::string &clientName) { if ( api != UNSPECIFIED ) { // Attempt to open the specified API. @@ -280,7 +281,7 @@ RtMidiOut :: RtMidiOut( RtMidi::Api api, const std::string clientName ) getCompiledApi( apis ); for ( unsigned int i=0; igetPortCount() ) break; + if ( rtapi_ && rtapi_->getPortCount() ) break; } if ( rtapi_ ) return; @@ -302,7 +303,7 @@ RtMidiOut :: ~RtMidiOut() throw() //*********************************************************************// MidiApi :: MidiApi( void ) - : apiData_( 0 ), connected_( false ), errorCallback_(0) + : apiData_( 0 ), connected_( false ), errorCallback_(0), firstErrorOccurred_(false), errorCallbackUserData_(0) { } @@ -310,24 +311,24 @@ MidiApi :: ~MidiApi( void ) { } -void MidiApi :: setErrorCallback( RtMidiErrorCallback errorCallback ) +void MidiApi :: setErrorCallback( RtMidiErrorCallback errorCallback, void *userData = 0 ) { errorCallback_ = errorCallback; + errorCallbackUserData_ = userData; } void MidiApi :: error( RtMidiError::Type type, std::string errorString ) { if ( errorCallback_ ) { - static bool firstErrorOccured = false; - if ( firstErrorOccured ) + if ( firstErrorOccurred_ ) return; - firstErrorOccured = true; + firstErrorOccurred_ = true; const std::string errorMessage = errorString; - errorCallback_( type, errorMessage ); - firstErrorOccured = false; + errorCallback_( type, errorMessage, errorCallbackUserData_); + firstErrorOccurred_ = false; return; } @@ -414,18 +415,68 @@ double MidiInApi :: getMessage( std::vector *message ) return 0.0; } - if ( inputData_.queue.size == 0 ) return 0.0; + double timeStamp; + if (!inputData_.queue.pop(message, &timeStamp)) + return 0.0; + + return timeStamp; +} + +unsigned int MidiInApi::MidiQueue::size(unsigned int *__back, + unsigned int *__front) +{ + // Access back/front members exactly once and make stack copies for + // size calculation + unsigned int _back = back, _front = front, _size; + if (_back >= _front) + _size = _back - _front; + else + _size = ringSize - _front + _back; + + // Return copies of back/front so no new and unsynchronized accesses + // to member variables are needed. + if (__back) *__back = _back; + if (__front) *__front = _front; + return _size; +} + +// As long as we haven't reached our queue size limit, push the message. +bool MidiInApi::MidiQueue::push(const MidiInApi::MidiMessage& msg) +{ + // Local stack copies of front/back + unsigned int _back, _front, _size; + + // Get back/front indexes exactly once and calculate current size + _size = size(&_back, &_front); + + if ( _size < ringSize-1 ) + { + ring[_back] = msg; + back = (back+1)%ringSize; + return true; + } + + return false; +} + +bool MidiInApi::MidiQueue::pop(std::vector *msg, double* timeStamp) +{ + // Local stack copies of front/back + unsigned int _back, _front, _size; + + // Get back/front indexes exactly once and calculate current size + _size = size(&_back, &_front); + + if (_size == 0) + return false; // Copy queued message to the vector pointer argument and then "pop" it. - std::vector *bytes = &(inputData_.queue.ring[inputData_.queue.front].bytes); - message->assign( bytes->begin(), bytes->end() ); - double deltaTime = inputData_.queue.ring[inputData_.queue.front].timeStamp; - inputData_.queue.size--; - inputData_.queue.front++; - if ( inputData_.queue.front == inputData_.queue.ringSize ) - inputData_.queue.front = 0; + msg->assign( ring[_front].bytes.begin(), ring[_front].bytes.end() ); + *timeStamp = ring[_front].timeStamp; - return deltaTime; + // Update front + front = (front+1)%ringSize; + return true; } //*********************************************************************// @@ -453,12 +504,16 @@ MidiOutApi :: ~MidiOutApi( void ) // MIDI input. We convert the system specific time stamps to delta // time values. +// The CoreMIDI API is based on the use of a callback function for +// MIDI input. We convert the system specific time stamps to delta +// time values. + // OS-X CoreMIDI header files. #include #if defined(__MACOSX_CORE__) #if TARGET_OS_IPHONE - static inline UInt32 EndianS32_BtoN(UInt32 x) + static inline UInt32 EndianS32_BtoN(UInt32 x) { return ((x << 24) & 0xFF000000) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | ((x >> 24) & 0x000000FF); @@ -469,7 +524,6 @@ MidiOutApi :: ~MidiOutApi( void ) #endif #endif - // A structure to hold variables related to the CoreMIDI API // implementation. struct CoreMidiData { @@ -494,10 +548,10 @@ static void midiInputCallback( const MIDIPacketList *list, void *procRef, void * unsigned char status; unsigned short nBytes, iByte, size; unsigned long long time; - + bool& continueSysex = data->continueSysex; MidiInApi::MidiMessage& message = data->message; - + const MIDIPacket *packet = &list->packet[0]; for ( unsigned int i=0; inumPackets; ++i ) { @@ -534,10 +588,14 @@ static void midiInputCallback( const MIDIPacketList *list, void *procRef, void * if ( apiData->lastTime == 0 ) { // this happens when receiving asynchronous sysex messages apiData->lastTime = AudioGetCurrentHostTime(); } + //std::cout << "TimeStamp = " << packet->timeStamp << std::endl; */ - - // Absolute usec based time stamp - message.timeStamp = AudioConvertHostTimeToNanos(packet->timeStamp) / 1000; + + // 10/02/19: absolute usec based time stamp, possibly using current time if packet timestamp seems wrong... + double packet_usec = AudioConvertHostTimeToNanos(packet->timeStamp) / 1000; + double cur_date_usec = double(AudioConvertHostTimeToNanos(AudioGetCurrentHostTime())) / 1000.; + double delta_usec = cur_date_usec - packet_usec; + message.timeStamp = (delta_usec > 1000) ? cur_date_usec : packet_usec; iByte = 0; if ( continueSysex ) { @@ -557,13 +615,7 @@ static void midiInputCallback( const MIDIPacketList *list, void *procRef, void * } else { // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else + if (!data->queue.push(message)) std::cerr << "\nMidiInCore: message queue limit reached!!\n\n"; } message.bytes.clear(); @@ -621,13 +673,7 @@ static void midiInputCallback( const MIDIPacketList *list, void *procRef, void * } else { // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else + if (!data->queue.push(message)) std::cerr << "\nMidiInCore: message queue limit reached!!\n\n"; } message.bytes.clear(); @@ -640,7 +686,7 @@ static void midiInputCallback( const MIDIPacketList *list, void *procRef, void * } } -MidiInCore :: MidiInCore( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) +MidiInCore :: MidiInCore( const std::string &clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { initialize( clientName ); } @@ -661,9 +707,12 @@ void MidiInCore :: initialize( const std::string& clientName ) { // Set up our client. MIDIClientRef client; - OSStatus result = MIDIClientCreate( CFStringCreateWithCString( NULL, clientName.c_str(), kCFStringEncodingASCII ), NULL, NULL, &client ); + CFStringRef name = CFStringCreateWithCString( NULL, clientName.c_str(), kCFStringEncodingASCII ); + OSStatus result = MIDIClientCreate(name, NULL, NULL, &client ); if ( result != noErr ) { - errorString_ = "MidiInCore::initialize: error creating OS-X MIDI client object."; + std::ostringstream ost; + ost << "MidiInCore::initialize: error creating OS-X MIDI client object (" << result << ")."; + errorString_ = ost.str(); error( RtMidiError::DRIVER_ERROR, errorString_ ); return; } @@ -674,9 +723,10 @@ void MidiInCore :: initialize( const std::string& clientName ) data->endpoint = 0; apiData_ = (void *) data; inputData_.apiData = (void *) data; + CFRelease(name); } -void MidiInCore :: openPort( unsigned int portNumber, const std::string portName ) +void MidiInCore :: openPort( unsigned int portNumber, const std::string &portName ) { if ( connected_ ) { errorString_ = "MidiInCore::openPort: a valid connection already exists!"; @@ -738,7 +788,7 @@ void MidiInCore :: openPort( unsigned int portNumber, const std::string portName connected_ = true; } -void MidiInCore :: openVirtualPort( const std::string portName ) +void MidiInCore :: openVirtualPort( const std::string &portName ) { CoreMidiData *data = static_cast (apiData_); @@ -759,11 +809,19 @@ void MidiInCore :: openVirtualPort( const std::string portName ) void MidiInCore :: closePort( void ) { - if ( connected_ ) { - CoreMidiData *data = static_cast (apiData_); + CoreMidiData *data = static_cast (apiData_); + + if ( data->endpoint ) { + MIDIEndpointDispose( data->endpoint ); + data->endpoint = 0; + } + + if ( data->port ) { MIDIPortDispose( data->port ); - connected_ = false; + data->port = 0; } + + connected_ = false; } unsigned int MidiInCore :: getPortCount() @@ -892,6 +950,8 @@ static CFStringRef ConnectedEndpointName( MIDIEndpointRef endpoint ) if ( anyStrings ) return result; + CFRelease( result ); + // Here, either the endpoint had no connections, or we failed to obtain names return EndpointName( endpoint, false ); } @@ -914,7 +974,7 @@ std::string MidiInCore :: getPortName( unsigned int portNumber ) portRef = MIDIGetSource( portNumber ); nameRef = ConnectedEndpointName(portRef); - CFStringGetCString( nameRef, name, sizeof(name), CFStringGetSystemEncoding()); + CFStringGetCString( nameRef, name, sizeof(name), kCFStringEncodingUTF8); CFRelease( nameRef ); return stringName = name; @@ -925,7 +985,7 @@ std::string MidiInCore :: getPortName( unsigned int portNumber ) // Class Definitions: MidiOutCore //*********************************************************************// -MidiOutCore :: MidiOutCore( const std::string clientName ) : MidiOutApi() +MidiOutCore :: MidiOutCore( const std::string &clientName ) : MidiOutApi() { initialize( clientName ); } @@ -946,9 +1006,12 @@ void MidiOutCore :: initialize( const std::string& clientName ) { // Set up our client. MIDIClientRef client; - OSStatus result = MIDIClientCreate( CFStringCreateWithCString( NULL, clientName.c_str(), kCFStringEncodingASCII ), NULL, NULL, &client ); + CFStringRef name = CFStringCreateWithCString( NULL, clientName.c_str(), kCFStringEncodingASCII ); + OSStatus result = MIDIClientCreate(name, NULL, NULL, &client ); if ( result != noErr ) { - errorString_ = "MidiOutCore::initialize: error creating OS-X MIDI client object."; + std::ostringstream ost; + ost << "MidiInCore::initialize: error creating OS-X MIDI client object (" << result << ")."; + errorString_ = ost.str(); error( RtMidiError::DRIVER_ERROR, errorString_ ); return; } @@ -958,6 +1021,7 @@ void MidiOutCore :: initialize( const std::string& clientName ) data->client = client; data->endpoint = 0; apiData_ = (void *) data; + CFRelease( name ); } unsigned int MidiOutCore :: getPortCount() @@ -984,13 +1048,13 @@ std::string MidiOutCore :: getPortName( unsigned int portNumber ) portRef = MIDIGetDestination( portNumber ); nameRef = ConnectedEndpointName(portRef); - CFStringGetCString( nameRef, name, sizeof(name), CFStringGetSystemEncoding()); + CFStringGetCString( nameRef, name, sizeof(name), kCFStringEncodingUTF8 ); CFRelease( nameRef ); return stringName = name; } -void MidiOutCore :: openPort( unsigned int portNumber, const std::string portName ) +void MidiOutCore :: openPort( unsigned int portNumber, const std::string &portName ) { if ( connected_ ) { errorString_ = "MidiOutCore::openPort: a valid connection already exists!"; @@ -1016,9 +1080,11 @@ void MidiOutCore :: openPort( unsigned int portNumber, const std::string portNam MIDIPortRef port; CoreMidiData *data = static_cast (apiData_); + CFStringRef portNameRef = CFStringCreateWithCString( NULL, portName.c_str(), kCFStringEncodingASCII ); OSStatus result = MIDIOutputPortCreate( data->client, - CFStringCreateWithCString( NULL, portName.c_str(), kCFStringEncodingASCII ), + portNameRef, &port ); + CFRelease( portNameRef ); if ( result != noErr ) { MIDIClientDispose( data->client ); errorString_ = "MidiOutCore::openPort: error creating OS-X MIDI output port."; @@ -1044,14 +1110,22 @@ void MidiOutCore :: openPort( unsigned int portNumber, const std::string portNam void MidiOutCore :: closePort( void ) { - if ( connected_ ) { - CoreMidiData *data = static_cast (apiData_); + CoreMidiData *data = static_cast (apiData_); + + if ( data->endpoint ) { + MIDIEndpointDispose( data->endpoint ); + data->endpoint = 0; + } + + if ( data->port ) { MIDIPortDispose( data->port ); - connected_ = false; + data->port = 0; } + + connected_ = false; } -void MidiOutCore :: openVirtualPort( std::string portName ) +void MidiOutCore :: openVirtualPort( const std::string &portName ) { CoreMidiData *data = static_cast (apiData_); @@ -1076,76 +1150,40 @@ void MidiOutCore :: openVirtualPort( std::string portName ) data->endpoint = endpoint; } -// Not necessary if we don't treat sysex messages any differently than -// normal messages ... see below. -//static void sysexCompletionProc( MIDISysexSendRequest *sreq ) -//{ -// free( sreq ); -//} - -void MidiOutCore :: sendMessage( std::vector *message ) +void MidiOutCore :: sendMessage( const unsigned char *message, size_t size ) { // We use the MIDISendSysex() function to asynchronously send sysex // messages. Otherwise, we use a single CoreMidi MIDIPacket. - unsigned int nBytes = message->size(); + unsigned int nBytes = static_cast (size); if ( nBytes == 0 ) { errorString_ = "MidiOutCore::sendMessage: no data in message argument!"; error( RtMidiError::WARNING, errorString_ ); return; } - // unsigned int packetBytes, bytesLeft = nBytes; - // unsigned int messageIndex = 0; MIDITimeStamp timeStamp = AudioGetCurrentHostTime(); CoreMidiData *data = static_cast (apiData_); OSStatus result; - /* - // I don't think this code is necessary. We can send sysex - // messages through the normal mechanism. In addition, this avoids - // the problem of virtual ports not receiving sysex messages. - - if ( message->at(0) == 0xF0 ) { - - // Apple's fantastic API requires us to free the allocated data in - // the completion callback but trashes the pointer and size before - // we get a chance to free it!! This is a somewhat ugly hack - // submitted by ptarabbia that puts the sysex buffer data right at - // the end of the MIDISysexSendRequest structure. This solution - // does not require that we wait for a previous sysex buffer to be - // sent before sending a new one, which was the old way we did it. - MIDISysexSendRequest *newRequest = (MIDISysexSendRequest *) malloc(sizeof(struct MIDISysexSendRequest) + nBytes); - char * sysexBuffer = ((char *) newRequest) + sizeof(struct MIDISysexSendRequest); - - // Copy data to buffer. - for ( unsigned int i=0; iat(i); - - newRequest->destination = data->destinationId; - newRequest->data = (Byte *)sysexBuffer; - newRequest->bytesToSend = nBytes; - newRequest->complete = 0; - newRequest->completionProc = sysexCompletionProc; - newRequest->completionRefCon = newRequest; - - result = MIDISendSysex(newRequest); - if ( result != noErr ) { - free( newRequest ); - errorString_ = "MidiOutCore::sendMessage: error sending MIDI to virtual destinations."; - error( RtMidiError::WARNING, errorString_ ); - return; - } - return; - } - else if ( nBytes > 3 ) { + if ( message[0] != 0xF0 && nBytes > 3 ) { errorString_ = "MidiOutCore::sendMessage: message format problem ... not sysex but > 3 bytes?"; error( RtMidiError::WARNING, errorString_ ); return; } - */ - MIDIPacketList packetList; - MIDIPacket *packet = MIDIPacketListInit( &packetList ); - packet = MIDIPacketListAdd( &packetList, sizeof(packetList), packet, timeStamp, nBytes, (const Byte *) &message->at( 0 ) ); + Byte buffer[nBytes+(sizeof(MIDIPacketList))]; + ByteCount listSize = sizeof(buffer); + MIDIPacketList *packetList = (MIDIPacketList*)buffer; + MIDIPacket *packet = MIDIPacketListInit( packetList ); + + ByteCount remainingBytes = nBytes; + while (remainingBytes && packet) { + ByteCount bytesForPacket = remainingBytes > 65535 ? 65535 : remainingBytes; // 65535 = maximum size of a MIDIPacket + const Byte* dataStartPtr = (const Byte *) &message[nBytes - remainingBytes]; + packet = MIDIPacketListAdd( packetList, listSize, packet, timeStamp, bytesForPacket, dataStartPtr); + remainingBytes -= bytesForPacket; + } + if ( !packet ) { errorString_ = "MidiOutCore::sendMessage: could not allocate packet list"; error( RtMidiError::DRIVER_ERROR, errorString_ ); @@ -1154,7 +1192,7 @@ void MidiOutCore :: sendMessage( std::vector *message ) // Send to any destinations that may have connected to us. if ( data->endpoint ) { - result = MIDIReceived( data->endpoint, &packetList ); + result = MIDIReceived( data->endpoint, packetList ); if ( result != noErr ) { errorString_ = "MidiOutCore::sendMessage: error sending MIDI to virtual destinations."; error( RtMidiError::WARNING, errorString_ ); @@ -1163,7 +1201,7 @@ void MidiOutCore :: sendMessage( std::vector *message ) // And send to an explicit destination port if we're connected. if ( connected_ ) { - result = MIDISend( data->port, data->destinationId, &packetList ); + result = MIDISend( data->port, data->destinationId, packetList ); if ( result != noErr ) { errorString_ = "MidiOutCore::sendMessage: error sending MIDI message to port."; error( RtMidiError::WARNING, errorString_ ); @@ -1211,7 +1249,7 @@ struct AlsaMidiData { unsigned char *buffer; pthread_t thread; pthread_t dummy_thread_id; - unsigned long long lastTime; + snd_seq_real_time_t lastTime; int queue_id; // an input queue is needed to get timestamped events int trigger_fds[2]; }; @@ -1229,7 +1267,7 @@ static void *alsaMidiHandler( void *ptr ) AlsaMidiData *apiData = static_cast (data->apiData); long nBytes; - unsigned long long time, lastTime; + double time; bool continueSysex = false; bool doDecode = false; MidiInApi::MidiMessage message; @@ -1371,20 +1409,36 @@ static void *alsaMidiHandler( void *ptr ) // Method 2: Use the ALSA sequencer event time data. // (thanks to Pedro Lopez-Cabanillas!). - time = ( ev->time.time.tv_sec * 1000000 ) + ( ev->time.time.tv_nsec/1000 ); - - /* - lastTime = time; - time -= apiData->lastTime; - apiData->lastTime = lastTime; + + // Using method from: + // https://www.gnu.org/software/libc/manual/html_node/Elapsed-Time.html + + // Perform the carry for the later subtraction by updating y. + snd_seq_real_time_t &x(ev->time.time); + snd_seq_real_time_t &y(apiData->lastTime); + if (x.tv_nsec < y.tv_nsec) { + int nsec = (y.tv_nsec - x.tv_nsec) / 1000000000 + 1; + y.tv_nsec -= 1000000000 * nsec; + y.tv_sec += nsec; + } + if (x.tv_nsec - y.tv_nsec > 1000000000) { + int nsec = (x.tv_nsec - y.tv_nsec) / 1000000000; + y.tv_nsec += 1000000000 * nsec; + y.tv_sec -= nsec; + } + + // Compute the time difference. + time = x.tv_sec - y.tv_sec + (x.tv_nsec - y.tv_nsec)*1e-9; + + apiData->lastTime = ev->time.time; + if ( data->firstMessage == true ) data->firstMessage = false; else - message.timeStamp = time * 0.000001; - */ - - // Absolute usec based time stamp - message.timeStamp = time; + message.timeStamp = time; + + // 10/02/19: absolute usec based time stamp + message.timeStamp *= 1000000; } else { #if defined(__RTMIDI_DEBUG__) @@ -1403,13 +1457,7 @@ static void *alsaMidiHandler( void *ptr ) } else { // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else + if (!data->queue.push(message)) std::cerr << "\nMidiInAlsa: message queue limit reached!!\n\n"; } } @@ -1421,7 +1469,7 @@ static void *alsaMidiHandler( void *ptr ) return 0; } -MidiInAlsa :: MidiInAlsa( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) +MidiInAlsa :: MidiInAlsa( const std::string &clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { initialize( clientName ); } @@ -1515,7 +1563,10 @@ unsigned int portInfo( snd_seq_t *seq, snd_seq_port_info_t *pinfo, unsigned int snd_seq_port_info_set_port( pinfo, -1 ); while ( snd_seq_query_next_port( seq, pinfo ) >= 0 ) { unsigned int atyp = snd_seq_port_info_get_type( pinfo ); - if ( ( atyp & SND_SEQ_PORT_TYPE_MIDI_GENERIC ) == 0 ) continue; + if ( ( ( atyp & SND_SEQ_PORT_TYPE_MIDI_GENERIC ) == 0 ) && + ( ( atyp & SND_SEQ_PORT_TYPE_SYNTH ) == 0 ) && + ( ( atyp & SND_SEQ_PORT_TYPE_APPLICATION ) == 0 ) ) continue; + unsigned int caps = snd_seq_port_info_get_capability( pinfo ); if ( ( caps & type ) != type ) continue; if ( count == portNumber ) return 1; @@ -1551,6 +1602,8 @@ std::string MidiInAlsa :: getPortName( unsigned int portNumber ) snd_seq_get_any_client_info( data->seq, cnum, cinfo ); std::ostringstream os; os << snd_seq_client_info_get_name( cinfo ); + os << ":"; + os << snd_seq_port_info_get_name( pinfo ); os << " "; // These lines added to make sure devices are listed os << snd_seq_port_info_get_client( pinfo ); // with full portnames added to ensure individual device names os << ":"; @@ -1565,7 +1618,7 @@ std::string MidiInAlsa :: getPortName( unsigned int portNumber ) return stringName; } -void MidiInAlsa :: openPort( unsigned int portNumber, const std::string portName ) +void MidiInAlsa :: openPort( unsigned int portNumber, const std::string &portName ) { if ( connected_ ) { errorString_ = "MidiInAlsa::openPort: a valid connection already exists!"; @@ -1594,6 +1647,7 @@ void MidiInAlsa :: openPort( unsigned int portNumber, const std::string portName snd_seq_addr_t sender, receiver; sender.client = snd_seq_port_info_get_client( src_pinfo ); sender.port = snd_seq_port_info_get_port( src_pinfo ); + receiver.client = snd_seq_client_id( data->seq ); snd_seq_port_info_t *pinfo; snd_seq_port_info_alloca( &pinfo ); @@ -1623,7 +1677,6 @@ void MidiInAlsa :: openPort( unsigned int portNumber, const std::string portName data->vport = snd_seq_port_info_get_port(pinfo); } - receiver.client = snd_seq_port_info_get_client( pinfo ); receiver.port = data->vport; if ( !data->subscription ) { @@ -1673,7 +1726,7 @@ void MidiInAlsa :: openPort( unsigned int portNumber, const std::string portName connected_ = true; } -void MidiInAlsa :: openVirtualPort( std::string portName ) +void MidiInAlsa :: openVirtualPort( const std::string &portName ) { AlsaMidiData *data = static_cast (apiData_); if ( data->vport < 0 ) { @@ -1768,7 +1821,7 @@ void MidiInAlsa :: closePort( void ) // Class Definitions: MidiOutAlsa //*********************************************************************// -MidiOutAlsa :: MidiOutAlsa( const std::string clientName ) : MidiOutApi() +MidiOutAlsa :: MidiOutAlsa( const std::string &clientName ) : MidiOutApi() { initialize( clientName ); } @@ -1850,6 +1903,8 @@ std::string MidiOutAlsa :: getPortName( unsigned int portNumber ) snd_seq_get_any_client_info( data->seq, cnum, cinfo ); std::ostringstream os; os << snd_seq_client_info_get_name(cinfo); + os << ":"; + os << snd_seq_port_info_get_name( pinfo ); os << " "; // These lines added to make sure devices are listed os << snd_seq_port_info_get_client( pinfo ); // with full portnames added to ensure individual device names os << ":"; @@ -1864,7 +1919,7 @@ std::string MidiOutAlsa :: getPortName( unsigned int portNumber ) return stringName; } -void MidiOutAlsa :: openPort( unsigned int portNumber, const std::string portName ) +void MidiOutAlsa :: openPort( unsigned int portNumber, const std::string &portName ) { if ( connected_ ) { errorString_ = "MidiOutAlsa::openPort: a valid connection already exists!"; @@ -1935,11 +1990,12 @@ void MidiOutAlsa :: closePort( void ) AlsaMidiData *data = static_cast (apiData_); snd_seq_unsubscribe_port( data->seq, data->subscription ); snd_seq_port_subscribe_free( data->subscription ); + data->subscription = 0; connected_ = false; } } -void MidiOutAlsa :: openVirtualPort( std::string portName ) +void MidiOutAlsa :: openVirtualPort( const std::string &portName ) { AlsaMidiData *data = static_cast (apiData_); if ( data->vport < 0 ) { @@ -1954,11 +2010,11 @@ void MidiOutAlsa :: openVirtualPort( std::string portName ) } } -void MidiOutAlsa :: sendMessage( std::vector *message ) +void MidiOutAlsa :: sendMessage( const unsigned char *message, size_t size ) { int result; AlsaMidiData *data = static_cast (apiData_); - unsigned int nBytes = message->size(); + unsigned int nBytes = static_cast (size); if ( nBytes > data->bufferSize ) { data->bufferSize = nBytes; result = snd_midi_event_resize_buffer ( data->coder, nBytes); @@ -1981,7 +2037,7 @@ void MidiOutAlsa :: sendMessage( std::vector *message ) snd_seq_ev_set_source(&ev, data->vport); snd_seq_ev_set_subs(&ev); snd_seq_ev_set_direct(&ev); - for ( unsigned int i=0; ibuffer[i] = message->at(i); + for ( unsigned int i=0; ibuffer[i] = message[i]; result = snd_midi_event_encode( data->coder, data->buffer, (long)nBytes, &ev ); if ( result < (int)nBytes ) { errorString_ = "MidiOutAlsa::sendMessage: event parsing error!"; @@ -2021,6 +2077,34 @@ void MidiOutAlsa :: sendMessage( std::vector *message ) #include #include +// Convert a null-terminated wide string or ANSI-encoded string to UTF-8. +static std::string ConvertToUTF8(const TCHAR *str) +{ + std::string u8str; + const WCHAR *wstr = L""; +#if defined( UNICODE ) || defined( _UNICODE ) + wstr = str; +#else + // Convert from ANSI encoding to wide string + int wlength = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 ); + std::wstring wstrtemp; + if ( wlength ) + { + wstrtemp.assign( wlength - 1, 0 ); + MultiByteToWideChar( CP_ACP, 0, str, -1, &wstrtemp[0], wlength ); + wstr = &wstrtemp[0]; + } +#endif + // Convert from wide string to UTF-8 + int length = WideCharToMultiByte( CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL ); + if ( length ) + { + u8str.assign( length - 1, 0 ); + length = WideCharToMultiByte( CP_UTF8, 0, wstr, -1, &u8str[0], length, NULL, NULL ); + } + return u8str; +} + #define RT_SYSEX_BUFFER_SIZE 1024 #define RT_SYSEX_BUFFER_COUNT 4 @@ -2052,19 +2136,18 @@ static void CALLBACK midiInputCallback( HMIDIIN /*hmin*/, MidiInApi::RtMidiInData *data = (MidiInApi::RtMidiInData *)instancePtr; WinMidiData *apiData = static_cast (data->apiData); - // Calculate time stamp. /* + // Calculate time stamp. if ( data->firstMessage == true ) { apiData->message.timeStamp = 0.0; data->firstMessage = false; } else apiData->message.timeStamp = (double) ( timestamp - apiData->lastTime ) * 0.001; apiData->lastTime = timestamp; - */ - - // Absolute usec based time stamp - apiData->message.timeStamp = double(timestamp - apiData->lastTime) * 1000; + + // 10/02/19: absolute usec based time stamp + apiData->message.timeStamp = double(timestamp) * 1000; if ( inputStatus == MIM_DATA ) { // Channel or system message @@ -2131,21 +2214,15 @@ static void CALLBACK midiInputCallback( HMIDIIN /*hmin*/, } else { // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = apiData->message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else - std::cerr << "\nRtMidiIn: message queue limit reached!!\n\n"; + if (!data->queue.push(apiData->message)) + std::cerr << "\nMidiInWinMM: message queue limit reached!!\n\n"; } // Clear the vector for the next input message. apiData->message.bytes.clear(); } -MidiInWinMM :: MidiInWinMM( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) +MidiInWinMM :: MidiInWinMM( const std::string &clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { initialize( clientName ); } @@ -2184,7 +2261,7 @@ void MidiInWinMM :: initialize( const std::string& /*clientName*/ ) } } -void MidiInWinMM :: openPort( unsigned int portNumber, const std::string /*portName*/ ) +void MidiInWinMM :: openPort( unsigned int portNumber, const std::string &/*portName*/ ) { if ( connected_ ) { errorString_ = "MidiInWinMM::openPort: a valid connection already exists!"; @@ -2230,6 +2307,7 @@ void MidiInWinMM :: openPort( unsigned int portNumber, const std::string /*portN result = midiInPrepareHeader( data->inHandle, data->sysexBuffer[i], sizeof(MIDIHDR) ); if ( result != MMSYSERR_NOERROR ) { midiInClose( data->inHandle ); + data->inHandle = 0; errorString_ = "MidiInWinMM::openPort: error starting Windows MM MIDI input port (PrepareHeader)."; error( RtMidiError::DRIVER_ERROR, errorString_ ); return; @@ -2239,6 +2317,7 @@ void MidiInWinMM :: openPort( unsigned int portNumber, const std::string /*portN result = midiInAddBuffer( data->inHandle, data->sysexBuffer[i], sizeof(MIDIHDR) ); if ( result != MMSYSERR_NOERROR ) { midiInClose( data->inHandle ); + data->inHandle = 0; errorString_ = "MidiInWinMM::openPort: error starting Windows MM MIDI input port (AddBuffer)."; error( RtMidiError::DRIVER_ERROR, errorString_ ); return; @@ -2248,6 +2327,7 @@ void MidiInWinMM :: openPort( unsigned int portNumber, const std::string /*portN result = midiInStart( data->inHandle ); if ( result != MMSYSERR_NOERROR ) { midiInClose( data->inHandle ); + data->inHandle = 0; errorString_ = "MidiInWinMM::openPort: error starting Windows MM MIDI input port."; error( RtMidiError::DRIVER_ERROR, errorString_ ); return; @@ -2256,7 +2336,7 @@ void MidiInWinMM :: openPort( unsigned int portNumber, const std::string /*portN connected_ = true; } -void MidiInWinMM :: openVirtualPort( std::string /*portName*/ ) +void MidiInWinMM :: openVirtualPort( const std::string &/*portName*/ ) { // This function cannot be implemented for the Windows MM MIDI API. errorString_ = "MidiInWinMM::openVirtualPort: cannot be implemented in Windows MM MIDI API!"; @@ -2277,6 +2357,7 @@ void MidiInWinMM :: closePort( void ) delete [] data->sysexBuffer[i]; if ( result != MMSYSERR_NOERROR ) { midiInClose( data->inHandle ); + data->inHandle = 0; errorString_ = "MidiInWinMM::openPort: error closing Windows MM MIDI input port (midiInUnprepareHeader)."; error( RtMidiError::DRIVER_ERROR, errorString_ ); return; @@ -2284,6 +2365,7 @@ void MidiInWinMM :: closePort( void ) } midiInClose( data->inHandle ); + data->inHandle = 0; connected_ = false; LeaveCriticalSection( &(data->_mutex) ); } @@ -2308,22 +2390,17 @@ std::string MidiInWinMM :: getPortName( unsigned int portNumber ) MIDIINCAPS deviceCaps; midiInGetDevCaps( portNumber, &deviceCaps, sizeof(MIDIINCAPS)); - -#if defined( UNICODE ) || defined( _UNICODE ) - int length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, -1, NULL, 0, NULL, NULL) - 1; - stringName.assign( length, 0 ); - length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, static_cast(wcslen(deviceCaps.szPname)), &stringName[0], length, NULL, NULL); -#else - stringName = std::string( deviceCaps.szPname ); -#endif + stringName = ConvertToUTF8( deviceCaps.szPname ); // Next lines added to add the portNumber to the name so that // the device's names are sure to be listed with individual names // even when they have the same brand name +#ifdef RTMIDI_ENSURE_UNIQUE_PORTNAMES std::ostringstream os; os << " "; os << portNumber; stringName += os.str(); +#endif return stringName; } @@ -2333,7 +2410,7 @@ std::string MidiInWinMM :: getPortName( unsigned int portNumber ) // Class Definitions: MidiOutWinMM //*********************************************************************// -MidiOutWinMM :: MidiOutWinMM( const std::string clientName ) : MidiOutApi() +MidiOutWinMM :: MidiOutWinMM( const std::string &clientName ) : MidiOutApi() { initialize( clientName ); } @@ -2382,19 +2459,22 @@ std::string MidiOutWinMM :: getPortName( unsigned int portNumber ) MIDIOUTCAPS deviceCaps; midiOutGetDevCaps( portNumber, &deviceCaps, sizeof(MIDIOUTCAPS)); + stringName = ConvertToUTF8( deviceCaps.szPname ); -#if defined( UNICODE ) || defined( _UNICODE ) - int length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, -1, NULL, 0, NULL, NULL) - 1; - stringName.assign( length, 0 ); - length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, static_cast(wcslen(deviceCaps.szPname)), &stringName[0], length, NULL, NULL); -#else - stringName = std::string( deviceCaps.szPname ); + // Next lines added to add the portNumber to the name so that + // the device's names are sure to be listed with individual names + // even when they have the same brand name + std::ostringstream os; +#ifdef RTMIDI_ENSURE_UNIQUE_PORTNAMES + os << " "; + os << portNumber; + stringName += os.str(); #endif return stringName; } -void MidiOutWinMM :: openPort( unsigned int portNumber, const std::string /*portName*/ ) +void MidiOutWinMM :: openPort( unsigned int portNumber, const std::string &/*portName*/ ) { if ( connected_ ) { errorString_ = "MidiOutWinMM::openPort: a valid connection already exists!"; @@ -2438,22 +2518,23 @@ void MidiOutWinMM :: closePort( void ) WinMidiData *data = static_cast (apiData_); midiOutReset( data->outHandle ); midiOutClose( data->outHandle ); + data->outHandle = 0; connected_ = false; } } -void MidiOutWinMM :: openVirtualPort( std::string /*portName*/ ) +void MidiOutWinMM :: openVirtualPort( const std::string &/*portName*/ ) { // This function cannot be implemented for the Windows MM MIDI API. errorString_ = "MidiOutWinMM::openVirtualPort: cannot be implemented in Windows MM MIDI API!"; error( RtMidiError::WARNING, errorString_ ); } -void MidiOutWinMM :: sendMessage( std::vector *message ) +void MidiOutWinMM :: sendMessage( const unsigned char *message, size_t size ) { if ( !connected_ ) return; - unsigned int nBytes = static_cast(message->size()); + unsigned int nBytes = static_cast(size); if ( nBytes == 0 ) { errorString_ = "MidiOutWinMM::sendMessage: message argument is empty!"; error( RtMidiError::WARNING, errorString_ ); @@ -2462,7 +2543,7 @@ void MidiOutWinMM :: sendMessage( std::vector *message ) MMRESULT result; WinMidiData *data = static_cast (apiData_); - if ( message->at(0) == 0xF0 ) { // Sysex message + if ( message[0] == 0xF0 ) { // Sysex message // Allocate buffer for sysex data. char *buffer = (char *) malloc( nBytes ); @@ -2473,7 +2554,7 @@ void MidiOutWinMM :: sendMessage( std::vector *message ) } // Copy data to buffer. - for ( unsigned int i=0; iat(i); + for ( unsigned int i=0; i *message ) DWORD packet; unsigned char *ptr = (unsigned char *) &packet; for ( unsigned int i=0; iat(i); + *ptr = message[i]; ++ptr; } @@ -2544,6 +2625,9 @@ void MidiOutWinMM :: sendMessage( std::vector *message ) #include #include #include +#ifdef HAVE_SEMAPHORE + #include +#endif #define JACK_RINGBUFFER_SIZE 16384 // Default size for ringbuffer @@ -2553,6 +2637,10 @@ struct JackMidiData { jack_ringbuffer_t *buffSize; jack_ringbuffer_t *buffMessage; jack_time_t lastTime; +#ifdef HAVE_SEMAPHORE + sem_t sem_cleanup; + sem_t sem_needpost; +#endif MidiInApi :: RtMidiInData *rtMidiIn; }; @@ -2583,18 +2671,15 @@ static int jackProcessIn( jack_nframes_t nframes, void *arg ) for ( unsigned int i = 0; i < event.size; i++ ) message.bytes.push_back( event.buffer[i] ); - // TODO: incorrect time stamps... - // Compute the delta time. time = jack_get_time(); - if ( rtData->firstMessage == true ) rtData->firstMessage = false; else message.timeStamp = ( time - jData->lastTime ) * 0.000001; jData->lastTime = time; - + if ( !rtData->continueSysex ) { if ( rtData->usingCallback ) { RtMidiIn::RtMidiCallback callback = (RtMidiIn::RtMidiCallback) rtData->userCallback; @@ -2602,13 +2687,7 @@ static int jackProcessIn( jack_nframes_t nframes, void *arg ) } else { // As long as we haven't reached our queue size limit, push the message. - if ( rtData->queue.size < rtData->queue.ringSize ) { - rtData->queue.ring[rtData->queue.back++] = message; - if ( rtData->queue.back == rtData->queue.ringSize ) - rtData->queue.back = 0; - rtData->queue.size++; - } - else + if (!rtData->queue.push(message)) std::cerr << "\nMidiInJack: message queue limit reached!!\n\n"; } } @@ -2617,7 +2696,7 @@ static int jackProcessIn( jack_nframes_t nframes, void *arg ) return 0; } -MidiInJack :: MidiInJack( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) +MidiInJack :: MidiInJack( const std::string &clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { initialize( clientName ); } @@ -2642,7 +2721,7 @@ void MidiInJack :: connect() return; // Initialize JACK client - if ((data->client = jack_client_open( clientName.c_str(), JackNoStartServer, NULL )) == 0) { + if (( data->client = jack_client_open( clientName.c_str(), JackNoStartServer, NULL )) == 0) { errorString_ = "MidiInJack::initialize: JACK server not running?"; error( RtMidiError::WARNING, errorString_ ); return; @@ -2662,7 +2741,7 @@ MidiInJack :: ~MidiInJack() delete data; } -void MidiInJack :: openPort( unsigned int portNumber, const std::string portName ) +void MidiInJack :: openPort( unsigned int portNumber, const std::string &portName ) { JackMidiData *data = static_cast (apiData_); @@ -2684,7 +2763,7 @@ void MidiInJack :: openPort( unsigned int portNumber, const std::string portName jack_connect( data->client, name.c_str(), jack_port_name( data->port ) ); } -void MidiInJack :: openVirtualPort( const std::string portName ) +void MidiInJack :: openVirtualPort( const std::string &portName ) { JackMidiData *data = static_cast (apiData_); @@ -2783,10 +2862,15 @@ static int jackProcessOut( jack_nframes_t nframes, void *arg ) jack_ringbuffer_read( data->buffMessage, (char *) midiData, (size_t) space ); } +#ifdef HAVE_SEMAPHORE + if (!sem_trywait(&data->sem_needpost)) + sem_post(&data->sem_cleanup); +#endif + return 0; } -MidiOutJack :: MidiOutJack( const std::string clientName ) : MidiOutApi() +MidiOutJack :: MidiOutJack( const std::string &clientName ) : MidiOutApi() { initialize( clientName ); } @@ -2798,6 +2882,10 @@ void MidiOutJack :: initialize( const std::string& clientName ) data->port = NULL; data->client = NULL; +#ifdef HAVE_SEMAPHORE + sem_init(&data->sem_cleanup, 0, 0); + sem_init(&data->sem_needpost, 0, 0); +#endif this->clientName = clientName; connect(); @@ -2808,6 +2896,10 @@ void MidiOutJack :: connect() JackMidiData *data = static_cast (apiData_); if ( data->client ) return; + + // Initialize output ringbuffers + data->buffSize = jack_ringbuffer_create( JACK_RINGBUFFER_SIZE ); + data->buffMessage = jack_ringbuffer_create( JACK_RINGBUFFER_SIZE ); // Initialize JACK client if (( data->client = jack_client_open( clientName.c_str(), JackNoStartServer, NULL )) == 0) { @@ -2817,8 +2909,6 @@ void MidiOutJack :: connect() } jack_set_process_callback( data->client, jackProcessOut, data ); - data->buffSize = jack_ringbuffer_create( JACK_RINGBUFFER_SIZE ); - data->buffMessage = jack_ringbuffer_create( JACK_RINGBUFFER_SIZE ); jack_activate( data->client ); } @@ -2826,18 +2916,23 @@ MidiOutJack :: ~MidiOutJack() { JackMidiData *data = static_cast (apiData_); closePort(); - + + // Cleanup + jack_ringbuffer_free( data->buffSize ); + jack_ringbuffer_free( data->buffMessage ); if ( data->client ) { - // Cleanup jack_client_close( data->client ); - jack_ringbuffer_free( data->buffSize ); - jack_ringbuffer_free( data->buffMessage ); } +#ifdef HAVE_SEMAPHORE + sem_destroy(&data->sem_cleanup); + sem_destroy(&data->sem_needpost); +#endif + delete data; } -void MidiOutJack :: openPort( unsigned int portNumber, const std::string portName ) +void MidiOutJack :: openPort( unsigned int portNumber, const std::string &portName ) { JackMidiData *data = static_cast (apiData_); @@ -2859,7 +2954,7 @@ void MidiOutJack :: openPort( unsigned int portNumber, const std::string portNam jack_connect( data->client, jack_port_name( data->port ), name.c_str() ); } -void MidiOutJack :: openVirtualPort( const std::string portName ) +void MidiOutJack :: openVirtualPort( const std::string &portName ) { JackMidiData *data = static_cast (apiData_); @@ -2930,18 +3025,29 @@ void MidiOutJack :: closePort() JackMidiData *data = static_cast (apiData_); if ( data->port == NULL ) return; + +#ifdef HAVE_SEMAPHORE + struct timespec ts; + if (clock_gettime(CLOCK_REALTIME, &ts) != -1) + { + ts.tv_sec += 1; // wait max one second + sem_post(&data->sem_needpost); + sem_timedwait(&data->sem_cleanup, &ts); + } +#endif + jack_port_unregister( data->client, data->port ); data->port = NULL; } -void MidiOutJack :: sendMessage( std::vector *message ) +void MidiOutJack :: sendMessage( const unsigned char *message, size_t size ) { - int nBytes = message->size(); + int nBytes = static_cast(size); JackMidiData *data = static_cast (apiData_); // Write full message to buffer - jack_ringbuffer_write( data->buffMessage, ( const char * ) &( *message )[0], - message->size() ); + jack_ringbuffer_write( data->buffMessage, ( const char * ) message, + nBytes ); jack_ringbuffer_write( data->buffSize, ( char * ) &nBytes, sizeof( nBytes ) ); } diff --git a/source/DEINDUGens/include/faust/midi/RtMidi.h b/source/DEINDUGens/include/faust/midi/RtMidi.h index 73dedeb2d0..2be9f232ab 100644 --- a/source/DEINDUGens/include/faust/midi/RtMidi.h +++ b/source/DEINDUGens/include/faust/midi/RtMidi.h @@ -1,49 +1,49 @@ /* - File: CAHostTimeBase.h - Abstract: Part of CoreAudio Utility Classes - Version: 1.0.3 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2013 Apple Inc. All Rights Reserved. - -*/ + File: CAHostTimeBase.h + Abstract: Part of CoreAudio Utility Classes + Version: 1.0.3 + + Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple + Inc. ("Apple") in consideration of your agreement to the following + terms, and your use, installation, modification or redistribution of + this Apple software constitutes acceptance of these terms. If you do + not agree with these terms, please do not use, install, modify or + redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a personal, non-exclusive + license, under Apple's copyrights in this original Apple software (the + "Apple Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Inc. may + be used to endorse or promote products derived from the Apple Software + without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or + implied, are granted by Apple herein, including but not limited to any + patent rights that may be infringed by your derivative works or by other + works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE + MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Copyright (C) 2013 Apple Inc. All Rights Reserved. + */ + #if !defined(__CAHostTimeBase_h__) #define __CAHostTimeBase_h__ @@ -54,17 +54,17 @@ //============================================================================= #if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) - #include +#include #else - #include +#include #endif #if TARGET_OS_MAC - #include +#include #elif TARGET_OS_WIN32 - #include +#include #else - #error Unsupported operating system +#error Unsupported operating system #endif //============================================================================= @@ -75,147 +75,147 @@ class CAHostTimeBase { - + public: - static UInt64 ConvertToNanos(UInt64 inHostTime); - static UInt64 ConvertFromNanos(UInt64 inNanos); - - static UInt64 GetTheCurrentTime(); + static UInt64 ConvertToNanos(UInt64 inHostTime); + static UInt64 ConvertFromNanos(UInt64 inNanos); + + static UInt64 GetTheCurrentTime(); #if TARGET_OS_MAC - static UInt64 GetCurrentTime() { return GetTheCurrentTime(); } + static UInt64 GetCurrentTime() { return GetTheCurrentTime(); } #endif - static UInt64 GetCurrentTimeInNanos(); - - static Float64 GetFrequency() { if(!sIsInited) { Initialize(); } return sFrequency; } - static Float64 GetInverseFrequency() { if(!sIsInited) { Initialize(); } return sInverseFrequency; } - static UInt32 GetMinimumDelta() { if(!sIsInited) { Initialize(); } return sMinDelta; } - - static UInt64 AbsoluteHostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime); - static SInt64 HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime); + static UInt64 GetCurrentTimeInNanos(); + + static Float64 GetFrequency() { if(!sIsInited) { Initialize(); } return sFrequency; } + static Float64 GetInverseFrequency() { if(!sIsInited) { Initialize(); } return sInverseFrequency; } + static UInt32 GetMinimumDelta() { if(!sIsInited) { Initialize(); } return sMinDelta; } + + static UInt64 AbsoluteHostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime); + static SInt64 HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime); static void Initialize(); - + private: - - static bool sIsInited; - - static Float64 sFrequency; - static Float64 sInverseFrequency; - static UInt32 sMinDelta; - static UInt32 sToNanosNumerator; - static UInt32 sToNanosDenominator; - static UInt32 sFromNanosNumerator; - static UInt32 sFromNanosDenominator; - static bool sUseMicroseconds; + + static bool sIsInited; + + static Float64 sFrequency; + static Float64 sInverseFrequency; + static UInt32 sMinDelta; + static UInt32 sToNanosNumerator; + static UInt32 sToNanosDenominator; + static UInt32 sFromNanosNumerator; + static UInt32 sFromNanosDenominator; + static bool sUseMicroseconds; #if Track_Host_TimeBase - static UInt64 sLastTime; + static UInt64 sLastTime; #endif }; inline UInt64 CAHostTimeBase::GetTheCurrentTime() { - UInt64 theTime = 0; - - #if TARGET_OS_MAC - theTime = mach_absolute_time(); - - #elif TARGET_OS_WIN32 - LARGE_INTEGER theValue; - QueryPerformanceCounter(&theValue); - theTime = *((UInt64*)&theValue); - #endif - - #if Track_Host_TimeBase - if(sLastTime != 0) - { - if(theTime <= sLastTime) - { - DebugMessageN2("CAHostTimeBase::GetTheCurrentTime: the current time is earlier than the last time, now: %qd, then: %qd", theTime, sLastTime); - } - sLastTime = theTime; - } - else - { - sLastTime = theTime; - } - #endif - - return theTime; + UInt64 theTime = 0; + +#if TARGET_OS_MAC + theTime = mach_absolute_time(); + +#elif TARGET_OS_WIN32 + LARGE_INTEGER theValue; + QueryPerformanceCounter(&theValue); + theTime = *((UInt64*)&theValue); +#endif + +#if Track_Host_TimeBase + if(sLastTime != 0) + { + if(theTime <= sLastTime) + { + DebugMessageN2("CAHostTimeBase::GetTheCurrentTime: the current time is earlier than the last time, now: %qd, then: %qd", theTime, sLastTime); + } + sLastTime = theTime; + } + else + { + sLastTime = theTime; + } +#endif + + return theTime; } inline UInt64 CAHostTimeBase::ConvertToNanos(UInt64 inHostTime) { - if(!sIsInited) - { - Initialize(); - } - - Float64 theNumerator = static_cast(sToNanosNumerator); - Float64 theDenominator = static_cast(sToNanosDenominator); - Float64 theHostTime = static_cast(inHostTime); - - Float64 thePartialAnswer = theHostTime / theDenominator; - Float64 theFloatAnswer = thePartialAnswer * theNumerator; - UInt64 theAnswer = static_cast(theFloatAnswer); - - return theAnswer; + if(!sIsInited) + { + Initialize(); + } + + Float64 theNumerator = static_cast(sToNanosNumerator); + Float64 theDenominator = static_cast(sToNanosDenominator); + Float64 theHostTime = static_cast(inHostTime); + + Float64 thePartialAnswer = theHostTime / theDenominator; + Float64 theFloatAnswer = thePartialAnswer * theNumerator; + UInt64 theAnswer = static_cast(theFloatAnswer); + + return theAnswer; } inline UInt64 CAHostTimeBase::ConvertFromNanos(UInt64 inNanos) { - if(!sIsInited) - { - Initialize(); - } - - Float64 theNumerator = static_cast(sToNanosNumerator); - Float64 theDenominator = static_cast(sToNanosDenominator); - Float64 theNanos = static_cast(inNanos); - - Float64 thePartialAnswer = theNanos / theNumerator; - Float64 theFloatAnswer = thePartialAnswer * theDenominator; - UInt64 theAnswer = static_cast(theFloatAnswer); - - return theAnswer; + if(!sIsInited) + { + Initialize(); + } + + Float64 theNumerator = static_cast(sToNanosNumerator); + Float64 theDenominator = static_cast(sToNanosDenominator); + Float64 theNanos = static_cast(inNanos); + + Float64 thePartialAnswer = theNanos / theNumerator; + Float64 theFloatAnswer = thePartialAnswer * theDenominator; + UInt64 theAnswer = static_cast(theFloatAnswer); + + return theAnswer; } inline UInt64 CAHostTimeBase::GetCurrentTimeInNanos() { - return ConvertToNanos(GetTheCurrentTime()); + return ConvertToNanos(GetTheCurrentTime()); } inline UInt64 CAHostTimeBase::AbsoluteHostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime) { - UInt64 theAnswer; - - if(inStartTime <= inEndTime) - { - theAnswer = inEndTime - inStartTime; - } - else - { - theAnswer = inStartTime - inEndTime; - } - - return ConvertToNanos(theAnswer); + UInt64 theAnswer; + + if(inStartTime <= inEndTime) + { + theAnswer = inEndTime - inStartTime; + } + else + { + theAnswer = inStartTime - inEndTime; + } + + return ConvertToNanos(theAnswer); } inline SInt64 CAHostTimeBase::HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime) { - SInt64 theAnswer; - SInt64 theSign = 1; - - if(inStartTime <= inEndTime) - { - theAnswer = inEndTime - inStartTime; - } - else - { - theAnswer = inStartTime - inEndTime; - theSign = -1; - } - - return theSign * ConvertToNanos(theAnswer); + SInt64 theAnswer; + SInt64 theSign = 1; + + if(inStartTime <= inEndTime) + { + theAnswer = inEndTime - inStartTime; + } + else + { + theAnswer = inStartTime - inEndTime; + theSign = -1; + } + + return theSign * ConvertToNanos(theAnswer); } #endif // __APPLE__ @@ -232,7 +232,7 @@ inline SInt64 CAHostTimeBase::HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndT RtMidi WWW site: http://music.mcgill.ca/~gary/rtmidi/ RtMidi: realtime MIDI i/o C++ classes - Copyright (c) 2003-2014 Gary P. Scavone + Copyright (c) 2003-2017 Gary P. Scavone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files @@ -267,7 +267,7 @@ inline SInt64 CAHostTimeBase::HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndT #ifndef RTMIDI_H #define RTMIDI_H -#define RTMIDI_VERSION "2.1.0" +#define RTMIDI_VERSION "3.0.0" #include #include @@ -287,6 +287,7 @@ inline SInt64 CAHostTimeBase::HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndT #define __WINDOWS_MM__ 1 #endif + /************************************************************************/ /*! \class RtMidiError \brief Exception handling class for RtMidi. @@ -346,7 +347,7 @@ class RtMidiError : public std::exception Note that class behaviour is undefined after a critical error (not a warning) is reported. */ -typedef void (*RtMidiErrorCallback)( RtMidiError::Type type, const std::string &errorText ); +typedef void (*RtMidiErrorCallback)( RtMidiError::Type type, const std::string &errorText, void *userData ); class MidiApi; @@ -376,10 +377,10 @@ class RtMidi static void getCompiledApi( std::vector &apis ) throw(); //! Pure virtual openPort() function. - virtual void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi" ) ) = 0; + virtual void openPort( unsigned int portNumber = 0, const std::string &portName = std::string( "RtMidi" ) ) = 0; //! Pure virtual openVirtualPort() function. - virtual void openVirtualPort( const std::string portName = std::string( "RtMidi" ) ) = 0; + virtual void openVirtualPort( const std::string &portName = std::string( "RtMidi" ) ) = 0; //! Pure virtual getPortCount() function. virtual unsigned int getPortCount() = 0; @@ -391,6 +392,10 @@ class RtMidi virtual void closePort( void ) = 0; //! Returns true if a port is open and false if not. + /*! + Note that this only applies to connections made with the openPort() + function, not to virtual ports. + */ virtual bool isPortOpen( void ) const = 0; //! Set an error callback function to be invoked when an error has occured. @@ -398,7 +403,7 @@ class RtMidi The callback function will be called whenever an error has occured. It is best to set the error callback function before opening a port. */ - virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL ) = 0; + virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 ) = 0; protected: @@ -422,7 +427,7 @@ class RtMidi possible to open a virtual input port to which other MIDI software clients can connect. - by Gary P. Scavone, 2003-2014. + by Gary P. Scavone, 2003-2017. */ /**********************************************************************/ @@ -466,7 +471,7 @@ class RtMidiIn : public RtMidi \param queueSizeLimit An optional size of the MIDI input queue can be specified. */ RtMidiIn( RtMidi::Api api=UNSPECIFIED, - const std::string clientName = std::string( "RtMidi Input Client"), + const std::string& clientName = "RtMidi Input Client", unsigned int queueSizeLimit = 100 ); //! If a MIDI connection is still open, it will be closed by the destructor. @@ -481,7 +486,7 @@ class RtMidiIn : public RtMidi Otherwise, the default or first port found is opened. \param portName An optional name for the application port that is used to connect to portId can be specified. */ - void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Input" ) ); + void openPort( unsigned int portNumber = 0, const std::string &portName = std::string( "RtMidi Input" ) ); //! Create a virtual input port, with optional name, to allow software connections (OS X, JACK and ALSA only). /*! @@ -493,7 +498,7 @@ class RtMidiIn : public RtMidi \param portName An optional name for the application port that is used to connect to portId can be specified. */ - void openVirtualPort( const std::string portName = std::string( "RtMidi Input" ) ); + void openVirtualPort( const std::string &portName = std::string( "RtMidi Input" ) ); //! Set a callback function to be invoked for incoming MIDI messages. /*! @@ -519,6 +524,10 @@ class RtMidiIn : public RtMidi void closePort( void ); //! Returns true if a port is open and false if not. + /*! + Note that this only applies to connections made with the openPort() + function, not to virtual ports. + */ virtual bool isPortOpen() const; //! Return the number of available MIDI input ports. @@ -530,7 +539,8 @@ class RtMidiIn : public RtMidi //! Return a string identifier for the specified MIDI input port number. /*! \return The name of the port with the given Id is returned. - \retval An empty string is returned if an invalid port specifier is provided. + \retval An empty string is returned if an invalid port specifier + is provided. User code should assume a UTF-8 encoding. */ std::string getPortName( unsigned int portNumber = 0 ); @@ -559,10 +569,10 @@ class RtMidiIn : public RtMidi The callback function will be called whenever an error has occured. It is best to set the error callback function before opening a port. */ - virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL ); + virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 ); protected: - void openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit ); + void openMidiApi( RtMidi::Api api, const std::string &clientName, unsigned int queueSizeLimit ); }; @@ -578,7 +588,7 @@ class RtMidiIn : public RtMidi OS-X, Linux ALSA and JACK MIDI APIs, it is also possible to open a virtual port to which other MIDI software clients can connect. - by Gary P. Scavone, 2003-2014. + by Gary P. Scavone, 2003-2017. */ /**********************************************************************/ @@ -595,7 +605,7 @@ class RtMidiOut : public RtMidi JACK (OS-X). */ RtMidiOut( RtMidi::Api api=UNSPECIFIED, - const std::string clientName = std::string( "RtMidi Output Client") ); + const std::string& clientName = "RtMidi Output Client" ); //! The destructor closes any open MIDI connections. ~RtMidiOut( void ) throw(); @@ -610,12 +620,16 @@ class RtMidiOut : public RtMidi exception is thrown if an error occurs while attempting to make the port connection. */ - void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Output" ) ); + void openPort( unsigned int portNumber = 0, const std::string &portName = std::string( "RtMidi Output" ) ); //! Close an open MIDI connection (if one exists). void closePort( void ); //! Returns true if a port is open and false if not. + /*! + Note that this only applies to connections made with the openPort() + function, not to virtual ports. + */ virtual bool isPortOpen() const; //! Create a virtual output port, with optional name, to allow software connections (OS X, JACK and ALSA only). @@ -627,14 +641,16 @@ class RtMidiOut : public RtMidi An exception is thrown if an error occurs while attempting to create the virtual port. */ - void openVirtualPort( const std::string portName = std::string( "RtMidi Output" ) ); + void openVirtualPort( const std::string &portName = std::string( "RtMidi Output" ) ); //! Return the number of available MIDI output ports. unsigned int getPortCount( void ); //! Return a string identifier for the specified MIDI port type and number. /*! - An empty string is returned if an invalid port specifier is provided. + \return The name of the port with the given Id is returned. + \retval An empty string is returned if an invalid port specifier + is provided. User code should assume a UTF-8 encoding. */ std::string getPortName( unsigned int portNumber = 0 ); @@ -643,17 +659,27 @@ class RtMidiOut : public RtMidi An exception is thrown if an error occurs during output or an output connection was not previously established. */ - void sendMessage( std::vector *message ); + void sendMessage( const std::vector *message ); + + //! Immediately send a single message out an open MIDI output port. + /*! + An exception is thrown if an error occurs during output or an + output connection was not previously established. + + \param message A pointer to the MIDI message as raw bytes + \param size Length of the MIDI message in bytes + */ + void sendMessage( const unsigned char *message, size_t size ); //! Set an error callback function to be invoked when an error has occured. /*! The callback function will be called whenever an error has occured. It is best to set the error callback function before opening a port. */ - virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL ); + virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 ); protected: - void openMidiApi( RtMidi::Api api, const std::string clientName ); + void openMidiApi( RtMidi::Api api, const std::string &clientName ); }; @@ -677,15 +703,15 @@ class MidiApi MidiApi(); virtual ~MidiApi(); virtual RtMidi::Api getCurrentApi( void ) = 0; - virtual void openPort( unsigned int portNumber, const std::string portName ) = 0; - virtual void openVirtualPort( const std::string portName ) = 0; + virtual void openPort( unsigned int portNumber, const std::string &portName ) = 0; + virtual void openVirtualPort( const std::string &portName ) = 0; virtual void closePort( void ) = 0; virtual unsigned int getPortCount( void ) = 0; virtual std::string getPortName( unsigned int portNumber ) = 0; inline bool isPortOpen() const { return connected_; } - void setErrorCallback( RtMidiErrorCallback errorCallback ); + void setErrorCallback( RtMidiErrorCallback errorCallback, void *userData ); //! A basic error reporting function for RtMidi classes. void error( RtMidiError::Type type, std::string errorString ); @@ -697,6 +723,8 @@ class MidiApi bool connected_; std::string errorString_; RtMidiErrorCallback errorCallback_; + bool firstErrorOccurred_; + void *errorCallbackUserData_; }; class MidiInApi : public MidiApi @@ -714,6 +742,8 @@ class MidiInApi : public MidiApi // messages. Each message represents one and only one MIDI message. struct MidiMessage { std::vector bytes; + + //! Time in seconds elapsed since the previous message double timeStamp; // Default constructor. @@ -724,13 +754,16 @@ class MidiInApi : public MidiApi struct MidiQueue { unsigned int front; unsigned int back; - unsigned int size; unsigned int ringSize; MidiMessage *ring; // Default constructor. MidiQueue() - :front(0), back(0), size(0), ringSize(0) {} + :front(0), back(0), ringSize(0), ring(0) {} + bool push(const MidiMessage&); + bool pop(std::vector*, double*); + unsigned int size(unsigned int *back=0, + unsigned int *front=0); }; // The RtMidiInData structure is used to pass private class data to @@ -764,7 +797,7 @@ class MidiOutApi : public MidiApi MidiOutApi( void ); virtual ~MidiOutApi( void ); - virtual void sendMessage( std::vector *message ) = 0; + virtual void sendMessage( const unsigned char *message, size_t size ) = 0; }; // **************************************************************** // @@ -774,8 +807,8 @@ class MidiOutApi : public MidiApi // **************************************************************** // inline RtMidi::Api RtMidiIn :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); } -inline void RtMidiIn :: openPort( unsigned int portNumber, const std::string portName ) { rtapi_->openPort( portNumber, portName ); } -inline void RtMidiIn :: openVirtualPort( const std::string portName ) { rtapi_->openVirtualPort( portName ); } +inline void RtMidiIn :: openPort( unsigned int portNumber, const std::string &portName ) { rtapi_->openPort( portNumber, portName ); } +inline void RtMidiIn :: openVirtualPort( const std::string &portName ) { rtapi_->openVirtualPort( portName ); } inline void RtMidiIn :: closePort( void ) { rtapi_->closePort(); } inline bool RtMidiIn :: isPortOpen() const { return rtapi_->isPortOpen(); } inline void RtMidiIn :: setCallback( RtMidiCallback callback, void *userData ) { ((MidiInApi *)rtapi_)->setCallback( callback, userData ); } @@ -784,17 +817,18 @@ inline unsigned int RtMidiIn :: getPortCount( void ) { return rtapi_->getPortCou inline std::string RtMidiIn :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); } inline void RtMidiIn :: ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ) { ((MidiInApi *)rtapi_)->ignoreTypes( midiSysex, midiTime, midiSense ); } inline double RtMidiIn :: getMessage( std::vector *message ) { return ((MidiInApi *)rtapi_)->getMessage( message ); } -inline void RtMidiIn :: setErrorCallback( RtMidiErrorCallback errorCallback ) { rtapi_->setErrorCallback(errorCallback); } +inline void RtMidiIn :: setErrorCallback( RtMidiErrorCallback errorCallback, void *userData ) { rtapi_->setErrorCallback(errorCallback, userData); } inline RtMidi::Api RtMidiOut :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); } -inline void RtMidiOut :: openPort( unsigned int portNumber, const std::string portName ) { rtapi_->openPort( portNumber, portName ); } -inline void RtMidiOut :: openVirtualPort( const std::string portName ) { rtapi_->openVirtualPort( portName ); } +inline void RtMidiOut :: openPort( unsigned int portNumber, const std::string &portName ) { rtapi_->openPort( portNumber, portName ); } +inline void RtMidiOut :: openVirtualPort( const std::string &portName ) { rtapi_->openVirtualPort( portName ); } inline void RtMidiOut :: closePort( void ) { rtapi_->closePort(); } inline bool RtMidiOut :: isPortOpen() const { return rtapi_->isPortOpen(); } inline unsigned int RtMidiOut :: getPortCount( void ) { return rtapi_->getPortCount(); } inline std::string RtMidiOut :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); } -inline void RtMidiOut :: sendMessage( std::vector *message ) { ((MidiOutApi *)rtapi_)->sendMessage( message ); } -inline void RtMidiOut :: setErrorCallback( RtMidiErrorCallback errorCallback ) { rtapi_->setErrorCallback(errorCallback); } +inline void RtMidiOut :: sendMessage( const std::vector *message ) { ((MidiOutApi *)rtapi_)->sendMessage( &message->at(0), message->size() ); } +inline void RtMidiOut :: sendMessage( const unsigned char *message, size_t size ) { ((MidiOutApi *)rtapi_)->sendMessage( message, size ); } +inline void RtMidiOut :: setErrorCallback( RtMidiErrorCallback errorCallback, void *userData ) { rtapi_->setErrorCallback(errorCallback, userData); } // **************************************************************** // // @@ -811,11 +845,11 @@ inline void RtMidiOut :: setErrorCallback( RtMidiErrorCallback errorCallback ) { class MidiInCore: public MidiInApi { public: - MidiInCore( const std::string clientName, unsigned int queueSizeLimit ); + MidiInCore( const std::string &clientName, unsigned int queueSizeLimit ); ~MidiInCore( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); @@ -827,15 +861,15 @@ class MidiInCore: public MidiInApi class MidiOutCore: public MidiOutApi { public: - MidiOutCore( const std::string clientName ); + MidiOutCore( const std::string &clientName ); ~MidiOutCore( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); + void sendMessage( const unsigned char *message, size_t size ); protected: void initialize( const std::string& clientName ); @@ -848,11 +882,11 @@ class MidiOutCore: public MidiOutApi class MidiInJack: public MidiInApi { public: - MidiInJack( const std::string clientName, unsigned int queueSizeLimit ); + MidiInJack( const std::string &clientName, unsigned int queueSizeLimit ); ~MidiInJack( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); @@ -867,15 +901,15 @@ class MidiInJack: public MidiInApi class MidiOutJack: public MidiOutApi { public: - MidiOutJack( const std::string clientName ); + MidiOutJack( const std::string &clientName ); ~MidiOutJack( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); + void sendMessage( const unsigned char *message, size_t size ); protected: std::string clientName; @@ -891,11 +925,11 @@ class MidiOutJack: public MidiOutApi class MidiInAlsa: public MidiInApi { public: - MidiInAlsa( const std::string clientName, unsigned int queueSizeLimit ); + MidiInAlsa( const std::string &clientName, unsigned int queueSizeLimit ); ~MidiInAlsa( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); @@ -907,15 +941,15 @@ class MidiInAlsa: public MidiInApi class MidiOutAlsa: public MidiOutApi { public: - MidiOutAlsa( const std::string clientName ); + MidiOutAlsa( const std::string &clientName ); ~MidiOutAlsa( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); + void sendMessage( const unsigned char *message, size_t size ); protected: void initialize( const std::string& clientName ); @@ -928,11 +962,11 @@ class MidiOutAlsa: public MidiOutApi class MidiInWinMM: public MidiInApi { public: - MidiInWinMM( const std::string clientName, unsigned int queueSizeLimit ); + MidiInWinMM( const std::string &clientName, unsigned int queueSizeLimit ); ~MidiInWinMM( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); @@ -944,15 +978,15 @@ class MidiInWinMM: public MidiInApi class MidiOutWinMM: public MidiOutApi { public: - MidiOutWinMM( const std::string clientName ); + MidiOutWinMM( const std::string &clientName ); ~MidiOutWinMM( void ); RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); + void openPort( unsigned int portNumber, const std::string &portName ); + void openVirtualPort( const std::string &portName ); void closePort( void ); unsigned int getPortCount( void ); std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); + void sendMessage( const unsigned char *message, size_t size ); protected: void initialize( const std::string& clientName ); @@ -965,13 +999,13 @@ class MidiOutWinMM: public MidiOutApi class MidiInDummy: public MidiInApi { public: - MidiInDummy( const std::string /*clientName*/, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { errorString_ = "MidiInDummy: This class provides no functionality."; error( RtMidiError::WARNING, errorString_ ); } + MidiInDummy( const std::string &/*clientName*/, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { errorString_ = "MidiInDummy: This class provides no functionality."; error( RtMidiError::WARNING, errorString_ ); } RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; } - void openPort( unsigned int /*portNumber*/, const std::string /*portName*/ ) {} - void openVirtualPort( const std::string /*portName*/ ) {} + void openPort( unsigned int /*portNumber*/, const std::string &/*portName*/ ) {} + void openVirtualPort( const std::string &/*portName*/ ) {} void closePort( void ) {} unsigned int getPortCount( void ) { return 0; } - std::string getPortName( unsigned int portNumber ) { return ""; } + std::string getPortName( unsigned int /*portNumber*/ ) { return ""; } protected: void initialize( const std::string& /*clientName*/ ) {} @@ -980,14 +1014,14 @@ class MidiInDummy: public MidiInApi class MidiOutDummy: public MidiOutApi { public: - MidiOutDummy( const std::string /*clientName*/ ) { errorString_ = "MidiOutDummy: This class provides no functionality."; error( RtMidiError::WARNING, errorString_ ); } + MidiOutDummy( const std::string &/*clientName*/ ) { errorString_ = "MidiOutDummy: This class provides no functionality."; error( RtMidiError::WARNING, errorString_ ); } RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; } - void openPort( unsigned int /*portNumber*/, const std::string /*portName*/ ) {} - void openVirtualPort( const std::string /*portName*/ ) {} + void openPort( unsigned int /*portNumber*/, const std::string &/*portName*/ ) {} + void openVirtualPort( const std::string &/*portName*/ ) {} void closePort( void ) {} unsigned int getPortCount( void ) { return 0; } std::string getPortName( unsigned int /*portNumber*/ ) { return ""; } - void sendMessage( std::vector * /*message*/ ) {} + void sendMessage( const unsigned char * /*message*/, size_t /*size*/ ) {} protected: void initialize( const std::string& /*clientName*/ ) {} diff --git a/source/DEINDUGens/include/faust/midi/bela-midi.h b/source/DEINDUGens/include/faust/midi/bela-midi.h index 48683a4846..4faab75a9c 100644 --- a/source/DEINDUGens/include/faust/midi/bela-midi.h +++ b/source/DEINDUGens/include/faust/midi/bela-midi.h @@ -1,26 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __bela_midi__ @@ -80,28 +78,77 @@ class bela_midi : public midi_handler { break; case kmmPitchBend: for (unsigned int i = 0; i < midi->fMidiInputs.size(); i++) { - midi->fMidiInputs[i]->pitchWheel(0, message.getChannel(), ((message.getDataByte(1) * 128.0 + message.getDataByte(0)) - 8192) / 8192.0); + midi->fMidiInputs[i]->pitchWheel(0, message.getChannel(), ((message.getDataByte(1) << 7) + message.getDataByte(0))); + } + case kmmSystem: + { + // We have to re-build the MIDI message: + int channel = message.getChannel(); + int status = message.getStatusByte(); + int systemRealtimeByte = channel | status; + + switch (systemRealtimeByte) + { + case MIDI_CLOCK: + for (unsigned int i = 0; i < midi->fMidiInputs.size(); i++) { + midi->fMidiInputs[i]->clock(0); + } + break; + case MIDI_START: + for (unsigned int i = 0; i < midi->fMidiInputs.size(); i++) { + midi->fMidiInputs[i]->startSync(0); + } + break; + case MIDI_CONT: + // We can consider start and continue as identical messages. + for (unsigned int i = 0; i < midi->fMidiInputs.size(); i++) { + midi->fMidiInputs[i]->startSync(0); + } + break; + case MIDI_STOP: + for (unsigned int i = 0; i < midi->fMidiInputs.size(); i++) { + midi->fMidiInputs[i]->stopSync(0); + } + break; + case MIDI_SYSEX_START: +#if 0 // this is not implemented on Bela yet + std::vector sysex; + for (unsigned int j = 0; j < message.getNumDataBytes(); j++) { + sysex.push_back(message.getDataByte(j)); + } + + // Would be nice to do this: + // std::vector sysex(message.getData(), message.getData() + message.getNumDataBytes()); + + for (unsigned int i = 0; i < midi->fMidiInputs.size(); i++) { + midi->fMidiInputs[i]->sysEx(sysex); + } +#endif + break; + default: + break; + } + break; } - break; case kmmNone: case kmmAny: default: break; - } + } } - + public: bela_midi() :midi_handler("bela") {} - + virtual ~bela_midi() { - stop_midi(); + stopMidi(); } - - bool start_midi() + + bool startMidi() { if (fBelaMidi.readFrom(0) < 0) { return false; @@ -116,7 +163,7 @@ class bela_midi : public midi_handler { return true; } - void stop_midi() + void stopMidi() { // Nothing todo? } @@ -185,13 +232,13 @@ class bela_midi : public midi_handler { void ctrlChange14bits(int channel, int ctrl, int value) {} - void start_sync(double date) + void startSync(double date) { unsigned char buffer[1] = { MIDI_START }; fBelaMidi.writeOutput(buffer, 1); } - void stop_sync(double date) + void stopSync(double date) { unsigned char buffer[1] = { MIDI_STOP }; fBelaMidi.writeOutput(buffer, 1); @@ -202,7 +249,12 @@ class bela_midi : public midi_handler { unsigned char buffer[1] = { MIDI_CLOCK }; fBelaMidi.writeOutput(buffer, 1); } - + + void sysEx(double date, std::vector& message) + { + fBelaMidi.writeOutput(message.data(), message.size()); + } + }; #endif // __bela_midi__ diff --git a/source/DEINDUGens/include/faust/midi/jack-midi.h b/source/DEINDUGens/include/faust/midi/jack-midi.h index c014790816..6da011d7a7 100644 --- a/source/DEINDUGens/include/faust/midi/jack-midi.h +++ b/source/DEINDUGens/include/faust/midi/jack-midi.h @@ -1,26 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __jack_midi__ @@ -28,36 +26,35 @@ #include #include + #include #include "faust/midi/midi.h" #include "faust/gui/ring-buffer.h" class MapUI; -class jack_midi_handler : public midi_handler { +//----------------------------------------------- +// MIDI input/output handling using JACK library +//----------------------------------------------- +class jack_midi_handler : public midi_handler { + protected: ringbuffer_t* fOutBuffer; - void writeMessage(unsigned char* buffer, size_t size) + void writeMessage(double date, unsigned char* buffer, size_t size) { - if (fOutBuffer) { - size_t res; - // Write size of message - if ((res = ringbuffer_write(fOutBuffer, (const char*)&size, sizeof(size_t))) != sizeof(size_t)) { - std::cerr << "writeMessage size : error size = " << size << " res = " << res << std::endl; - } - // Write message content - if ((res = ringbuffer_write(fOutBuffer, (const char*)buffer, size)) != size) { - std::cerr << "writeMessage size : error size = " << size << " res = " << res << std::endl; - } + size_t res; + DatedMessage dated_message(date, buffer, size); + if ((res = ringbuffer_write(fOutBuffer, (const char*)&dated_message, sizeof(DatedMessage))) != sizeof(DatedMessage)) { + std::cerr << "ringbuffer_write error DatedMessage" << std::endl; } } void processMidiInBuffer(void* port_buf_in) { - for (int i = 0; i < jack_midi_get_event_count(port_buf_in); ++i) { + for (size_t i = 0; i < jack_midi_get_event_count(port_buf_in); ++i) { jack_midi_event_t event; if (jack_midi_event_get(&event, port_buf_in, i) == 0) { @@ -73,6 +70,9 @@ class jack_midi_handler : public midi_handler { handleData1(time, type, channel, (int)event.buffer[1]); } else if (nBytes == 3) { handleData2(time, type, channel, (int)event.buffer[1], (int)event.buffer[2]); + } else { + std::vector message(event.buffer, event.buffer + event.size); + handleMessage(time, type, message); } } } @@ -87,17 +87,13 @@ class jack_midi_handler : public midi_handler { } else { jack_midi_clear_buffer(port_buf_out); } - size_t res, message_size; - + // Write each message one by one - while (ringbuffer_read(fOutBuffer, (char*)&message_size, sizeof(message_size)) == sizeof(message_size)) { - // Reserve MIDI event with the correct size - jack_midi_data_t* data = jack_midi_event_reserve(port_buf_out, 0, message_size); + DatedMessage dated_message; + while (ringbuffer_read(fOutBuffer, (char*)&dated_message, sizeof(DatedMessage)) == sizeof(DatedMessage)) { + jack_midi_data_t* data = jack_midi_event_reserve(port_buf_out, dated_message.fDate, dated_message.fSize); if (data) { - // Write its content - if ((res = ringbuffer_read(fOutBuffer, (char*)data, message_size)) != message_size) { - std::cerr << "processMidiOut incorrect message : res = " << res << std::endl; - } + memcpy(data, dated_message.fBuffer, dated_message.fSize); } else { std::cerr << "jack_midi_event_reserve error" << std::endl; } @@ -116,13 +112,14 @@ class jack_midi_handler : public midi_handler { ringbuffer_free(fOutBuffer); } + // MIDI output API MapUI* keyOn(int channel, int pitch, int velocity) { unsigned char buffer[3] = { static_cast(MIDI_NOTE_ON + channel), static_cast(pitch), static_cast(velocity) }; - writeMessage(buffer, 3); + writeMessage(0, buffer, 3); return 0; } @@ -132,7 +129,7 @@ class jack_midi_handler : public midi_handler { = { static_cast(MIDI_NOTE_OFF + channel), static_cast(pitch), static_cast(velocity) }; - writeMessage(buffer, 3); + writeMessage(0, buffer, 3); } void ctrlChange(int channel, int ctrl, int val) @@ -141,7 +138,7 @@ class jack_midi_handler : public midi_handler { = { static_cast(MIDI_CONTROL_CHANGE + channel), static_cast(ctrl), static_cast(val) }; - writeMessage(buffer, 3); + writeMessage(0, buffer, 3); } void chanPress(int channel, int press) @@ -149,7 +146,7 @@ class jack_midi_handler : public midi_handler { unsigned char buffer[2] = { static_cast(MIDI_AFTERTOUCH + channel), static_cast(press) }; - writeMessage(buffer, 2); + writeMessage(0, buffer, 2); } void progChange(int channel, int pgm) @@ -157,7 +154,7 @@ class jack_midi_handler : public midi_handler { unsigned char buffer[2] = { static_cast(MIDI_PROGRAM_CHANGE + channel), static_cast(pgm) }; - writeMessage(buffer, 2); + writeMessage(0, buffer, 2); } void keyPress(int channel, int pitch, int press) @@ -166,7 +163,7 @@ class jack_midi_handler : public midi_handler { = { static_cast(MIDI_POLY_AFTERTOUCH + channel), static_cast(pitch), static_cast(press) }; - writeMessage(buffer, 3); + writeMessage(0, buffer, 3); } void pitchWheel(int channel, int wheel) @@ -175,27 +172,32 @@ class jack_midi_handler : public midi_handler { = { static_cast(MIDI_PITCH_BEND + channel), static_cast(wheel & 0x7F), static_cast((wheel >> 7) & 0x7F) }; - writeMessage(buffer, 3); + writeMessage(0, buffer, 3); } void ctrlChange14bits(int channel, int ctrl, int value) {} - void start_sync(double date) + void startSync(double date) { unsigned char buffer[1] = { MIDI_START }; - writeMessage(buffer, 1); + writeMessage(date, buffer, 1); } - - void stop_sync(double date) + + void stopSync(double date) { unsigned char buffer[1] = { MIDI_STOP }; - writeMessage(buffer, 1); + writeMessage(date, buffer, 1); } void clock(double date) { unsigned char buffer[1] = { MIDI_CLOCK }; - writeMessage(buffer, 1); + writeMessage(date, buffer, 1); + } + + void sysEx(double date, std::vector& message) + { + writeMessage(date, message.data(), (int)message.size()); } }; diff --git a/source/DEINDUGens/include/faust/midi/juce-midi.h b/source/DEINDUGens/include/faust/midi/juce-midi.h old mode 100755 new mode 100644 index ab9c456107..398b62db36 --- a/source/DEINDUGens/include/faust/midi/juce-midi.h +++ b/source/DEINDUGens/include/faust/midi/juce-midi.h @@ -1,28 +1,26 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __juce_midi__ #define __juce_midi__ @@ -30,6 +28,10 @@ class MapUI; +//----------------------------------------------- +// MIDI input/output handling using JUCE library +//----------------------------------------------- + class juce_midi_handler : public midi_handler { protected: @@ -43,35 +45,35 @@ class juce_midi_handler : public midi_handler { if (message.isNoteOff()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->keyOff(0, message.getChannel(), data[1], data[2]); + fMidiInputs[i]->keyOff(message.getTimeStamp(), message.getChannel(), data[1], data[2]); } } else if (message.isNoteOn()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { if (data[1] != 0) { - fMidiInputs[i]->keyOn(0, message.getChannel(), data[1], data[2]); + fMidiInputs[i]->keyOn(message.getTimeStamp(), message.getChannel(), data[1], data[2]); } else { - fMidiInputs[i]->keyOff(0, message.getChannel(), data[1], data[2]); + fMidiInputs[i]->keyOff(message.getTimeStamp(), message.getChannel(), data[1], data[2]); } } } else if (message.isAftertouch()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->keyPress(0, message.getChannel(), data[1], data[2]); + fMidiInputs[i]->keyPress(message.getTimeStamp(), message.getChannel(), data[1], data[2]); } } else if (message.isController()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->ctrlChange(0, message.getChannel(), data[1], data[2]); + fMidiInputs[i]->ctrlChange(message.getTimeStamp(), message.getChannel(), data[1], data[2]); } } else if (message.isProgramChange()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->progChange(0, message.getChannel(), data[1]); + fMidiInputs[i]->progChange(message.getTimeStamp(), message.getChannel(), data[1]); } } else if (message.isChannelPressure()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->chanPress(0, message.getChannel(), data[1]); + fMidiInputs[i]->chanPress(message.getTimeStamp(), message.getChannel(), data[1]); } } else if (message.isPitchWheel()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->pitchWheel(0, message.getChannel(), ((data[1] * 128.0 + data[2]) - 8192) / 8192.0); + fMidiInputs[i]->pitchWheel(message.getTimeStamp(), message.getChannel(), ((data[1] << 7) + data[2])); } } else if (message.isMidiClock()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { @@ -79,11 +81,16 @@ class juce_midi_handler : public midi_handler { } } else if (message.isMidiStart()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->start_sync(message.getTimeStamp()); + fMidiInputs[i]->startSync(message.getTimeStamp()); } } else if (message.isMidiStop()) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->stop_sync(message.getTimeStamp()); + fMidiInputs[i]->stopSync(message.getTimeStamp()); + } + } else if (message.isSysEx()) { + std::vector sysex(data, data + message.getRawDataSize()); + for (unsigned int i = 0; i < fMidiInputs.size(); i++) { + fMidiInputs[i]->sysEx(message.getTimeStamp(), sysex); } } else { std::cerr << "Unused MIDI message" << std::endl; @@ -94,7 +101,10 @@ class juce_midi_handler : public midi_handler { juce_midi_handler():midi_handler("JUCE") {} - + + virtual ~juce_midi_handler() {} + + // Used with MidiBuffer (containing several messages) void encodeBuffer(MidiBuffer& buffer) { const ScopedTryLock lock(fMutex); @@ -118,10 +128,11 @@ class juce_midi_handler : public midi_handler { buffer.clear(); } + // MIDI output API MapUI* keyOn(int channel, int pitch, int velocity) { fOutputBuffer.addEvent(MidiMessage::noteOn(channel + 1, pitch, uint8(velocity)), 0); - return 0; + return nullptr; } void keyOff(int channel, int pitch, int velocity) @@ -151,18 +162,20 @@ class juce_midi_handler : public midi_handler { void pitchWheel(int channel, int wheel) { - // Deactivated for now - // fOutputBuffer.addEvent(MidiMessage::pitchWheel(channel + 1, wheel), 0); + fOutputBuffer.addEvent(MidiMessage::pitchWheel(channel + 1, range(0, 16383, wheel)), 0); } - void ctrlChange14bits(int channel, int ctrl, int value) {} + void ctrlChange14bits(int channel, int ctrl, int value) + { + // TODO + } - void start_sync(double date) + void startSync(double date) { fOutputBuffer.addEvent(MidiMessage::midiStart(), 0); } - void stop_sync(double date) + void stopSync(double date) { fOutputBuffer.addEvent(MidiMessage::midiStop(), 0); } @@ -171,6 +184,11 @@ class juce_midi_handler : public midi_handler { { fOutputBuffer.addEvent(MidiMessage::midiClock(), 0); } + + void sysEx(double date, std::vector& message) + { + fOutputBuffer.addEvent(MidiMessage(message.data(), (int)message.size()), 0); + } }; @@ -190,10 +208,10 @@ class juce_midi : public juce_midi_handler, public MidiInputCallback { virtual ~juce_midi() { - stop_midi(); + stopMidi(); } - bool start_midi() + bool startMidi() { if ((fMidiIn = MidiInput::openDevice(MidiInput::getDefaultDeviceIndex(), this)) == nullptr) { return false; @@ -206,17 +224,18 @@ class juce_midi : public juce_midi_handler, public MidiInputCallback { return true; } - void stop_midi() + void stopMidi() { fMidiIn->stop(); delete fMidiIn; delete fMidiOut; } - + + // MIDI output API MapUI* keyOn(int channel, int pitch, int velocity) { fMidiOut->sendMessageNow(MidiMessage::noteOn(channel + 1, pitch, uint8(velocity))); - return 0; + return nullptr; } void keyOff(int channel, int pitch, int velocity) @@ -246,27 +265,34 @@ class juce_midi : public juce_midi_handler, public MidiInputCallback { void pitchWheel(int channel, int wheel) { - // Deactivated for now - // fMidiOut->sendMessageNow(MidiMessage::pitchWheel(channel + 1, wheel)); + fMidiOut->sendMessageNow(MidiMessage::pitchWheel(channel + 1, range(0, 16383, wheel))); } - void ctrlChange14bits(int channel, int ctrl, int value) {} - - void start_sync(double date) + void ctrlChange14bits(int channel, int ctrl, int value) + { + // TODO + } + + void startSync(double date) { fMidiOut->sendMessageNow(MidiMessage::midiStart()); } - void stop_sync(double date) + void stopSync(double date) { fMidiOut->sendMessageNow(MidiMessage::midiStop()); } void clock(double date) { - fMidiOut->sendMessageNow(MidiMessage::midiClock()); + fMidiOut->sendMessageNow(MidiMessage::midiClock()); } - + + void sysEx(double date, std::vector& message) + { + fMidiOut->sendMessageNow(MidiMessage(message.data(), (int)message.size())); + } + }; #endif // __juce_midi__ diff --git a/source/DEINDUGens/include/faust/midi/midi.h b/source/DEINDUGens/include/faust/midi/midi.h index 3aff4ff13f..9ff61edfd1 100644 --- a/source/DEINDUGens/include/faust/midi/midi.h +++ b/source/DEINDUGens/include/faust/midi/midi.h @@ -1,26 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __midi__ @@ -29,12 +27,17 @@ #include #include #include +#include class MapUI; -//---------------------------------------------------------------- -// MIDI processor definition -//---------------------------------------------------------------- +/******************************************************************************* + * MIDI processor definition. + * + * MIDI input or output handling classes will implement this interface, + * so the same method names (keyOn, ctrlChange...) will be used either + * when decoding MIDI input or encoding MIDI output events. + *******************************************************************************/ class midi { @@ -53,7 +56,17 @@ class midi { { keyOff(channel, pitch, velocity); } + + virtual void keyPress(double, int channel, int pitch, int press) + { + keyPress(channel, pitch, press); + } + virtual void chanPress(double date, int channel, int press) + { + chanPress(channel, press); + } + virtual void pitchWheel(double, int channel, int wheel) { pitchWheel(channel, wheel); @@ -63,30 +76,25 @@ class midi { { ctrlChange(channel, ctrl, value); } - - virtual void progChange(double, int channel, int pgm) - { - progChange(channel, pgm); - } - - virtual void keyPress(double, int channel, int pitch, int press) + + virtual void ctrlChange14bits(double, int channel, int ctrl, int value) { - keyPress(channel, pitch, press); + ctrlChange14bits(channel, ctrl, value); } - - virtual void chanPress(double date, int channel, int press) + + virtual void progChange(double, int channel, int pgm) { - chanPress(channel, press); + progChange(channel, pgm); } - - virtual void ctrlChange14bits(double, int channel, int ctrl, int value) + + virtual void sysEx(double, std::vector& message) { - ctrlChange14bits(channel, ctrl, value); + sysEx(message); } // MIDI sync - virtual void start_sync(double date) {} - virtual void stop_sync(double date) {} + virtual void startSync(double date) {} + virtual void stopSync(double date) {} virtual void clock(double date) {} // Standard MIDI API @@ -98,20 +106,24 @@ class midi { virtual void ctrlChange14bits(int channel, int ctrl, int value) {} virtual void pitchWheel(int channel, int wheel) {} virtual void progChange(int channel, int pgm) {} + virtual void sysEx(std::vector& message) {} enum MidiStatus { // channel voice messages - MIDI_NOTE_OFF = 0x80, - MIDI_NOTE_ON = 0x90, - MIDI_CONTROL_CHANGE = 0xB0, - MIDI_PROGRAM_CHANGE = 0xC0, - MIDI_PITCH_BEND = 0xE0, - MIDI_AFTERTOUCH = 0xD0, // aka channel pressure - MIDI_POLY_AFTERTOUCH = 0xA0, // aka key pressure - MIDI_CLOCK = 0xF8, - MIDI_START = 0xFA, - MIDI_STOP = 0xFC + MIDI_NOTE_OFF = 0x80, + MIDI_NOTE_ON = 0x90, + MIDI_CONTROL_CHANGE = 0xB0, + MIDI_PROGRAM_CHANGE = 0xC0, + MIDI_PITCH_BEND = 0xE0, + MIDI_AFTERTOUCH = 0xD0, // aka channel pressure + MIDI_POLY_AFTERTOUCH = 0xA0, // aka key pressure + MIDI_CLOCK = 0xF8, + MIDI_START = 0xFA, + MIDI_CONT = 0xFB, + MIDI_STOP = 0xFC, + MIDI_SYSEX_START = 0xF0, + MIDI_SYSEX_STOP = 0xF7 }; @@ -123,9 +135,14 @@ class midi { }; }; -//---------------------------------------------------------------- -// Base class for MIDI API handling -//---------------------------------------------------------------- +/**************************************************** + * Base class for MIDI input handling. + * + * Shared common code used for input handling: + * - decoding Real-Time messages: handleSync + * - decoding one data byte messages: handleData1 + * - decoding two data byte messages: handleData2 + ****************************************************/ class midi_handler : public midi { @@ -133,14 +150,16 @@ class midi_handler : public midi { std::vector fMidiInputs; std::string fName; - + + int range(int min, int max, int val) { return (val < min) ? min : ((val >= max) ? max : val); } + public: midi_handler(const std::string& name = "MIDIHandler"):fName(name) {} virtual ~midi_handler() {} - virtual void addMidiIn(midi* midi_dsp) { if (midi_dsp) fMidiInputs.push_back(midi_dsp); } - virtual void removeMidiIn(midi* midi_dsp) + void addMidiIn(midi* midi_dsp) { if (midi_dsp) fMidiInputs.push_back(midi_dsp); } + void removeMidiIn(midi* midi_dsp) { std::vector::iterator it = std::find(fMidiInputs.begin(), fMidiInputs.end(), midi_dsp); if (it != fMidiInputs.end()) { @@ -148,8 +167,11 @@ class midi_handler : public midi { } } - virtual bool start_midi() { return true; } - virtual void stop_midi() {} + virtual bool startMidi() { return true; } + virtual void stopMidi() {} + + void setName(const std::string& name) { fName = name; } + std::string getName() { return fName; } void handleSync(double time, int type) { @@ -159,11 +181,11 @@ class midi_handler : public midi { } } else if (type == MIDI_START) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->start_sync(time); + fMidiInputs[i]->startSync(time); } } else if (type == MIDI_STOP) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->stop_sync(time); + fMidiInputs[i]->stopSync(time); } } } @@ -197,7 +219,7 @@ class midi_handler : public midi { } } else if (type == MIDI_PITCH_BEND) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { - fMidiInputs[i]->pitchWheel(time, channel, (data2 * 128.0) + data1); + fMidiInputs[i]->pitchWheel(time, channel, (data2 << 7) + data1); } } else if (type == MIDI_POLY_AFTERTOUCH) { for (unsigned int i = 0; i < fMidiInputs.size(); i++) { @@ -205,8 +227,38 @@ class midi_handler : public midi { } } } + + void handleMessage(double time, int type, std::vector& message) + { + if (type == MIDI_SYSEX_START) { + for (unsigned int i = 0; i < fMidiInputs.size(); i++) { + fMidiInputs[i]->sysEx(time, message); + } + } + } +}; +//------------------------------- +// For timestamped MIDI messages +//------------------------------- + +struct DatedMessage { + + double fDate; + unsigned char fBuffer[3]; + size_t fSize; + + DatedMessage(double date, unsigned char* buffer, size_t size) + :fDate(date), fSize(size) + { + assert(size <= 3); + memcpy(fBuffer, buffer, size); + } + + DatedMessage():fDate(0.0), fSize(0) + {} + }; #endif // __midi__ diff --git a/source/DEINDUGens/include/faust/midi/rt-midi.h b/source/DEINDUGens/include/faust/midi/rt-midi.h index 35b1c1895e..1e4accb933 100644 --- a/source/DEINDUGens/include/faust/midi/rt-midi.h +++ b/source/DEINDUGens/include/faust/midi/rt-midi.h @@ -1,26 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __rt_midi__ @@ -33,28 +31,37 @@ class MapUI; +//------------------------------------------------- +// MIDI input/output handling using RtMidi library +//------------------------------------------------- + class rt_midi : public midi_handler { private: std::vector fInput; std::vector fOutput; - + bool fIsVirtual; + static void midiCallback(double time, std::vector* message, void* arg) { rt_midi* midi = static_cast(arg); - unsigned int nBytes = message->size(); + size_t nBytes = message->size(); int type = (int)message->at(0) & 0xf0; int channel = (int)message->at(0) & 0x0f; // MIDI sync if (nBytes == 1) { midi->handleSync(time, (int)message->at(0)); + // One data byte messages } else if (nBytes == 2) { midi->handleData1(time, type, channel, (int)message->at(1)); + // Two data bytes messages } else if (nBytes == 3) { midi->handleData2(time, type, channel, (int)message->at(1), (int)message->at(2)); - } + } else { + midi->handleMessage(time, (int)message->at(0), *message); + } } bool openMidiInputPorts() @@ -74,8 +81,7 @@ class rt_midi : public midi_handler { fInput.push_back(midi_in); midi_in->openPort(i); midi_in->setCallback(&midiCallback, this); - std::string portName = midi_in->getPortName(i); - std::cout << "Input port #" << i << ": " << portName << '\n'; + //std::cout << "Input port #" << i << ": " << midi_in->getPortName(i) << '\n'; } return true; } @@ -95,8 +101,7 @@ class rt_midi : public midi_handler { RtMidiOut* midi_out = new RtMidiOut(); fOutput.push_back(midi_out); midi_out->openPort(i); - std::string portName = midi_out->getPortName(i); - std::cout << "Output port #" << i << ": " << portName << '\n'; + //std::cout << "Output port #" << i << ": " << midi_out->getPortName(i) << '\n'; } return true; } @@ -127,35 +132,40 @@ class rt_midi : public midi_handler { public: - rt_midi(const std::string& name = "RtMidi"):midi_handler(name) + rt_midi(const std::string& name = "RtMidi", bool is_virtual = false):midi_handler(name), fIsVirtual(is_virtual) {} virtual ~rt_midi() { - stop_midi(); + stopMidi(); } - bool start_midi() + bool startMidi() { try { #if TARGET_OS_IPHONE - if (!openMidiInputPorts()) { stop_midi(); return false; } - if (!openMidiOutputPorts()) { stop_midi(); return false; } + if (!openMidiInputPorts()) { stopMidi(); return false; } + if (!openMidiOutputPorts()) { stopMidi(); return false; } #else - chooseMidiInputPort(fName); - chooseMidiOutPort(fName); + if (fIsVirtual) { + chooseMidiInputPort(fName); + chooseMidiOutPort(fName); + } else { + if (!openMidiInputPorts()) { stopMidi(); return false; } + //std::cout << "Warning : MIDI outputs are not started in this mode !\n"; + } #endif return true; } catch (RtMidiError &error) { error.printMessage(); - stop_midi(); + stopMidi(); return false; } } - void stop_midi() + void stopMidi() { std::vector::iterator it1; for (it1 = fInput.begin(); it1 != fInput.end(); it1++) { @@ -169,7 +179,8 @@ class rt_midi : public midi_handler { } fOutput.clear(); } - + + // MIDI output API MapUI* keyOn(int channel, int pitch, int velocity) { std::vector message; @@ -234,14 +245,14 @@ class rt_midi : public midi_handler { void ctrlChange14bits(int channel, int ctrl, int value) {} - void start_sync(double date) + void startSync(double date) { std::vector message; message.push_back(MIDI_START); sendMessage(message); } - void stop_sync(double date) + void stopSync(double date) { std::vector message; message.push_back(MIDI_STOP); @@ -254,7 +265,13 @@ class rt_midi : public midi_handler { message.push_back(MIDI_CLOCK); sendMessage(message); } - + + void sysEx(double, std::vector& message) + { + sendMessage(message); + } + }; + #endif // __rt_midi__ diff --git a/source/DEINDUGens/include/faust/misc.h b/source/DEINDUGens/include/faust/misc.h index ff22a38a93..a90e76b211 100644 --- a/source/DEINDUGens/include/faust/misc.h +++ b/source/DEINDUGens/include/faust/misc.h @@ -1,22 +1,24 @@ /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -24,8 +26,8 @@ #include #include +#include #include -#include #include "faust/gui/meta.h" @@ -34,33 +36,33 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1< struct mapping /*! \brief a faust node is a terminal node and represents a faust parameter controler */ -template class FaustNode : public MessageDriven, public uiItem +template class FaustNode : public MessageDriven, public uiTypedItem { mapping fMapping; RootNode* fRoot; bool fInput; // true for input nodes (slider, button...) - bool store(C val) { *fZone = fMapping.clip(val); return true; } + //--------------------------------------------------------------------- + // Warning !!! + // The cast (C *)fZone is necessary because the real size allocated is + // only known at execution time. When the library is compiled, fZone is + // uniquely defined by FAUSTFLOAT. + //--------------------------------------------------------------------- + bool store(C val) { *(C *)this->fZone = fMapping.clip(val); return true; } void sendOSC() const; protected: FaustNode(RootNode* root, const char *name, C* zone, C init, C min, C max, const char* prefix, GUI* ui, bool initZone, bool input) - : MessageDriven(name, prefix), uiItem(ui, zone), fRoot(root), fMapping(min, max), fInput(input) - { + : MessageDriven(name, prefix), uiTypedItem(ui, zone), fMapping(min, max), fRoot(root), fInput(input) + { if (initZone) { *zone = init; } @@ -85,10 +89,10 @@ template class FaustNode : public MessageDriven, public uiItem node->addReference(); return node; } - + bool accept(const Message* msg); void get(unsigned long ipdest) const; ///< handler for the 'get' message - virtual void reflectZone() { sendOSC(); fCache = *fZone; } + virtual void reflectZone() { sendOSC(); this->fCache = *this->fZone; } }; } // end namespace diff --git a/source/DEINDUGens/include/faust/osc/Message.h b/source/DEINDUGens/include/faust/osc/Message.h index aeebf045fd..956dde9e8d 100644 --- a/source/DEINDUGens/include/faust/osc/Message.h +++ b/source/DEINDUGens/include/faust/osc/Message.h @@ -208,7 +208,7 @@ class Message /// \brief gives the message source IP unsigned long src() const { return fSrcIP; } /// \brief gives the message parameters count - int size() const { return fArguments.size(); } + int size() const { return (int)fArguments.size(); } bool operator == (const Message& other) const; diff --git a/source/DEINDUGens/include/faust/osc/MessageDriven.h b/source/DEINDUGens/include/faust/osc/MessageDriven.h index 0cb6a73849..22db6fb038 100644 --- a/source/DEINDUGens/include/faust/osc/MessageDriven.h +++ b/source/DEINDUGens/include/faust/osc/MessageDriven.h @@ -120,7 +120,7 @@ class MessageDriven : public MessageProcessor, public smartable void add(SMessageDriven node) { fSubNodes.push_back (node); } const char* getName() const { return fName.c_str(); } std::string getOSCAddress() const; - int size() const { return fSubNodes.size (); } + int size() const { return (int)fSubNodes.size (); } const std::string& name() const { return fName; } SMessageDriven subnode(int i) { return fSubNodes[i]; } diff --git a/source/DEINDUGens/include/faust/osc/RootNode.h b/source/DEINDUGens/include/faust/osc/RootNode.h index 770a473f32..64c9c71be4 100644 --- a/source/DEINDUGens/include/faust/osc/RootNode.h +++ b/source/DEINDUGens/include/faust/osc/RootNode.h @@ -70,7 +70,25 @@ struct aliastarget } else { // no control ! - return (fMinOut+fMaxOut)/2.0; + return (fMinOut+fMaxOut)/2.0f; + } + } + + float invscale(float x) const + { + if (fMinOut < fMaxOut) { + // increasing control + float z = (x < fMinOut) ? fMinOut : (x > fMaxOut) ? fMaxOut : x; + return fMinIn + (z-fMinOut)*(fMaxIn-fMinIn)/(fMaxOut-fMinOut); + + } else if (fMinOut > fMaxOut) { + // reversed control + float z = (x < fMaxOut) ? fMaxOut : (x > fMinOut) ? fMinOut : x; + return fMinIn + (fMinOut-z)*(fMaxIn-fMinIn)/(fMinOut-fMaxOut); + + } else { + // no control ! + return (fMinIn+fMaxIn)/2.0f; } } }; @@ -86,10 +104,15 @@ class RootNode : public MessageDriven { int *fUPDIn, *fUDPOut, *fUDPErr; // the osc port numbers (required by the hello method) OSCIO* fIO; // an OSC IO controler - std::map > fAliases; + + typedef std::map > TAliasMap; + TAliasMap fAliases; void processAlias(const std::string& address, float val); - + void eraseAliases(const std::string& target); + void eraseAlias (const std::string& target, const std::string& alias); + bool aliasError (const Message* msg); + protected: RootNode(const char *name, OSCIO* io = 0) : MessageDriven(name, ""), fUPDIn(0), fUDPOut(0), fUDPErr(0), fIO(io) {} virtual ~RootNode() {} @@ -102,12 +125,13 @@ class RootNode : public MessageDriven virtual void get(unsigned long ipdest) const; virtual void get(unsigned long ipdest, const std::string& what) const; + bool aliasMsg(const Message* msg, float omin, float omax); void addAlias(const char* alias, const char* address, float imin, float imax, float omin, float omax); bool acceptSignal(const Message* msg); ///< handler for signal data void hello(unsigned long ipdest) const; ///< handler for the 'hello' message void setPorts(int* in, int* out, int* err); - std::vector getAliases(const std::string& address); + std::vector > getAliases(const std::string& address, double value); }; } // end namespoace diff --git a/source/DEINDUGens/include/faust/sound-file.h b/source/DEINDUGens/include/faust/sound-file.h index 9ad28f4449..6aedb72bca 100644 --- a/source/DEINDUGens/include/faust/sound-file.h +++ b/source/DEINDUGens/include/faust/sound-file.h @@ -1,27 +1,24 @@ /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __SoundFileReader__ diff --git a/source/DEINDUGens/include/faust/unity/AudioPluginInterface.h b/source/DEINDUGens/include/faust/unity/AudioPluginInterface.h index e887869df4..8dc4f34f00 100644 --- a/source/DEINDUGens/include/faust/unity/AudioPluginInterface.h +++ b/source/DEINDUGens/include/faust/unity/AudioPluginInterface.h @@ -1,3 +1,26 @@ +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __UNITYAUDIOPLUGININTERFACE__ #define __UNITYAUDIOPLUGININTERFACE__ diff --git a/source/DEINDUGens/include/faust/vst/faust.h b/source/DEINDUGens/include/faust/vst/faust.h index 4b54d1bc9a..505f9483c1 100644 --- a/source/DEINDUGens/include/faust/vst/faust.h +++ b/source/DEINDUGens/include/faust/vst/faust.h @@ -6,7 +6,6 @@ #include #include "audioeffectx.h" -//#include "../audio/dsp.h" const int MAX_POLYPHONY = 10; @@ -18,99 +17,101 @@ const int INITIAL_TEMP_OUTPUT_SIZE = 1024; // that define the VST instrument behavior. ////////////////////////////////////////////////////////////////// class Faust : public AudioEffectX { -public: - // Constructor - Faust(audioMasterCallback audioMaster, dsp* dspi, vstUI* dspUIi); + + public: + // Constructor + Faust(audioMasterCallback audioMaster, dsp* dspi, vstUI* dspUIi); - // Destructor - virtual ~Faust(); + // Destructor + virtual ~Faust(); - virtual void processReplacing (FAUSTFLOAT** inputs, FAUSTFLOAT** outputs, VstInt32 sampleFrames); - virtual VstInt32 processEvents (VstEvents* events); + virtual void processReplacing (FAUSTFLOAT** inputs, FAUSTFLOAT** outputs, VstInt32 sampleFrames); + virtual VstInt32 processEvents (VstEvents* events); - virtual void setProgram (VstInt32 program); - virtual void setProgramName (const char *name); - virtual void getProgramName (char *name); - virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char *text); + virtual void setProgram (VstInt32 program); + virtual void setProgramName (const char *name); + virtual void getProgramName (char *name); + virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char *text); - virtual void setParameter (VstInt32 index, float value); - virtual float getParameter (VstInt32 index); - virtual void getParameterLabel (VstInt32 index, char *label); - virtual void getParameterDisplay (VstInt32 index, char *text); - virtual void getParameterName (VstInt32 index, char *text); - virtual bool getParameterProperties(VstInt32 index, VstParameterProperties* properties); + virtual void setParameter (VstInt32 index, float value); + virtual float getParameter (VstInt32 index); + virtual void getParameterLabel (VstInt32 index, char *label); + virtual void getParameterDisplay (VstInt32 index, char *text); + virtual void getParameterName (VstInt32 index, char *text); + virtual bool getParameterProperties(VstInt32 index, VstParameterProperties* properties); - virtual void setSampleRate (float sampleRate); + virtual void setSampleRate (float sampleRate); - virtual bool getInputProperties (VstInt32 index, VstPinProperties *properties); - virtual bool getOutputProperties (VstInt32 index, VstPinProperties *properties); + virtual bool getInputProperties (VstInt32 index, VstPinProperties *properties); + virtual bool getOutputProperties (VstInt32 index, VstPinProperties *properties); - virtual bool getEffectName (char *name); - virtual bool getVendorString (char *text); - virtual bool getProductString (char *text); - virtual VstInt32 getVendorVersion (); - virtual VstInt32 canDo (const char *text); + virtual bool getEffectName (char *name); + virtual bool getVendorString (char *text); + virtual bool getProductString (char *text); + virtual VstInt32 getVendorVersion (); + virtual VstInt32 canDo (const char *text); - virtual VstInt32 getNumMidiInputChannels (); - virtual VstInt32 getNumMidiOutputChannels (); + virtual VstInt32 getNumMidiInputChannels (); + virtual VstInt32 getNumMidiOutputChannels (); - virtual VstInt32 getMidiProgramName (VstInt32 channel, MidiProgramName *midiProgramName); - virtual VstInt32 getCurrentMidiProgram (VstInt32 channel, MidiProgramName *currentProgram); - virtual VstInt32 getMidiProgramCategory (VstInt32 channel, MidiProgramCategory *category); + virtual VstInt32 getMidiProgramName (VstInt32 channel, MidiProgramName *midiProgramName); + virtual VstInt32 getCurrentMidiProgram (VstInt32 channel, MidiProgramName *currentProgram); + virtual VstInt32 getMidiProgramCategory (VstInt32 channel, MidiProgramCategory *category); -private: - // Get metadata supplied by Faust compiler - const char* getMetadata(const char* key, const char* defaultString); + private: + + // Get metadata supplied by Faust compiler + const char* getMetadata(const char* key, const char* defaultString); - void initProcess (); - void noteOn (VstInt32 note, VstInt32 velocity, VstInt32 delta); - void noteOff (VstInt32 note, VstInt32 delta); - void allNotesOff( void ); - void fillProgram (VstInt32 channel, VstInt32 prg, MidiProgramName* mpn); + void initProcess(); + void noteOn(VstInt32 note, VstInt32 velocity, VstInt32 delta); + void noteOff(VstInt32 note, VstInt32 delta); + void allNotesOff(void); + void fillProgram(VstInt32 channel, VstInt32 prg, MidiProgramName* mpn); - void synthProcessReplacing(float **inputs, float **outputs, - VstInt32 sampleFrames); + void synthProcessReplacing(float **inputs, float **outputs, VstInt32 sampleFrames); - void compute(float** inputs, float** outputs, VstInt32 sampleFrames); - void bendPitch(float bend); + void compute(float** inputs, float** outputs, VstInt32 sampleFrames); + void bendPitch(float bend); - dsp* m_dsp; - vstUI* m_dspUI; + dsp* m_dsp; + vstUI* m_dspUI; - // For synths: - bool noteIsOn; - VstInt32 currentNote; - VstInt32 currentVelocity; - VstInt32 currentDelta; + // For synths: + bool noteIsOn; + VstInt32 currentNote; + VstInt32 currentVelocity; + VstInt32 currentDelta; - std::list m_currentNotes; - std::list m_currentVelocities; - std::list m_currentDeltas; + std::list m_currentNotes; + std::list m_currentVelocities; + std::list m_currentDeltas; - char programName[kVstMaxProgNameLen + 1]; + char programName[kVstMaxProgNameLen + 1]; - // Polyphony - std::vector m_voices; + // Polyphony + std::vector m_voices; - // Occupied voices - map note to voice index - struct voice_node { - VstInt32 note; - int voice; - }; + // Occupied voices - map note to voice index + struct voice_node { + VstInt32 note; + int voice; + }; - std::list m_playingVoices; + std::list m_playingVoices; - // key off but still sounding - std :: vector< int > m_releasedVoices; + // key off but still sounding + std::vector m_releasedVoices; - // Free voices - currently rot playing - std :: list< int > m_freeVoices; + // Free voices - currently rot playing + std::list m_freeVoices; - // Previously played voice - int m_prevVoice; + // Previously played voice + int m_prevVoice; - FAUSTFLOAT** m_tempOutputs; - size_t m_tempOutputSize; // in float frames + FAUSTFLOAT** m_tempOutputs; + size_t m_tempOutputSize; // in float frames + }; // end of Faust class #endif diff --git a/source/DEINDUGens/include/faust/vst/voice.h b/source/DEINDUGens/include/faust/vst/voice.h index 7020afc835..2ac4322ac1 100644 --- a/source/DEINDUGens/include/faust/vst/voice.h +++ b/source/DEINDUGens/include/faust/vst/voice.h @@ -5,18 +5,18 @@ #ifndef __VST_VOICE_H__ #define __VST_VOICE_H__ -//#include "../audio/dsp.h" - class Voice : public vstUI { -public: - Voice(int samplingRate) - : vstUI(), m_dsp() - { - m_dsp.init(samplingRate); - m_dsp.buildUserInterface(this); - } + + public: + Voice(int samplingRate) + : vstUI(), m_dsp() + { + m_dsp.init(samplingRate); + m_dsp.buildUserInterface(this); + } - mydsp m_dsp; + mydsp m_dsp; + }; //end of Voice vlass #endif diff --git a/source/DEINDUGens/include/faust/vst/vstui.h b/source/DEINDUGens/include/faust/vst/vstui.h index dc66216ed5..4f45ee1471 100644 --- a/source/DEINDUGens/include/faust/vst/vstui.h +++ b/source/DEINDUGens/include/faust/vst/vstui.h @@ -2,7 +2,7 @@ #define __VST_UI_H__ #include -#include +#include "faust/gui/UI.h" #ifdef DEBUG #define TRACE(x) x @@ -14,70 +14,70 @@ class vstUIObject { /* superclass of all VST UI widgets */ -protected: - - string fLabel; - float* fZone; - Meta metadata; - - float clip(float min, float max, float val) - { - return (val < min) ? min : (val > max) ? max : val; - } - - float normalize(float min, float max, float val) - { // VST parameters are normalized to the range [0;1] on the host - val = min + val * (max - min); - return (val < min) ? min : (val > max) ? max : val; - } - -public: - - vstUIObject(const char* label, float* zone) - : fLabel(label), fZone(zone), metadata() - {} - - virtual ~vstUIObject() - {} - - virtual void GetName(char *text) { - std::strcpy(text,fLabel.c_str()); - } - - virtual void SetValue(double f) { - *fZone = normalize(0.0f,1.0f,(float)f); - } - - virtual void SetValueNoNormalization(double f) { - *fZone = clip(0.0f,1.0f,(float)f); - } - - virtual float GetValue() { - return *fZone; - } - - virtual float GetValueNoNormalization() { - return *fZone; - } - - virtual void GetDisplay(char *text){ - std::sprintf(text,"%f",*fZone); - } - - virtual long GetID() { - /* returns the sum of all the ASCII characters contained in the - parameter's label */ - unsigned int i; - long acc; - for(i=0,acc = 0; i < fLabel.length(); i++) { - acc += (fLabel.c_str())[i]; - } - return acc; - } - - const float* getZone() const { - return fZone; - } + protected: + + string fLabel; + float* fZone; + Meta metadata; + + float clip(float min, float max, float val) + { + return (val < min) ? min : (val > max) ? max : val; + } + + float normalize(float min, float max, float val) + { // VST parameters are normalized to the range [0;1] on the host + val = min + val * (max - min); + return (val < min) ? min : (val > max) ? max : val; + } + + public: + + vstUIObject(const char* label, float* zone) + : fLabel(label), fZone(zone), metadata() + {} + + virtual ~vstUIObject() + {} + + virtual void GetName(char *text) { + std::strcpy(text,fLabel.c_str()); + } + + virtual void SetValue(double f) { + *fZone = normalize(0.0f,1.0f,(float)f); + } + + virtual void SetValueNoNormalization(double f) { + *fZone = clip(0.0f,1.0f,(float)f); + } + + virtual float GetValue() { + return *fZone; + } + + virtual float GetValueNoNormalization() { + return *fZone; + } + + virtual void GetDisplay(char *text){ + std::sprintf(text,"%f",*fZone); + } + + virtual long GetID() { + /* returns the sum of all the ASCII characters contained in the + parameter's label */ + unsigned int i; + long acc; + for(i=0,acc = 0; i < fLabel.length(); i++) { + acc += (fLabel.c_str())[i]; + } + return acc; + } + + const float* getZone() const { + return fZone; + } }; // end of vstUIObject class /*-------------------------------------------------------------------------*/ @@ -106,92 +106,92 @@ class vstToggleButton : public vstUIObject { /*--------------------------------------------------------------------------*/ class vstCheckButton : public vstUIObject { -public: - - vstCheckButton(const char* label, float* zone):vstUIObject(label,zone) {} - - virtual ~vstCheckButton() {} - - virtual float GetValue() { - return *fZone; - } - - virtual void SetValue(double f) {*fZone = (f>0.5f)?1.0f:0.0f;} - - virtual void GetDisplay(char *text) { - (*fZone>0.5f)? std::strcpy(text,"ON"): std::strcpy(text,"OFF"); - } + public: + + vstCheckButton(const char* label, float* zone):vstUIObject(label,zone) {} + + virtual ~vstCheckButton() {} + + virtual float GetValue() { + return *fZone; + } + + virtual void SetValue(double f) {*fZone = (f>0.5f)?1.0f:0.0f;} + + virtual void GetDisplay(char *text) { + (*fZone>0.5f)? std::strcpy(text,"ON"): std::strcpy(text,"OFF"); + } }; /*--------------------------------------------------------------------------*/ class vstButton : public vstUIObject { -public: - - vstButton(const char* label, float* zone) - : vstUIObject(label,zone) - {} - - virtual ~vstButton() {} - virtual float GetValue() {return *fZone;} - virtual void SetValue(double f) {*fZone = (f>0.5f)?1.0f:0.0f;} - virtual void GetDisplay(char *text){(*fZone>0.5f)? std::strcpy(text,"ON"): std::strcpy(text,"OFF");} + public: + + vstButton(const char* label, float* zone) + : vstUIObject(label,zone) + {} + + virtual ~vstButton() {} + virtual float GetValue() {return *fZone;} + virtual void SetValue(double f) {*fZone = (f>0.5f)?1.0f:0.0f;} + virtual void GetDisplay(char *text){(*fZone>0.5f)? std::strcpy(text,"ON"): std::strcpy(text,"OFF"); } }; #define MAX_PARAM_DISPLAY_PRECISION 6 /*--------------------------------------------------------------------------*/ -class vstSlider : public vstUIObject{ +class vstSlider : public vstUIObject { -private: - - float fInit; - float fMin; - float fMax; - float fStep; - int fPrecision; - -public: - - vstSlider(const char* label, float* zone, float init, float min, float max, float step) - :vstUIObject(label,zone), fInit(init), fMin(min), fMax(max), fStep(step), fPrecision(0) { - for (fPrecision = 0; fPrecision < MAX_PARAM_DISPLAY_PRECISION && step != floor(step); ++fPrecision, step *= 10.0) {;} - } - virtual ~vstSlider() {} - - // The VST host calls GetValue() and expects a result in [0,1]. - // The VST host calls SetValue(f) with f in [0,1]. We convert to real units. - // When we process MIDI controls, we call SetValueNoNormalization(f) with f in real units. - virtual float GetValue() { - return (*fZone-fMin)/(fMax-fMin); // normalize - } - - virtual void SetValue(double f) { - *fZone = normalize(fMin,fMax,(float)f); // denormalize - } - - virtual void SetValueNoNormalization(double f) { - *fZone = clip(fMin,fMax,(float)f); // raw - } - - int getMinValue() const { - return fMin; - } - - int getMaxValue() const { - return fMax; - } - - int getStep() const { - return fStep; - } - - void GetDisplay(char *text) { - if(fPrecision == 0) { - std::sprintf(text, "%d", int(*fZone)); - } else { - std::sprintf(text,"%.*f", fPrecision, *fZone); + private: + + float fInit; + float fMin; + float fMax; + float fStep; + int fPrecision; + + public: + + vstSlider(const char* label, float* zone, float init, float min, float max, float step) + :vstUIObject(label,zone), fInit(init), fMin(min), fMax(max), fStep(step), fPrecision(0) { + for (fPrecision = 0; fPrecision < MAX_PARAM_DISPLAY_PRECISION && step != floor(step); ++fPrecision, step *= 10.0) {;} + } + virtual ~vstSlider() {} + + // The VST host calls GetValue() and expects a result in [0,1]. + // The VST host calls SetValue(f) with f in [0,1]. We convert to real units. + // When we process MIDI controls, we call SetValueNoNormalization(f) with f in real units. + virtual float GetValue() { + return (*fZone-fMin)/(fMax-fMin); // normalize + } + + virtual void SetValue(double f) { + *fZone = normalize(fMin,fMax,(float)f); // denormalize + } + + virtual void SetValueNoNormalization(double f) { + *fZone = clip(fMin,fMax,(float)f); // raw + } + + int getMinValue() const { + return fMin; + } + + int getMaxValue() const { + return fMax; + } + + int getStep() const { + return fStep; + } + + void GetDisplay(char *text) { + if(fPrecision == 0) { + std::sprintf(text, "%d", int(*fZone)); + } else { + std::sprintf(text,"%.*f", fPrecision, *fZone); + } } - } }; @@ -199,257 +199,261 @@ class vstSlider : public vstUIObject{ class vstUI : public UI { -private: - - bool fStopped; - - vector fUITable; - map m_controlMetadataMap; - -public: - - int freqIndex; // note frequency - int gainIndex; // note velocity - int gateIndex; // note on/off - - // can be used for effects such as portamento where - // we have to know the previous note - int prevFreqIndex; - - // pitchbend wheel - int pitchbendIndex; - - // Constructor - vstUI() - : fStopped(false), freqIndex(-1), gainIndex(-1), gateIndex(-1) - { } - - // Destructor - virtual ~vstUI() - { - for (vector::iterator iter = fUITable.begin(); - iter != fUITable.end(); iter++) { - delete *iter; - } - - for (map::iterator iter = m_controlMetadataMap.begin(); - iter != m_controlMetadataMap.end(); ++iter) - { - delete iter->second; - } - } // end of destructor - - void stop() { fStopped = true; } - bool stopped() { return fStopped; } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* value) { - map::iterator iter = m_controlMetadataMap.find(zone); - if (iter == m_controlMetadataMap.end()) { - // if Meta for zone doesn't exist, create it now - pair entry(zone, new Meta()); - pair< map::iterator, bool> result = m_controlMetadataMap.insert(entry); - if (!result.second) { - TRACE(fprintf(stderr, "Failed adding metadata %s:%s\n", key, value)); - return; - } + private: + + bool fStopped; + + vector fUITable; + map m_controlMetadataMap; + + public: + + int freqIndex; // note frequency + int gainIndex; // note velocity + int gateIndex; // note on/off + + // can be used for effects such as portamento where + // we have to know the previous note + int prevFreqIndex; + + // pitchbend wheel + int pitchbendIndex; + + // Constructor + vstUI() + : fStopped(false), freqIndex(-1), gainIndex(-1), gateIndex(-1) + {} + + // Destructor + virtual ~vstUI() + { + for (vector::iterator iter = fUITable.begin(); + iter != fUITable.end(); iter++) { + delete *iter; + } - iter = result.first; - } - - iter->second->declare(key, value); - } // end of declare - - /* - Return metadata for control (such as style, unit, etc...). - */ - const char* getControlMetadata(int index, const char* key, const char* defaultString) - { - if (index < 0 || index > (int)fUITable.size()) { - TRACE(fprintf(stderr, "Illegal index (%d) accessed by getControlMetadata\n", - index)); - return defaultString; - } - - const float* zone = fUITable[index]->getZone(); - map::iterator iter = m_controlMetadataMap.find(zone); - if (iter == m_controlMetadataMap.end()) { - TRACE(fprintf(stderr, "Metadata for control %d not found\n", index)); - return defaultString; - } - - return iter->second->get(key, defaultString); - } // end of getControlMetadata - - void setAny(int anyIndex, float val, const char *str) { - if (anyIndex < 0) { - // On the Receptor, and perhaps other hosts, output to stderr is - // logged in a file. - TRACE(fprintf(stderr,"*** Faust vsti: %sIndex = %d never set!\n", - str,anyIndex) ); - return; - } - - if (anyIndex >= (int)fUITable.size()) { - TRACE(fprintf(stderr,"*** Faust vsti: %sIndex = %d too large!\n", - str,anyIndex)); - return; - } - TRACE(fprintf(stderr,"*** Faust vsti: Setting %sIndex = %d to %f\n", - str,anyIndex,val)); - fUITable[anyIndex]->SetValueNoNormalization(val); - } // end of setAny - - - float getAny(int anyIndex, const char* str) { - if (anyIndex < 0) { - TRACE(fprintf(stderr, "=== Faust VSTi: %sIndex = %d never set!\n", - str, anyIndex)); - return -1; - } - - return fUITable[anyIndex]->GetValueNoNormalization(); - } // end of getAny - - void setFreq(float val) { - setAny(freqIndex, val, "freq"); - } - - float getFreq( void ) { - return getAny(freqIndex, "freq"); - } - - void setGate(float val) { - setAny(gateIndex, val, "gate"); - } - - void setGain(float val) { - setAny(gainIndex, val, "gain"); - } - - void setPrevFreq(float val) { - setAny(prevFreqIndex, val, "prevfreq"); - } - - void setPitchBend(float val) { - setAny(pitchbendIndex, val, "pitchbend"); - } - - bool ckAnyMatch(const char* label, const char* indexName, int *index) { - if (0 == strcmp(label,indexName)) { - TRACE( fprintf(stderr,"=== Faust vsti: label '%s' matches '%s'\n",label,indexName) ); - *index = fUITable.size() - 1; - return true; - } - return false; - } - - void ckAllMatches(const char* label) { - ckAnyMatch(label,"gain",&gainIndex); - ckAnyMatch(label,"gate",&gateIndex); - ckAnyMatch(label,"freq",&freqIndex); - ckAnyMatch(label,"prevfreq", &prevFreqIndex); - ckAnyMatch(label,"pitchbend", &pitchbendIndex); - } - - void addButton(const char* label, float* zone) { - vstButton* theButton = new vstButton(label, zone); - fUITable.push_back(theButton); - TRACE( fprintf(stderr,"=== Faust vsti: Adding Button with label '%s'\n",label) ); - ckAnyMatch(label,"gate",&gateIndex); - } - - void addToggleButton(const char* label, float* zone) { - fUITable.push_back(new vstToggleButton(label, zone)); - } - - void addCheckButton(const char* label, float* zone) { - fUITable.push_back(new vstCheckButton(label, zone)); - } - - void addVerticalSlider(const char* label, float* zone, float init, - float min, float max, float step) - { - vstSlider* theSlider = new vstSlider(label, zone, init, min, max, step); - fUITable.push_back(theSlider); - TRACE( fprintf(stderr,"=== Faust vsti: Adding VSlider (HSlider) " - "with label '%s'\n",label) ); - ckAllMatches(label); - } - - void addHorizontalSlider(const char* label, float* zone, float init, - float min, float max, float step) - { - vstSlider* theSlider = new vstSlider(label, zone, init, min, max, step); - fUITable.push_back(theSlider); - TRACE( fprintf(stderr,"=== Faust vsti: Adding HSlider with label '%s'\n",label) ); - ckAllMatches(label); - } - - void addNumEntry(const char* label, float* zone, float init, float min, - float max, float step) - { - /* Number entries converted to horizontal sliders */ - vstSlider* theSlider = new vstSlider(label, zone, init, min, max, step); - fUITable.push_back(theSlider); - TRACE( fprintf(stderr,"=== Faust vsti: Adding NumEntry (HSlider) with " - "label '%s'\n",label) ); - ckAllMatches(label); - } - - void openFrameBox(const char* label) {} - void openTabBox(const char* label) {} - void openHorizontalBox(const char* label) {} - void openVerticalBox(const char* label) {} - void closeBox() {} - - void SetValue(VstInt32 index, double f) { - assert(index < (VstInt32)fUITable.size()); - fUITable[index]->SetValue(f); - } - - float GetValue(VstInt32 index) { - assert(index < (VstInt32)fUITable.size()); - return fUITable[index]->GetValue(); - } - - void GetDisplay(VstInt32 index, char *text) { - assert(index < (VstInt32)fUITable.size()); - fUITable[index]->GetDisplay(text); - } - - void GetName(VstInt32 index, char *text) { - assert(index < (VstInt32)fUITable.size()); - fUITable[index]->GetName(text); - } - - long GetNumParams() { - return fUITable.size(); - } - - /* Creates a (unique?)id by summing all the parameter's labels, - * then wrapping it in the range [0;maxNumberOfId] and adding - * this number to the offset made by the Four Character ID: 'FAUS' - */ - long makeID() { - const long maxNumberOfId = 128; - long baseid = 'FAUS'; - long id=0; - - for(int i=0;i<(int)fUITable.size();i++) { - id += fUITable[i]->GetID(); - } - - return baseid + id % maxNumberOfId; - } + for (map::iterator iter = m_controlMetadataMap.begin(); + iter != m_controlMetadataMap.end(); ++iter) + { + delete iter->second; + } + } // end of destructor + + void stop() { fStopped = true; } + bool stopped() { return fStopped; } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* value) + { + map::iterator iter = m_controlMetadataMap.find(zone); + if (iter == m_controlMetadataMap.end()) { + // if Meta for zone doesn't exist, create it now + pair entry(zone, new Meta()); + pair< map::iterator, bool> result = m_controlMetadataMap.insert(entry); + if (!result.second) { + TRACE(fprintf(stderr, "Failed adding metadata %s:%s\n", key, value)); + return; + } + + iter = result.first; + } + + iter->second->declare(key, value); + } // end of declare + + /* + Return metadata for control (such as style, unit, etc...). + */ + const char* getControlMetadata(int index, const char* key, const char* defaultString) + { + if (index < 0 || index > (int)fUITable.size()) { + TRACE(fprintf(stderr, "Illegal index (%d) accessed by getControlMetadata\n", + index)); + return defaultString; + } + + const float* zone = fUITable[index]->getZone(); + map::iterator iter = m_controlMetadataMap.find(zone); + if (iter == m_controlMetadataMap.end()) { + TRACE(fprintf(stderr, "Metadata for control %d not found\n", index)); + return defaultString; + } + + return iter->second->get(key, defaultString); + } // end of getControlMetadata + + void setAny(int anyIndex, float val, const char *str) { + if (anyIndex < 0) { + // On the Receptor, and perhaps other hosts, output to stderr is + // logged in a file. + TRACE(fprintf(stderr,"*** Faust vsti: %sIndex = %d never set!\n", + str,anyIndex) ); + return; + } + + if (anyIndex >= (int)fUITable.size()) { + TRACE(fprintf(stderr,"*** Faust vsti: %sIndex = %d too large!\n", + str,anyIndex)); + return; + } + TRACE(fprintf(stderr,"*** Faust vsti: Setting %sIndex = %d to %f\n", + str,anyIndex,val)); + fUITable[anyIndex]->SetValueNoNormalization(val); + } // end of setAny + + + float getAny(int anyIndex, const char* str) { + if (anyIndex < 0) { + TRACE(fprintf(stderr, "=== Faust VSTi: %sIndex = %d never set!\n", + str, anyIndex)); + return -1; + } + + return fUITable[anyIndex]->GetValueNoNormalization(); + } // end of getAny + + void setFreq(float val) { + setAny(freqIndex, val, "freq"); + } + + float getFreq( void ) { + return getAny(freqIndex, "freq"); + } + + void setGate(float val) { + setAny(gateIndex, val, "gate"); + } + + void setGain(float val) { + setAny(gainIndex, val, "gain"); + } + + void setPrevFreq(float val) { + setAny(prevFreqIndex, val, "prevfreq"); + } + + void setPitchBend(float val) { + setAny(pitchbendIndex, val, "pitchbend"); + } + + bool ckAnyMatch(const char* label, const char* indexName, int *index) { + if (0 == strcmp(label,indexName)) { + TRACE( fprintf(stderr,"=== Faust vsti: label '%s' matches '%s'\n",label,indexName) ); + *index = fUITable.size() - 1; + return true; + } + return false; + } + + void ckAllMatches(const char* label) { + ckAnyMatch(label,"gain",&gainIndex); + ckAnyMatch(label,"gate",&gateIndex); + ckAnyMatch(label,"freq",&freqIndex); + ckAnyMatch(label,"prevfreq", &prevFreqIndex); + ckAnyMatch(label,"pitchbend", &pitchbendIndex); + } + + void addButton(const char* label, float* zone) { + vstButton* theButton = new vstButton(label, zone); + fUITable.push_back(theButton); + TRACE( fprintf(stderr,"=== Faust vsti: Adding Button with label '%s'\n",label) ); + ckAnyMatch(label,"gate",&gateIndex); + } + + void addToggleButton(const char* label, float* zone) { + fUITable.push_back(new vstToggleButton(label, zone)); + } + + void addCheckButton(const char* label, float* zone) { + fUITable.push_back(new vstCheckButton(label, zone)); + } + + void addVerticalSlider(const char* label, float* zone, float init, + float min, float max, float step) + { + vstSlider* theSlider = new vstSlider(label, zone, init, min, max, step); + fUITable.push_back(theSlider); + TRACE( fprintf(stderr,"=== Faust vsti: Adding VSlider (HSlider) " + "with label '%s'\n",label) ); + ckAllMatches(label); + } + + void addHorizontalSlider(const char* label, float* zone, float init, + float min, float max, float step) + { + vstSlider* theSlider = new vstSlider(label, zone, init, min, max, step); + fUITable.push_back(theSlider); + TRACE( fprintf(stderr,"=== Faust vsti: Adding HSlider with label '%s'\n",label) ); + ckAllMatches(label); + } + + void addNumEntry(const char* label, float* zone, float init, float min, + float max, float step) + { + /* Number entries converted to horizontal sliders */ + vstSlider* theSlider = new vstSlider(label, zone, init, min, max, step); + fUITable.push_back(theSlider); + TRACE( fprintf(stderr,"=== Faust vsti: Adding NumEntry (HSlider) with " + "label '%s'\n",label) ); + ckAllMatches(label); + } + + void openFrameBox(const char* label) {} + void openTabBox(const char* label) {} + void openHorizontalBox(const char* label) {} + void openVerticalBox(const char* label) {} + void closeBox() {} + + void SetValue(VstInt32 index, double f) { + assert(index < (VstInt32)fUITable.size()); + fUITable[index]->SetValue(f); + } + + float GetValue(VstInt32 index) { + assert(index < (VstInt32)fUITable.size()); + return fUITable[index]->GetValue(); + } + + void GetDisplay(VstInt32 index, char *text) { + assert(index < (VstInt32)fUITable.size()); + fUITable[index]->GetDisplay(text); + } + + void GetName(VstInt32 index, char *text) { + assert(index < (VstInt32)fUITable.size()); + fUITable[index]->GetName(text); + } + + long GetNumParams() { + return fUITable.size(); + } + + /* Creates a (unique?)id by summing all the parameter's labels, + * then wrapping it in the range [0;maxNumberOfId] and adding + * this number to the offset made by the Four Character ID: 'FAUS' + */ + long makeID() { + const long maxNumberOfId = 128; + long baseid = 'FAUS'; + long id=0; + + for(int i=0;i<(int)fUITable.size();i++) { + id += fUITable[i]->GetID(); + } + + return baseid + id % maxNumberOfId; + } + + // To be implemented + void addNumDisplay(const char* label, float* zone, int precision) {} + void addTextDisplay(const char* label, float* zone, char* names[], + float min, float max){} + void addHorizontalBargraph(const char* label, float* zone, float min, + float max){} + void addVerticalBargraph(const char* label, float* zone, float min, + float max){} + + void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} - // To be implemented - void addNumDisplay(const char* label, float* zone, int precision) {} - void addTextDisplay(const char* label, float* zone, char* names[], - float min, float max){} - void addHorizontalBargraph(const char* label, float* zone, float min, - float max){} - void addVerticalBargraph(const char* label, float* zone, float min, - float max){} }; // end of vstUI class #endif